Creates a milestone escrow (JSON body, no file upload). Rules: at least 2 milestones, every milestone amount is naira with at most two decimal places (minimum 1), and the sum of milestone amounts must equal amount. Requires the customer-id header. maxDelivery (1 to 365) and deliveryTimeline are required, and each milestone’s dueDate, when given, must be a future date.
Your secret key as a Bearer token. The key prefix selects the environment: sk_test_... (staging) or sk_live_... (production); a key on the wrong host is refused with 403 Unauthorized Access. Each key is limited to 10 requests per minute (429 beyond that) and, on production, to the IP addresses on your dashboard allowlist when one is configured.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Payluk API","description":"Merchant API for escrow payment links, milestones, disputes and payments on Payluk.","colors":{"primary":"#635BFF","light":"#8C84FF","dark":"#4B45C6"},"logo":{"light":"https://mintcdn.com/payluk-ef2ec5d5/rkT218q-vzY-YX70/logo/light.svg?fit=max\u0026auto=format\u0026n=rkT218q-vzY-YX70\u0026q=85\u0026s=4d5ac80b7027fa47525679435f866b7a","dark":"https://mintcdn.com/payluk-ef2ec5d5/rkT218q-vzY-YX70/logo/dark.svg?fit=max\u0026auto=format\u0026n=rkT218q-vzY-YX70\u0026q=85\u0026s=0d2d45ebcb4b59d2505dfb2963cd4cd5"},"favicon":"https://mintcdn.com/payluk-ef2ec5d5/rkT218q-vzY-YX70/favicon.svg?fit=max\u0026auto=format\u0026n=rkT218q-vzY-YX70\u0026q=85\u0026s=57e2a7f2aaba8aea48f98fc8fbb5bcc2","navbar":{"links":[{"href":"mailto:[email protected]","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://payluk.ng"}},"footer":{"socials":{"website":"https://payluk.ng","x":"https://x.com/payluk"}},"fonts":{"family":"DM Sans"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"payluk-ef2ec5d5","hasAudioNarration":false,"actualSubdomain":"payluk-ef2ec5d5","customDomains":["docs.payluk.ng"],"gitSource":{"type":"github","owner":"jerozeek","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"collectionId":"f4fe0f48-58ed-4eed-a3e6-12471f8dd6b7","liveDeploymentHistoryId":"6ad8d33b9cc3966443d31784","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad8d33b9cc3966443d31784"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ad8d33b9cc3966443d31784","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API Reference","count":57},{"language":"default","tag":"Documentation","count":18},{"language":"default","tag":"1. Onboard customers","count":9},{"language":"default","tag":"6. Fund it: Payments","count":9},{"language":"default","tag":"7. Release \u0026 resolve: Disputes","count":8},{"language":"default","tag":"3. Create the deal: Escrow","count":8},{"language":"default","tag":"2. Catalog (optional)","count":7},{"language":"default","tag":"Core concepts","count":7},{"language":"default","tag":"4. Create the deal: Milestone Escrow","count":6},{"language":"default","tag":"5. Stake \u0026 resolve: Vault Escrow","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"html[data-current-path^=\"/api-reference/\"]:not([data-current-path$=\"/overview\"]) #header>.prose{font-size:1rem;line-height:1.75}"}],"page":{"pagePath":"api-reference/milestone-escrow/create-milestone-escrow","slug":"/api-reference/milestone-escrow/create-milestone-escrow","pageMetadata":{"title":"Create milestone escrow","openapi":"openapi.json POST /v1/escrow/milestone/create","description":"Creates a milestone escrow (JSON body, no file upload). Rules: at least 2 milestones, every milestone amount is naira with at most two decimal places (minimum 1), and the **sum of milestone amounts must equal `amount`**. Requires the `customer-id` header. `maxDelivery` (1 to 365) and `deliveryTimeline` are required, and each milestone's `dueDate`, when given, must be a future date.","href":"/api-reference/milestone-escrow/create-milestone-escrow"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Creates a milestone escrow (JSON body, no file upload). Rules: at least 2 milestones, every milestone amount is naira with at most two decimal places (minimum 1), and the \", _jsxs(_components.strong, {\n children: [\"sum of milestone amounts must equal \", _jsx(_components.code, {\n children: \"amount\"\n })]\n }), \". Requires the \", _jsx(_components.code, {\n children: \"customer-id\"\n }), \" header. \", _jsx(_components.code, {\n children: \"maxDelivery\"\n }), \" (1 to 365) and \", _jsx(_components.code, {\n children: \"deliveryTimeline\"\n }), \" are required, and each milestone’s \", _jsx(_components.code, {\n children: \"dueDate\"\n }), \", when given, must be a future date.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create milestone escrow","openapi":"openapi.json POST /v1/escrow/milestone/create","description":"Creates a milestone escrow (JSON body, no file upload). Rules: at least 2 milestones, every milestone amount is naira with at most two decimal places (minimum 1), and the **sum of milestone amounts must equal `amount`**. Requires the `customer-id` header. `maxDelivery` (1 to 365) and `deliveryTimeline` are required, and each milestone's `dueDate`, when given, must be a future date.","href":"/api-reference/milestone-escrow/create-milestone-escrow"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Milestone Escrow"],"summary":"Create milestone escrow","operationId":"createMilestoneEscrow","description":"Creates a milestone escrow (JSON body, no file upload). Rules: at least 2 milestones, every milestone amount is naira with at most two decimal places (minimum 1), and the **sum of milestone amounts must equal `amount`**. Requires the `customer-id` header. `maxDelivery` (1 to 365) and `deliveryTimeline` are required, and each milestone's `dueDate`, when given, must be a future date.","parameters":["268793a9-bb81-4781-ae7e-5b129f9df73a"],"requestBody":"7e9aea46-72d9-4e3e-aea8-669894ee6462","responses":{"201":"35423e74-032a-4fe5-ab37-11c5423581e3","400":"6ef6c518-0ece-4e58-992d-38d0a3d3f961","401":"1331ee17-a5e5-43d0-9497-d8c5d69db428","429":"8600b26b-5b26-4dca-92ce-555dbcde7d5d"},"method":"post","type":"path","servers":["aefc91df-d969-4cc9-bdc5-50d00d24475d","a3d61f54-47ad-4063-90bb-7b528d417445"],"security":["1e2fcc27-9d70-4608-bab0-b7f13130ea35"],"path":"/v1/escrow/milestone/create","baseUrlOptions":["https://staging.api.payluk.ng","https://api.payluk.ng"],"title":"Create milestone escrow","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"268793a9-bb81-4781-ae7e-5b129f9df73a":{"name":"customer-id","in":"header","required":true,"description":"The merchant customer this request acts on behalf of.","schema":{"type":"string","isRequired":true,"description":"The merchant customer this request acts on behalf of.","uniqueKey":"","typeLabel":"string"},"example":"665f1b2c9a1e4d0012ab3c01"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["amount","purpose","whoPays","milestones","maxDelivery","deliveryTimeline"],"properties":{"amount":{"type":"number","minimum":1000,"description":"Naira with at most two decimal places. Minimum 1000. Must equal the sum of the milestone amounts.","example":1000000,"isRequired":true,"uniqueKey":"amount","typeLabel":"number"},"purpose":{"type":"string","example":"Company website build","isRequired":true,"uniqueKey":"purpose","typeLabel":"string"},"whoPays":{"type":"string","enum":["buyer"],"description":"For milestone escrows the buyer always pays the Payluk fee; `buyer` is the only accepted value.","example":"buyer","isRequired":true,"uniqueKey":"whoPays","typeLabel":"enum\u003cstring>"},"maxDelivery":{"type":"integer","minimum":1,"maximum":365,"description":"Length of the delivery window, in `deliveryTimeline` units. Required. Between 1 and 365.","example":30,"isRequired":true,"uniqueKey":"maxDelivery","typeLabel":"integer"},"deliveryTimeline":{"type":"string","enum":["minutes","hours","days"],"example":"days","description":"Unit for `maxDelivery`. Required.","isRequired":true,"uniqueKey":"deliveryTimeline","typeLabel":"enum\u003cstring>"},"milestones":{"type":"array","minItems":2,"description":"At least 2 milestones whose amounts sum to `amount`.","items":{"type":"object","required":["title","amount"],"properties":{"title":{"type":"string","example":"Design","isRequired":true,"uniqueKey":"milestones.items.[INDEX].title","typeLabel":"string"},"amount":{"type":"number","minimum":1,"description":"Naira with at most two decimal places. All milestone amounts must sum to the escrow `amount`.","example":300000,"isRequired":true,"uniqueKey":"milestones.items.[INDEX].amount","typeLabel":"number"},"description":{"type":"string","example":"Figma mockups","uniqueKey":"milestones.items.[INDEX].description","typeLabel":"string"},"dueDate":{"type":"string","format":"date","example":"2026-07-15","description":"Optional ISO date. Must be in the future.","uniqueKey":"milestones.items.[INDEX].dueDate","typeLabel":"string\u003cdate>"},"customerId":{"type":"string","description":"Optional. The customer who should receive this milestone's funds. When present, releasing the milestone moves its funds to this customer's main balance instead of the seller's.","example":"665f1b2c9a1e4d0012ab3c40","uniqueKey":"milestones.items.[INDEX].customerId","typeLabel":"string"}},"uniqueKey":"milestones.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"milestones","typeLabel":"object[]"},"description":{"type":"string","example":"3-phase delivery","uniqueKey":"description","typeLabel":"string"},"totalQuantity":{"type":"integer","example":1,"uniqueKey":"totalQuantity","typeLabel":"integer"},"categoryId":{"type":"string","example":"665f1b2c9a1e4d0012ab3c30","uniqueKey":"categoryId","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"amount":1000000,"purpose":"Company website build","description":"3-phase delivery","whoPays":"buyer","maxDelivery":30,"deliveryTimeline":"days","totalQuantity":1,"categoryId":"665f1b2c9a1e4d0012ab3c30","milestones":[{"title":"Design","description":"Figma mockups","amount":300000,"dueDate":"2026-07-15","customerId":"665f1b2c9a1e4d0012ab3c40"},{"title":"Development","description":"Frontend + backend","amount":500000,"dueDate":"2026-08-15"},{"title":"Deployment","description":"Go-live + handover","amount":200000}]},"examples":{"Example":{"title":"Example","value":{"amount":1000000,"purpose":"Company website build","description":"3-phase delivery","whoPays":"buyer","maxDelivery":30,"deliveryTimeline":"days","totalQuantity":1,"categoryId":"665f1b2c9a1e4d0012ab3c30","milestones":[{"title":"Design","description":"Figma mockups","amount":300000,"dueDate":"2026-07-15","customerId":"665f1b2c9a1e4d0012ab3c40"},{"title":"Development","description":"Frontend + backend","amount":500000,"dueDate":"2026-08-15"},{"title":"Deployment","description":"Go-live + handover","amount":200000}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"35423e74-032a-4fe5-ab37-11c5423581e3":{"description":"Milestone escrow created.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","example":200,"uniqueKey":"status","typeLabel":"integer"},"message":{"type":"string","example":"Operation successful","uniqueKey":"message","typeLabel":"string"},"data":{"type":"object","properties":{"id":{"type":"string","example":"665f1b2c9a1e4d0012ab3c10","uniqueKey":"data.id","typeLabel":"string"},"amount":{"type":"integer","example":150000,"uniqueKey":"data.amount","typeLabel":"integer"},"purpose":{"type":"string","example":"MacBook Pro 14\"","uniqueKey":"data.purpose","typeLabel":"string"},"description":{"type":"string","example":"Space grey, sealed","uniqueKey":"data.description","typeLabel":"string"},"whoPays":{"type":"string","enum":["buyer","seller","both"],"example":"both","uniqueKey":"data.whoPays","typeLabel":"enum\u003cstring>"},"imageUrl":{"type":"array","items":{"type":"string","uniqueKey":"data.imageUrl.items.[INDEX]","typeLabel":"string"},"example":["https://cdn.payluk.ng/escrow/abc.png"],"uniqueKey":"data.imageUrl","typeLabel":"string[]"},"fee":{"type":"integer","example":3750,"uniqueKey":"data.fee","typeLabel":"integer"},"additionalFee":{"type":"integer","description":"The merchant's own charge on top of the amount (delivery and the like). 0 unless set through Update additional fee.","example":0,"uniqueKey":"data.additionalFee","typeLabel":"integer"},"additionalFeeRefundable":{"type":"boolean","description":"Whether a buyer-favoured dispute refund returns the additional fee to the buyer.","example":true,"uniqueKey":"data.additionalFeeRefundable","typeLabel":"boolean"},"paymentToken":{"type":"string","example":"PY_8AB12C9D3045","uniqueKey":"data.paymentToken","typeLabel":"string"},"paidAt":{"oneOf":[{"type":"string","example":null,"uniqueKey":"data.paidAt.oneOf.0","typeLabel":"string"},{"type":"null","example":null,"uniqueKey":"data.paidAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.paidAt","typeLabel":"string | null"},"status":{"type":"string","description":"High-level escrow status.","enum":["PENDING","ONGOING","COMPLETED","REFUNDED","CLAIMED","DISPUTED","INVESTIGATING","SPLIT"],"uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"state":{"type":"string","description":"Lifecycle state of the escrow.","enum":["AWAITING_PAYMENT","OPENED","CLOSED"],"uniqueKey":"data.state","typeLabel":"enum\u003cstring>"},"channel":{"type":"string","example":"API","uniqueKey":"data.channel","typeLabel":"string"},"isSeller":{"type":"boolean","example":true,"uniqueKey":"data.isSeller","typeLabel":"boolean"},"dispute":{"oneOf":[{"type":"array","items":{"type":"object","uniqueKey":"data.dispute.oneOf.0.items.[INDEX]","typeLabel":"object"},"example":null,"uniqueKey":"data.dispute.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object"},"example":null,"uniqueKey":"data.dispute.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.dispute","typeLabel":"object[] | null"},"category":{"oneOf":[{"type":"object","example":null,"uniqueKey":"data.category.oneOf.0","typeLabel":"object"},{"type":"null","example":null,"uniqueKey":"data.category.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.category","typeLabel":"object | null"},"completedAt":{"oneOf":[{"type":"string","example":null,"uniqueKey":"data.completedAt.oneOf.0","typeLabel":"string"},{"type":"null","example":null,"uniqueKey":"data.completedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.completedAt","typeLabel":"string | null"},"maxDelivery":{"type":"integer","example":3,"uniqueKey":"data.maxDelivery","typeLabel":"integer"},"deliveryTimeline":{"type":"string","example":"days","uniqueKey":"data.deliveryTimeline","typeLabel":"string"},"totalQuantity":{"type":"integer","example":1,"uniqueKey":"data.totalQuantity","typeLabel":"integer"},"settlementType":{"type":"string","enum":["STANDARD","MILESTONE","VAULT"],"uniqueKey":"data.settlementType","typeLabel":"enum\u003cstring>"},"milestones":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"665f1b2c9a1e4d0012ab3c21","uniqueKey":"data.milestones.items.[INDEX].id","typeLabel":"string"},"title":{"type":"string","example":"Design","uniqueKey":"data.milestones.items.[INDEX].title","typeLabel":"string"},"description":{"type":"string","example":"Figma mockups","uniqueKey":"data.milestones.items.[INDEX].description","typeLabel":"string"},"amount":{"type":"integer","example":300000,"uniqueKey":"data.milestones.items.[INDEX].amount","typeLabel":"integer"},"dueDate":{"oneOf":[{"type":"string","example":"2026-07-15","uniqueKey":"data.milestones.items.[INDEX].dueDate.oneOf.0","typeLabel":"string"},{"type":"null","example":"2026-07-15","uniqueKey":"data.milestones.items.[INDEX].dueDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.milestones.items.[INDEX].dueDate","typeLabel":"string | null"},"customerId":{"oneOf":[{"type":"string","description":"Optional beneficiary. When set, releasing this milestone credits this customer's main balance instead of the seller's.","example":null,"uniqueKey":"data.milestones.items.[INDEX].customerId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional beneficiary. When set, releasing this milestone credits this customer's main balance instead of the seller's.","example":null,"uniqueKey":"data.milestones.items.[INDEX].customerId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.milestones.items.[INDEX].customerId","typeLabel":"string | null"},"status":{"type":"string","enum":["PENDING","RELEASED","REFUNDED","SPLIT"],"description":"`SPLIT` means this milestone was still held when a dispute was resolved by dividing the funds between both parties.","example":"PENDING","uniqueKey":"data.milestones.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"releasedAt":{"oneOf":[{"type":"string","example":null,"uniqueKey":"data.milestones.items.[INDEX].releasedAt.oneOf.0","typeLabel":"string"},{"type":"null","example":null,"uniqueKey":"data.milestones.items.[INDEX].releasedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.milestones.items.[INDEX].releasedAt","typeLabel":"string | null"}},"uniqueKey":"data.milestones.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.milestones","typeLabel":"object[]"},"participants":{"oneOf":[{"type":"array","description":"VAULT escrows only: the customers staking into the pot.","items":{"type":"object","properties":{"customerId":{"type":"string","example":"665f1b2c9a1e4d0012ab3c40","uniqueKey":"data.participants.oneOf.0.items.[INDEX].customerId","typeLabel":"string"},"amount":{"type":"integer","example":600000,"uniqueKey":"data.participants.oneOf.0.items.[INDEX].amount","typeLabel":"integer"},"status":{"type":"string","enum":["STAKED","RELEASED","REFUNDED"],"example":"STAKED","uniqueKey":"data.participants.oneOf.0.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"stakedAt":{"type":"string","description":"Unix timestamp (seconds) the stake was locked.","example":"1784900000","uniqueKey":"data.participants.oneOf.0.items.[INDEX].stakedAt","typeLabel":"string"},"settledAt":{"oneOf":[{"type":"string","description":"Unix timestamp (seconds) the stake was released or refunded.","example":null,"uniqueKey":"data.participants.oneOf.0.items.[INDEX].settledAt.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unix timestamp (seconds) the stake was released or refunded.","example":null,"uniqueKey":"data.participants.oneOf.0.items.[INDEX].settledAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.participants.oneOf.0.items.[INDEX].settledAt","typeLabel":"string | null"}},"uniqueKey":"data.participants.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.participants.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"VAULT escrows only: the customers staking into the pot.","items":{"type":"object","properties":{"customerId":{"type":"string","example":"665f1b2c9a1e4d0012ab3c40"},"amount":{"type":"integer","example":600000},"status":{"type":"string","enum":["STAKED","RELEASED","REFUNDED"],"example":"STAKED"},"stakedAt":{"type":"string","description":"Unix timestamp (seconds) the stake was locked.","example":"1784900000"},"settledAt":{"oneOf":[{"type":"string","description":"Unix timestamp (seconds) the stake was released or refunded.","example":null},{"type":"null","description":"Unix timestamp (seconds) the stake was released or refunded.","example":null}]}}},"uniqueKey":"data.participants.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.participants","typeLabel":"object[] | null"},"winnerId":{"oneOf":[{"type":"string","description":"VAULT escrows only: the participant declared the winner by the merchant.","example":null,"uniqueKey":"data.winnerId.oneOf.0","typeLabel":"string"},{"type":"null","description":"VAULT escrows only: the participant declared the winner by the merchant.","example":null,"uniqueKey":"data.winnerId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.winnerId","typeLabel":"string | null"},"split":{"oneOf":[{"type":"object","description":"Set only when the dispute was resolved with `status: SPLIT`. Null on every other escrow.","properties":{"sellerAmount":{"type":"number","description":"Released to the seller's main balance.","example":30000,"uniqueKey":"data.split.oneOf.0.sellerAmount","typeLabel":"number"},"buyerAmount":{"type":"number","description":"Returned to the buyer's main balance.","example":20000,"uniqueKey":"data.split.oneOf.0.buyerAmount","typeLabel":"number"},"pool":{"type":"number","description":"What the escrow held at the moment of resolution. Always equals `sellerAmount + buyerAmount`.","example":50000,"uniqueKey":"data.split.oneOf.0.pool","typeLabel":"number"},"resolvedAt":{"type":"string","description":"Unix seconds, as a string.","example":"1786694400","uniqueKey":"data.split.oneOf.0.resolvedAt","typeLabel":"string"}},"uniqueKey":"data.split.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"data.split.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.split","typeLabel":"object | null"},"createdAt":{"type":"string","example":"2026-06-22T10:15:00.000Z","uniqueKey":"data.createdAt","typeLabel":"string"},"updatedAt":{"type":"string","example":"2026-06-22T10:15:00.000Z","uniqueKey":"data.updatedAt","typeLabel":"string"}},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"status":201,"message":"Milestone escrow created successfully","data":{"id":"665f1b2c9a1e4d0012ab3c10","amount":1000000,"purpose":"Company website build","whoPays":"buyer","fee":25000,"paymentToken":"PY_8AB12C9D3045","status":"PENDING","state":"AWAITING_PAYMENT","settlementType":"MILESTONE","milestones":[{"id":"665f1b2c9a1e4d0012ab3c21","title":"Design","description":"Figma mockups","amount":300000,"dueDate":"2026-07-15","status":"PENDING","releasedAt":null},{"id":"665f1b2c9a1e4d0012ab3c22","title":"Development","description":"Frontend + backend","amount":500000,"dueDate":"2026-08-15","status":"PENDING","releasedAt":null},{"id":"665f1b2c9a1e4d0012ab3c23","title":"Deployment","description":"Go-live + handover","amount":200000,"dueDate":null,"status":"PENDING","releasedAt":null}],"createdAt":"2026-06-22T10:15:00.000Z","updatedAt":"2026-06-22T10:15:00.000Z"}},"examples":{"Example":{"title":"Example","value":{"status":201,"message":"Milestone escrow created successfully","data":{"id":"665f1b2c9a1e4d0012ab3c10","amount":1000000,"purpose":"Company website build","whoPays":"buyer","fee":25000,"paymentToken":"PY_8AB12C9D3045","status":"PENDING","state":"AWAITING_PAYMENT","settlementType":"MILESTONE","milestones":[{"id":"665f1b2c9a1e4d0012ab3c21","title":"Design","description":"Figma mockups","amount":300000,"dueDate":"2026-07-15","status":"PENDING","releasedAt":null},{"id":"665f1b2c9a1e4d0012ab3c22","title":"Development","description":"Frontend + backend","amount":500000,"dueDate":"2026-08-15","status":"PENDING","releasedAt":null},{"id":"665f1b2c9a1e4d0012ab3c23","title":"Deployment","description":"Go-live + handover","amount":200000,"dueDate":null,"status":"PENDING","releasedAt":null}],"createdAt":"2026-06-22T10:15:00.000Z","updatedAt":"2026-06-22T10:15:00.000Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"6ef6c518-0ece-4e58-992d-38d0a3d3f961":{"description":"Milestone validation failed or missing `customer-id` header.","content":{"application/json":{"schema":{"type":"object","description":"Standard error envelope.","properties":{"status":{"type":"integer","example":400,"uniqueKey":"status","typeLabel":"integer"},"message":{"type":"string","example":"Action not allowed","uniqueKey":"message","typeLabel":"string"},"data":{"type":"object","example":{},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"sum":{"title":"sum","value":{"status":400,"message":"The sum of milestone amounts must equal the escrow amount","data":{}}},"tooFew":{"title":"tooFew","value":{"status":400,"message":"A milestone escrow must have at least 2 milestones","data":{}}},"header":{"title":"header","value":{"status":400,"message":"customer-id header is required","data":{}}}},"exampleType":"examples"}},"exampleType":"examples"},"1331ee17-a5e5-43d0-9497-d8c5d69db428":{"description":"Merchant cannot create an escrow for itself.","content":{"application/json":{"schema":{"type":"object","description":"Standard error envelope.","properties":{"status":{"type":"integer","example":400,"uniqueKey":"status","typeLabel":"integer"},"message":{"type":"string","example":"Action not allowed","uniqueKey":"message","typeLabel":"string"},"data":{"type":"object","example":{},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"status":401,"message":"Merchant cannot create escrow for itself via API","data":{}},"examples":{"Example":{"title":"Example","value":{"status":401,"message":"Merchant cannot create escrow for itself via API","data":{}}}},"exampleType":"examples"}},"exampleType":"examples"},"8600b26b-5b26-4dca-92ce-555dbcde7d5d":{"description":"Rate limit exceeded: more than 10 requests in one minute from this secret key. Read the `RateLimit` header and retry after the window resets.","content":{"application/json":{"schema":{"type":"object","description":"Standard error envelope.","properties":{"status":{"type":"integer","example":400,"uniqueKey":"status","typeLabel":"integer"},"message":{"type":"string","example":"Action not allowed","uniqueKey":"message","typeLabel":"string"},"data":{"type":"object","example":{},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"status":429,"message":"Too many request"},"examples":{"Example":{"title":"Example","value":{"status":429,"message":"Too many request"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"1e2fcc27-9d70-4608-bab0-b7f13130ea35":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Your secret key as a Bearer token. The key prefix selects the environment: `sk_test_...` (staging) or `sk_live_...` (production); a key on the wrong host is refused with `403 Unauthorized Access`. Each key is limited to 10 requests per minute (`429` beyond that) and, on production, to the IP addresses on your dashboard allowlist when one is configured.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"aefc91df-d969-4cc9-bdc5-50d00d24475d":{"url":"https://staging.api.payluk.ng","description":"Staging: use sk_test_ keys here for safe testing"},"a3d61f54-47ad-4063-90bb-7b528d417445":{"url":"https://api.payluk.ng","description":"Production: use sk_live_ keys"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Your secret key as a Bearer token. The key prefix selects the environment: `sk_test_...` (staging) or `sk_live_...` (production); a key on the wrong host is refused with `403 Unauthorized Access`. Each key is limited to 10 requests per minute (`429` beyond that) and, on production, to the IP addresses on your dashboard allowlist when one is configured.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Your secret key as a Bearer token. The key prefix selects the environment: `sk_test_...` (staging) or `sk_live_...` (production); a key on the wrong host is refused with `403 Unauthorized Access`. Each key is limited to 10 requests per minute (`429` beyond that) and, on production, to the IP addresses on your dashboard allowlist when one is configured.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"payluk-ef2ec5d5","siteName":"Payluk API","title":"Create milestone escrow - Payluk API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-10T10:04:29.835Z","originalFileLocation":"api-reference/milestone-escrow/create-milestone-escrow.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Creates a milestone escrow (JSON body, no file upload). Rules: at least 2 milestones, every milestone amount is naira with at most two decimal places (minimum 1), and the sum of milestone amounts must equal amount. Requires the customer-id header. maxDelivery (1 to 365) and deliveryTimeline are required, and each milestone\u0026#x27;s dueDate, when given, must be a future date.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Payluk API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/payluk-ef2ec5d5/Cv4gyBKzeMUyqwEf/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/payluk-ef2ec5d5/Cv4gyBKzeMUyqwEf/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/payluk-ef2ec5d5/Cv4gyBKzeMUyqwEf/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/payluk-ef2ec5d5/Cv4gyBKzeMUyqwEf/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/payluk-ef2ec5d5/Cv4gyBKzeMUyqwEf/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/payluk-ef2ec5d5/Cv4gyBKzeMUyqwEf/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/payluk-ef2ec5d5/Cv4gyBKzeMUyqwEf/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/payluk-ef2ec5d5/Cv4gyBKzeMUyqwEf/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/payluk-ef2ec5d5/Cv4gyBKzeMUyqwEf/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create milestone escrow - Payluk API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates a milestone escrow (JSON body, no file upload). Rules: at least 2 milestones, every milestone amount is naira with at most two decimal places (minimum 1), and the sum of milestone amounts must equal amount. Requires the customer-id header. maxDelivery (1 to 365) and deliveryTimeline are required, and each milestone\u0026#x27;s dueDate, when given, must be a future date.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Payluk API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.payluk.ng/api-reference/milestone-escrow/create-milestone-escrow\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://payluk-ef2ec5d5.mintlify.site/_mintlify/api/og/v2?division=4.+Create+the+deal%3A+Milestone+Escrow\u0026amp;title=Create+milestone+escrow\u0026amp;description=Creates+a+milestone+escrow+%28JSON+body%2C+no+file+upload%29.+Rules%3A+at+least+2+milestones%2C+every+milestone+amount+is+naira+with+at+most+two+decimal+places+%28minimum+1\u0026amp;theme=871e0e65f83a6a3d487d4038\u0026amp;signature=a9a63b0712ed54913a894aadf00a53f71d50615c4bfe01252153311c74dd12b4\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create milestone escrow - Payluk API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates a milestone escrow (JSON body, no file upload). Rules: at least 2 milestones, every milestone amount is naira with at most two decimal places (minimum 1), and the sum of milestone amounts must equal amount. Requires the customer-id header. maxDelivery (1 to 365) and deliveryTimeline are required, and each milestone\u0026#x27;s dueDate, when given, must be a future date.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://payluk-ef2ec5d5.mintlify.site/_mintlify/api/og/v2?division=4.+Create+the+deal%3A+Milestone+Escrow\u0026amp;title=Create+milestone+escrow\u0026amp;description=Creates+a+milestone+escrow+%28JSON+body%2C+no+file+upload%29.+Rules%3A+at+least+2+milestones%2C+every+milestone+amount+is+naira+with+at+most+two+decimal+places+%28minimum+1\u0026amp;theme=871e0e65f83a6a3d487d4038\u0026amp;signature=a9a63b0712ed54913a894aadf00a53f71d50615c4bfe01252153311c74dd12b4\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/payluk-ef2ec5d5/Cv4gyBKzeMUyqwEf/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Payluk API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#635BFF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.payluk.ng/api-reference/milestone-escrow/create-milestone-escrow\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/milestone-escrow/create-milestone-escrow.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.payluk.ng/#organization\",\"name\":\"Payluk API\",\"url\":\"https://docs.payluk.ng\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/payluk-ef2ec5d5/rkT218q-vzY-YX70/logo/light.svg?fit=max\u0026auto=format\u0026n=rkT218q-vzY-YX70\u0026q=85\u0026s=4d5ac80b7027fa47525679435f866b7a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.payluk.ng#website\",\"name\":\"Payluk API\",\"url\":\"https://docs.payluk.ng\",\"publisher\":{\"@id\":\"https://docs.payluk.ng/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.payluk.ng/api-reference/milestone-escrow/create-milestone-escrow#webpage\",\"url\":\"https://docs.payluk.ng/api-reference/milestone-escrow/create-milestone-escrow\",\"name\":\"Create milestone escrow\",\"description\":\"Creates a milestone escrow (JSON body, no file upload). Rules: at least 2 milestones, every milestone amount is naira with at most two decimal places (minimum 1), and the sum of milestone amounts must equal amount. Requires the customer-id header. maxDelivery (1 to 365) and deliveryTimeline are required, and each milestone's dueDate, when given, must be a future date.\",\"dateModified\":\"2026-09-10T10:04:29.835Z\",\"isPartOf\":{\"@id\":\"https://docs.payluk.ng#website\"},\"breadcrumb\":{\"@id\":\"https://docs.payluk.ng/api-reference/milestone-escrow/create-milestone-escrow#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.payluk.ng/api-reference/milestone-escrow/create-milestone-escrow#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"4. Create the deal: Milestone Escrow\",\"item\":\"https://docs.payluk.ng/api-reference/milestone-escrow/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create milestone escrow\",\"item\":\"https://docs.payluk.ng/api-reference/milestone-escrow/create-milestone-escrow\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.payluk.ng/api-reference/milestone-escrow/create-milestone-escrow#apireference\",\"headline\":\"Create milestone escrow\",\"name\":\"Create milestone escrow\",\"description\":\"Creates a milestone escrow (JSON body, no file upload). Rules: at least 2 milestones, every milestone amount is naira with at most two decimal places (minimum 1), and the sum of milestone amounts must equal amount. Requires the customer-id header. maxDelivery (1 to 365) and deliveryTimeline are required, and each milestone's dueDate, when given, must be a future date.\",\"url\":\"https://docs.payluk.ng/api-reference/milestone-escrow/create-milestone-escrow\",\"mainEntityOfPage\":{\"@id\":\"https://docs.payluk.ng/api-reference/milestone-escrow/create-milestone-escrow#webpage\"},\"dateModified\":\"2026-09-10T10:04:29.835Z\",\"publisher\":{\"@id\":\"https://docs.payluk.ng/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.payluk.ng#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Payluk API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Payluk API","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"Checkout SDK","icon":"code","pages":[{"title":"Checkout SDK","href":"/sdk/introduction"}]},{"tab":"API Reference","icon":"terminal","groups":[{"group":"1. Onboard customers","pages":[{"title":"Onboard customers overview","href":"/api-reference/merchant-customers/overview"},{"title":"Create merchant customer","openapi":"openapi.json POST /v1/customer/create","href":"/api-reference/merchant-customers/create-merchant-customer"},{"title":"List merchant customers","openapi":"openapi.json GET /v1/customers","href":"/api-reference/merchant-customers/list-merchant-customers"},{"title":"Get merchant customer","openapi":"openapi.json GET /v1/customer/get/{customerId}","href":"/api-reference/merchant-customers/get-merchant-customer"},{"title":"Update customer","openapi":"openapi.json PUT /v1/customer/update/{customerId}","href":"/api-reference/merchant-customers/update-customer"},{"title":"Update customer permissions","openapi":"openapi.json PUT /v1/customer/permissions/{customerId}","href":"/api-reference/merchant-customers/update-customer-permissions"},{"title":"Block customer","openapi":"openapi.json PUT /v1/customer/block/{customerId}","href":"/api-reference/merchant-customers/block-customer"},{"title":"Unblock customer","openapi":"openapi.json PUT /v1/customer/unblock/{customerId}","href":"/api-reference/merchant-customers/unblock-customer"},{"title":"Get customer wallet","openapi":"openapi.json GET /v1/wallet","href":"/api-reference/merchant-customers/get-customer-wallet"}]},{"group":"2. Catalog (optional)","pages":[{"title":"Catalog (categories) overview","href":"/api-reference/categories/overview"},{"title":"Create category","openapi":"openapi.json POST /v1/escrow/category/create","href":"/api-reference/categories/create-category"},{"title":"Update category","openapi":"openapi.json PUT /v1/escrow/category/edit/{categoryId}","href":"/api-reference/categories/update-category"},{"title":"List categories","openapi":"openapi.json GET /v1/escrow/category/get","href":"/api-reference/categories/list-categories"},{"title":"Get category by ID","openapi":"openapi.json GET /v1/escrow/category/get/{categoryId}","href":"/api-reference/categories/get-category-by-id"},{"title":"Update category position","openapi":"openapi.json PUT /v1/escrow/category/position/{categoryId}","href":"/api-reference/categories/update-category-position"},{"title":"Delete category","openapi":"openapi.json DELETE /v1/escrow/category/delete/{categoryId}","href":"/api-reference/categories/delete-category"}]},{"group":"3. Create the deal: Escrow","pages":[{"title":"Escrow overview","href":"/api-reference/escrow/overview"},{"title":"Create escrow","openapi":"openapi.json POST /v1/escrow/create","href":"/api-reference/escrow/create-escrow"},{"title":"Edit escrow","openapi":"openapi.json PUT /v1/escrow/edit/{paymentToken}","href":"/api-reference/escrow/edit-escrow"},{"title":"Update additional fee","openapi":"openapi.json PUT /v1/escrow/additional-fee/{paymentToken}","href":"/api-reference/escrow/update-additional-fee"},{"title":"Delete escrow","openapi":"openapi.json DELETE /v1/escrow/delete/{paymentToken}","href":"/api-reference/escrow/delete-escrow"},{"title":"Verify payment token","openapi":"openapi.json GET /v1/escrow/verify/{paymentToken}","href":"/api-reference/escrow/verify-payment-token"},{"title":"Claim funds","openapi":"openapi.json GET /v1/escrow/claim-funds/{paymentToken}","href":"/api-reference/escrow/claim-funds"},{"title":"List escrow transactions","openapi":"openapi.json GET /v1/escrow/transactions","href":"/api-reference/escrow/list-escrow-transactions"}]},{"group":"4. Create the deal: Milestone Escrow","pages":[{"title":"Milestone escrow overview","description":"Fund a project in full upfront and release it in stages as each milestone is confirmed.","href":"/api-reference/milestone-escrow/overview"},{"title":"Create milestone escrow","openapi":"openapi.json POST /v1/escrow/milestone/create","href":"/api-reference/milestone-escrow/create-milestone-escrow"},{"title":"Edit milestone escrow","openapi":"openapi.json PUT /v1/escrow/milestone/edit/{paymentToken}","description":"Replaces the details and the full milestone set of a milestone escrow (JSON body, no file upload). Editable only while the escrow is still `AWAITING_PAYMENT`, and only by the seller that created it. The same rules as creation apply: at least 2 milestones, every milestone amount is naira with at most two decimal places (minimum 1), and the **sum of milestone amounts must equal `amount`**. The platform fee is recalculated from the new amount and the milestone ids are regenerated. Requires the `customer-id` header (the seller). `maxDelivery` (1 to 365) and `deliveryTimeline` are required.","href":"/api-reference/milestone-escrow/edit-milestone-escrow"},{"title":"Convert standard escrow to milestone","openapi":"openapi.json PUT /v1/escrow/milestone/convert/{paymentToken}","href":"/api-reference/milestone-escrow/convert-to-milestone"},{"title":"Get milestones","openapi":"openapi.json GET /v1/escrow/milestone/{paymentToken}","href":"/api-reference/milestone-escrow/get-milestones"},{"title":"Confirm milestone","openapi":"openapi.json POST /v1/escrow/milestone/confirm/{escrowId}/{milestoneId}","href":"/api-reference/milestone-escrow/confirm-milestone"}]},{"group":"5. Stake \u0026 resolve: Vault Escrow","pages":[{"title":"Vault escrow overview","href":"/api-reference/vault-escrow/overview"},{"title":"Create vault escrow","openapi":"openapi.json POST /v1/escrow/vault/create","href":"/api-reference/vault-escrow/create-vault-escrow"},{"title":"Declare vault winner","openapi":"openapi.json POST /v1/escrow/vault/winner/{paymentToken}","href":"/api-reference/vault-escrow/declare-vault-winner"},{"title":"Cancel vault escrow","openapi":"openapi.json POST /v1/escrow/vault/cancel/{paymentToken}","href":"/api-reference/vault-escrow/cancel-vault-escrow"},{"title":"Get vault escrow","openapi":"openapi.json GET /v1/escrow/vault/{paymentToken}","href":"/api-reference/vault-escrow/get-vault-escrow"}]},{"group":"6. Fund it: Payments","pages":[{"title":"Payments overview","href":"/api-reference/payments/overview"},{"title":"Pay escrow (buy)","openapi":"openapi.json POST /v1/payment/escrow","href":"/api-reference/payments/pay-escrow-buy"},{"title":"Create payment intent","openapi":"openapi.json POST /v1/payment/create-intent","href":"/api-reference/payments/create-payment-intent"},{"title":"Verify payment","openapi":"openapi.json POST /v1/payment/verify","href":"/api-reference/payments/verify-payment"},{"title":"Generate virtual account (deprecated)","openapi":"openapi.json POST /v1/payment/virtual-account","deprecated":true,"href":"/api-reference/payments/generate-virtual-account"},{"title":"Get payment history","openapi":"openapi.json GET /v1/payment/history","href":"/api-reference/payments/get-payment-history"},{"title":"Get bank list","openapi":"openapi.json GET /v1/payment/bank-list","href":"/api-reference/payments/get-bank-list"},{"title":"Verify account number","openapi":"openapi.json POST /v1/payment/verify-account","href":"/api-reference/payments/verify-account-number"},{"title":"Verify phone number","openapi":"openapi.json GET /v1/payment/verify-phone/{phone}","href":"/api-reference/payments/verify-phone-number"}]},{"group":"7. Release \u0026 resolve: Disputes","pages":[{"title":"Release \u0026 resolve (disputes) overview","href":"/api-reference/disputes/overview"},{"title":"Buyer confirm payment (standard)","openapi":"openapi.json POST /v1/escrow/confirm-payment/{escrowId}","href":"/api-reference/disputes/buyer-confirm-payment-standard"},{"title":"Submit dispute","openapi":"openapi.json POST /v1/escrow/submit-dispute/{paymentToken}","href":"/api-reference/disputes/submit-dispute"},{"title":"List my disputes","openapi":"openapi.json GET /v1/escrow/dispute/get","href":"/api-reference/disputes/list-my-disputes"},{"title":"Get dispute by escrow ID","openapi":"openapi.json GET /v1/escrow/dispute/get/{escrowId}","href":"/api-reference/disputes/get-dispute-by-escrow-id"},{"title":"List all customers' disputes","openapi":"openapi.json GET /v1/escrow/all-dispute","href":"/api-reference/disputes/list-all-customers-disputes"},{"title":"Get escrow feeds","openapi":"openapi.json GET /v1/escrow/feeds","href":"/api-reference/disputes/get-escrow-feeds"},{"title":"Resolve dispute","openapi":"openapi.json POST /v1/escrow/dispute/resolve/{escrowId}","href":"/api-reference/disputes/resolve-dispute"}]},{"group":"Other: Merchant Account","pages":[{"title":"Merchant account overview","href":"/api-reference/merchant-account/overview"},{"title":"Get merchant balance","openapi":"openapi.json GET /v1/merchant/balance","href":"/api-reference/merchant-account/get-merchant-balance"},{"title":"Get merchant transactions","openapi":"openapi.json GET /v1/merchant/transactions","href":"/api-reference/merchant-account/get-merchant-transactions"}]},{"group":"Other: Misc","pages":[{"title":"Misc overview","href":"/api-reference/misc/overview"},{"title":"Get countries","openapi":"openapi.json GET /v1/countries","href":"/api-reference/misc/get-countries"}]}]},{"tab":"Changelog","icon":"clock-rotate-left","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Create milestone escrow - Payluk API","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}