Creates a payment intent for a merchant customer. Set transactionType to one of (deposits are not supported: money comes in only as an escrow payment through the Checkout SDK, which generates a temporary virtual account for the customer to pay):
withdrawal: a payout. For a fiat bank withdrawal supply withdrawalDetails (bank account); for a crypto transfer supply blockchainDetails (recipient address + network) instead.
wallet_transfer: send funds to another Payluk wallet via walletDetails.
Withdrawal fees
Payluk sets the fee on the returned intent; you do not send it. The customer is debited amount + fee, so reconcile against the fee you read back rather than assuming a figure.
The fee depends on the amount and on which provider Payluk currently settles payouts through, and it may include VAT. It is fixed on the intent when the intent is created, so the figure you read back is the figure that will be charged.
Two-step flow
Creating the intent only stages the transaction; no money moves yet. To execute it, submit the returned reference to Verify payment. This separation exists for security.
All field values are lowercase. Requires the customer-id header.
Amounts are naira with at most two decimal places; the minimum is 100 for a transfer. Bank payouts are routed to whichever provider Payluk currently settles through, and a crypto payout to blockchainDetails.toAddress on BSC; the gateway field is resolved server-side and can be omitted.
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.
Amount in major units (NGN), not kobo: send 10000 for ₦10,000. Kobo are allowed as decimals (₦100.20 is 100.2) and are rounded to two places. Minimum 100, meaning ₦100.
Required for a wallet_transfer to another Payluk wallet.
Show child attributes
Response
Payment intent created.
{"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/payments/create-payment-intent","slug":"/api-reference/payments/create-payment-intent","pageMetadata":{"title":"Create payment intent","openapi":"openapi.json POST /v1/payment/create-intent","description":"Creates a payment intent for a merchant customer. Set `transactionType` to one of (deposits are not supported: money comes in only as an escrow payment through the [Checkout SDK](/sdk/javascript), which generates a temporary virtual account for the customer to pay):\n\n- **`withdrawal`**: a payout. For a **fiat bank withdrawal** supply `withdrawalDetails` (bank account); for a **crypto transfer** supply `blockchainDetails` (recipient address + network) instead.\n- **`wallet_transfer`**: send funds to another Payluk wallet via `walletDetails`.\n\n### Withdrawal fees\n\nPayluk sets the `fee` on the returned intent; you do not send it. The customer is debited `amount + fee`, so reconcile against the `fee` you read back rather than assuming a figure.\n\nThe fee depends on the amount and on which provider Payluk currently settles payouts through, and it may include VAT. It is fixed on the intent when the intent is created, so the figure you read back is the figure that will be charged.\n\n### Two-step flow\n\nCreating the intent **only stages** the transaction; no money moves yet. To execute it, submit the returned `reference` to [Verify payment](/api-reference/payments/verify-payment). This separation exists for security.\n\nAll field values are lowercase. Requires the `customer-id` header.\n\nAmounts are naira with at most two decimal places; the minimum is 100 for a transfer. Bank payouts are routed to whichever provider Payluk currently settles through, and a crypto payout to `blockchainDetails.toAddress` on BSC; the `gateway` field is resolved server-side and can be omitted.","href":"/api-reference/payments/create-payment-intent"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n h3: \"h3\",\n li: \"li\",\n p: \"p\",\n strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Creates a payment intent for a merchant customer. Set \", _jsx(_components.code, {\n children: \"transactionType\"\n }), \" to one of (deposits are not supported: money comes in only as an escrow payment through the \", _jsx(_components.a, {\n href: \"/sdk/javascript\",\n children: \"Checkout SDK\"\n }), \", which generates a temporary virtual account for the customer to pay):\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: _jsx(_components.code, {\n children: \"withdrawal\"\n })\n }), \": a payout. For a \", _jsx(_components.strong, {\n children: \"fiat bank withdrawal\"\n }), \" supply \", _jsx(_components.code, {\n children: \"withdrawalDetails\"\n }), \" (bank account); for a \", _jsx(_components.strong, {\n children: \"crypto transfer\"\n }), \" supply \", _jsx(_components.code, {\n children: \"blockchainDetails\"\n }), \" (recipient address + network) instead.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: _jsx(_components.code, {\n children: \"wallet_transfer\"\n })\n }), \": send funds to another Payluk wallet via \", _jsx(_components.code, {\n children: \"walletDetails\"\n }), \".\"]\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.h3, {\n children: \"Withdrawal fees\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Payluk sets the \", _jsx(_components.code, {\n children: \"fee\"\n }), \" on the returned intent; you do not send it. The customer is debited \", _jsx(_components.code, {\n children: \"amount + fee\"\n }), \", so reconcile against the \", _jsx(_components.code, {\n children: \"fee\"\n }), \" you read back rather than assuming a figure.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"The fee depends on the amount and on which provider Payluk currently settles payouts through, and it may include VAT. It is fixed on the intent when the intent is created, so the figure you read back is the figure that will be charged.\"\n }), \"\\n\", _jsx(_components.h3, {\n children: \"Two-step flow\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Creating the intent \", _jsx(_components.strong, {\n children: \"only stages\"\n }), \" the transaction; no money moves yet. To execute it, submit the returned \", _jsx(_components.code, {\n children: \"reference\"\n }), \" to \", _jsx(_components.a, {\n href: \"/api-reference/payments/verify-payment\",\n children: \"Verify payment\"\n }), \". This separation exists for security.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"All field values are lowercase. Requires the \", _jsx(_components.code, {\n children: \"customer-id\"\n }), \" header.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Amounts are naira with at most two decimal places; the minimum is 100 for a transfer. Bank payouts are routed to whichever provider Payluk currently settles through, and a crypto payout to \", _jsx(_components.code, {\n children: \"blockchainDetails.toAddress\"\n }), \" on BSC; the \", _jsx(_components.code, {\n children: \"gateway\"\n }), \" field is resolved server-side and can be omitted.\"]\n })]\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 payment intent","openapi":"openapi.json POST /v1/payment/create-intent","description":"Creates a payment intent for a merchant customer. Set `transactionType` to one of (deposits are not supported: money comes in only as an escrow payment through the [Checkout SDK](/sdk/javascript), which generates a temporary virtual account for the customer to pay):\n\n- **`withdrawal`**: a payout. For a **fiat bank withdrawal** supply `withdrawalDetails` (bank account); for a **crypto transfer** supply `blockchainDetails` (recipient address + network) instead.\n- **`wallet_transfer`**: send funds to another Payluk wallet via `walletDetails`.\n\n### Withdrawal fees\n\nPayluk sets the `fee` on the returned intent; you do not send it. The customer is debited `amount + fee`, so reconcile against the `fee` you read back rather than assuming a figure.\n\nThe fee depends on the amount and on which provider Payluk currently settles payouts through, and it may include VAT. It is fixed on the intent when the intent is created, so the figure you read back is the figure that will be charged.\n\n### Two-step flow\n\nCreating the intent **only stages** the transaction; no money moves yet. To execute it, submit the returned `reference` to [Verify payment](/api-reference/payments/verify-payment). This separation exists for security.\n\nAll field values are lowercase. Requires the `customer-id` header.\n\nAmounts are naira with at most two decimal places; the minimum is 100 for a transfer. Bank payouts are routed to whichever provider Payluk currently settles through, and a crypto payout to `blockchainDetails.toAddress` on BSC; the `gateway` field is resolved server-side and can be omitted.","href":"/api-reference/payments/create-payment-intent"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Payments"],"summary":"Create payment intent","operationId":"createPaymentIntent","description":"Creates a payment intent for a merchant customer. Set `transactionType` to one of (deposits are not supported: money comes in only as an escrow payment through the [Checkout SDK](/sdk/javascript), which generates a temporary virtual account for the customer to pay):\n\n- **`withdrawal`**: a payout. For a **fiat bank withdrawal** supply `withdrawalDetails` (bank account); for a **crypto transfer** supply `blockchainDetails` (recipient address + network) instead.\n- **`wallet_transfer`**: send funds to another Payluk wallet via `walletDetails`.\n\n### Withdrawal fees\n\nPayluk sets the `fee` on the returned intent; you do not send it. The customer is debited `amount + fee`, so reconcile against the `fee` you read back rather than assuming a figure.\n\nThe fee depends on the amount and on which provider Payluk currently settles payouts through, and it may include VAT. It is fixed on the intent when the intent is created, so the figure you read back is the figure that will be charged.\n\n### Two-step flow\n\nCreating the intent **only stages** the transaction; no money moves yet. To execute it, submit the returned `reference` to [Verify payment](/api-reference/payments/verify-payment). This separation exists for security.\n\nAll field values are lowercase. Requires the `customer-id` header.\n\nAmounts are naira with at most two decimal places; the minimum is 100 for a transfer. Bank payouts are routed to whichever provider Payluk currently settles through, and a crypto payout to `blockchainDetails.toAddress` on BSC; the `gateway` field is resolved server-side and can be omitted.","parameters":["2f4b41ae-3d61-4c6b-afab-eb8ecd90fb56"],"requestBody":"7d8be613-ffbd-4453-95e0-3cf93363915b","responses":{"200":"fcb80037-f850-4e8f-9e5a-58b2f38c1bdc","400":"6560d122-abeb-4394-9a8d-b16f2dd61472","429":"94839d59-d523-4b4d-8979-2b7bb3cda24c"},"method":"post","type":"path","servers":["aefc91df-d969-4cc9-bdc5-50d00d24475d","a3d61f54-47ad-4063-90bb-7b528d417445"],"security":["1e2fcc27-9d70-4608-bab0-b7f13130ea35"],"path":"/v1/payment/create-intent","baseUrlOptions":["https://staging.api.payluk.ng","https://api.payluk.ng"],"title":"Create payment intent","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"2f4b41ae-3d61-4c6b-afab-eb8ecd90fb56":{"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","reference","transactionType"],"properties":{"amount":{"type":"number","minimum":100,"description":"Amount in major units (NGN), not kobo: send 10000 for ₦10,000. Kobo are allowed as decimals (₦100.20 is 100.2) and are rounded to two places. Minimum 100, meaning ₦100.","example":10000,"isRequired":true,"uniqueKey":"amount","typeLabel":"number"},"reference":{"type":"string","description":"Your unique reference for this transaction.","example":"99999533334","isRequired":true,"uniqueKey":"reference","typeLabel":"string"},"transactionType":{"type":"string","enum":["withdrawal","wallet_transfer"],"description":"Use `withdrawal` for both a fiat bank withdrawal (with `withdrawalDetails`) and a crypto transfer (with `blockchainDetails`).","example":"withdrawal","isRequired":true,"uniqueKey":"transactionType","typeLabel":"enum\u003cstring>"},"currency":{"type":"string","default":"NGN","description":"Optional. Defaults to `NGN`.","example":"NGN","uniqueKey":"currency","typeLabel":"string"},"withdrawalDetails":{"type":"object","description":"Required for a fiat bank withdrawal (`transactionType: withdrawal`).","required":["bankCode","accountNumber","accountName","bankName"],"properties":{"accountName":{"type":"string","example":"EZUMAH JEREMIAH KALU","isRequired":true,"uniqueKey":"withdrawalDetails.accountName","typeLabel":"string"},"accountNumber":{"type":"string","example":"3069839406","isRequired":true,"uniqueKey":"withdrawalDetails.accountNumber","typeLabel":"string"},"bankName":{"type":"string","example":"First Bank Nigeria","isRequired":true,"uniqueKey":"withdrawalDetails.bankName","typeLabel":"string"},"bankCode":{"type":"string","example":"011","isRequired":true,"uniqueKey":"withdrawalDetails.bankCode","typeLabel":"string"},"narration":{"type":"string","description":"Optional transfer narration.","uniqueKey":"withdrawalDetails.narration","typeLabel":"string"}},"uniqueKey":"withdrawalDetails","typeLabel":"object"},"blockchainDetails":{"type":"object","description":"Required for a crypto transfer (`transactionType: withdrawal`); supply this instead of `withdrawalDetails`.","required":["toAddress","network"],"properties":{"toAddress":{"type":"string","description":"Recipient wallet address: `0x` followed by 40 hexadecimal characters.","example":"0x0915ea16f52b11444695d283e6c0f5936d1e0d56","isRequired":true,"uniqueKey":"blockchainDetails.toAddress","typeLabel":"string"},"network":{"type":"string","enum":["BSC"],"description":"Blockchain network. Only `BSC` is supported.","example":"BSC","isRequired":true,"uniqueKey":"blockchainDetails.network","typeLabel":"enum\u003cstring>"},"tokenAddress":{"type":"string","description":"Optional token contract address.","uniqueKey":"blockchainDetails.tokenAddress","typeLabel":"string"}},"uniqueKey":"blockchainDetails","typeLabel":"object"},"walletDetails":{"type":"object","description":"Required for a `wallet_transfer` to another Payluk wallet.","required":["phone","name"],"properties":{"phone":{"type":"string","description":"Recipient's 11-digit phone number.","example":"08012345678","isRequired":true,"uniqueKey":"walletDetails.phone","typeLabel":"string"},"name":{"type":"string","example":"Ada Eze","isRequired":true,"uniqueKey":"walletDetails.name","typeLabel":"string"},"narration":{"type":"string","uniqueKey":"walletDetails.narration","typeLabel":"string"}},"uniqueKey":"walletDetails","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"bankWithdrawal":{"title":"bankWithdrawal","value":{"amount":10000,"reference":"99999533334","transactionType":"withdrawal","withdrawalDetails":{"accountName":"EZUMAH JEREMIAH KALU","accountNumber":"3069839406","bankName":"First Bank Nigeria","bankCode":"011"}}},"blockchainTransfer":{"title":"blockchainTransfer","value":{"amount":1000,"reference":"9947999450031111","transactionType":"withdrawal","blockchainDetails":{"toAddress":"0x0915ea16f52b11444695d283e6c0f5936d1e0d56","network":"BSC"}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"fcb80037-f850-4e8f-9e5a-58b2f38c1bdc":{"description":"Payment intent created.","content":{"application/json":{"examples":{"bankWithdrawal":{"title":"bankWithdrawal","value":{"status":200,"message":"Payment intent created successfully","data":{"id":"692838701c1a5da0bf1c2bad","amount":10000,"reference":"99999533334","fee":100,"transactionType":"withdrawal","currency":"NGN","transferDetails":null,"depositDetails":null,"walletDetails":null,"withdrawalDetails":{"bankCode":"011","accountNumber":"3069839406","accountName":"EZUMAH JEREMIAH KALU","bankName":"First Bank Nigeria"},"escrowDetails":null,"metadata":null,"status":"pending","creditType":"debit","createdAt":"2025-11-27T11:39:28.931Z","updatedAt":"2025-11-27T11:39:28.931Z"}}},"blockchainTransfer":{"title":"blockchainTransfer","value":{"status":200,"message":"Payment intent created successfully","data":{"id":"69bc1dcad3b73cd9e241e727","amount":1000,"reference":"9989478384453","fee":0,"transactionType":"withdrawal","currency":"NGN","transferDetails":null,"cardId":null,"walletDetails":null,"blockchainDetails":{"toAddress":"0x9aE36CfBA472EE718EE18Cea656CE1bC2Aafe538","network":"BSC","fromAddress":"0x44C792988C02e2921e65D1462c4c48cF76e83d4E"},"withdrawalDetails":null,"escrowDetails":null,"metadata":null,"status":"pending","creditType":"debit","createdAt":"2026-03-19T16:01:14.081Z","updatedAt":"2026-03-19T16:01:14.081Z"}}},"walletTransfer":{"title":"walletTransfer","value":{"status":200,"message":"Payment intent created successfully","data":{"id":"6a3cea83734e96016b227460","amount":1000,"reference":"t53gtryhtyut","fee":0,"transactionType":"wallet_transfer","currency":"NGN","transferDetails":null,"cardId":null,"walletDetails":{"phone":"09022334422","name":"King David","narration":"test"},"blockchainDetails":null,"withdrawalDetails":null,"escrowDetails":null,"metadata":null,"status":"pending","creditType":"debit","createdAt":"2026-06-25T08:44:51.817Z","updatedAt":"2026-06-25T08:44:51.817Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"6560d122-abeb-4394-9a8d-b16f2dd61472":{"description":"Validation error.","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":400,"message":"amount is required","data":{}},"examples":{"Example":{"title":"Example","value":{"status":400,"message":"amount is required","data":{}}}},"exampleType":"examples"}},"exampleType":"examples"},"94839d59-d523-4b4d-8979-2b7bb3cda24c":{"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 payment intent - Payluk API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-21T14:59:12.981Z","originalFileLocation":"api-reference/payments/create-payment-intent.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 payment intent for a merchant customer. Set transactionType to one of (deposits are not supported: money comes in only as an escrow payment through the Checkout SDK, which generates a temporary virtual account for the customer to pay): - withdrawal: a payout. For a fiat bank withdrawal supply withdrawalDetails (bank account); for a crypto transfer supply blockchainDetails (recipient address + network) instead. - wallet_transfer: send funds to another Payluk wallet via walletDetails. ### Withdrawal fees Payluk sets the fee on the returned intent; you do not send it. The customer is debited amount + fee, so reconcile against the fee you read back rather than assuming a figure. The fee depends on the amount and on which provider Payluk currently settles payouts through, and it may include VAT. It is fixed on the intent when the intent is created, so the figure you read back is the figure that will be charged. ### Two-step flow Creating the intent only stages the transaction; no money moves yet. To execute it, submit the returned reference to Verify payment. This separation exists for security. All field values are lowercase. Requires the customer-id header. Amounts are naira with at most two decimal places; the minimum is 100 for a transfer. Bank payouts are routed to whichever provider Payluk currently settles through, and a crypto payout to blockchainDetails.toAddress on BSC; the gateway field is resolved server-side and can be omitted.\">\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 payment intent - Payluk API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates a payment intent for a merchant customer. Set transactionType to one of (deposits are not supported: money comes in only as an escrow payment through the Checkout SDK, which generates a temporary virtual account for the customer to pay): - withdrawal: a payout. For a fiat bank withdrawal supply withdrawalDetails (bank account); for a crypto transfer supply blockchainDetails (recipient address + network) instead. - wallet_transfer: send funds to another Payluk wallet via walletDetails. ### Withdrawal fees Payluk sets the fee on the returned intent; you do not send it. The customer is debited amount + fee, so reconcile against the fee you read back rather than assuming a figure. The fee depends on the amount and on which provider Payluk currently settles payouts through, and it may include VAT. It is fixed on the intent when the intent is created, so the figure you read back is the figure that will be charged. ### Two-step flow Creating the intent only stages the transaction; no money moves yet. To execute it, submit the returned reference to Verify payment. This separation exists for security. All field values are lowercase. Requires the customer-id header. Amounts are naira with at most two decimal places; the minimum is 100 for a transfer. Bank payouts are routed to whichever provider Payluk currently settles through, and a crypto payout to blockchainDetails.toAddress on BSC; the gateway field is resolved server-side and can be omitted.\">\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/payments/create-payment-intent\">\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=6.+Fund+it%3A+Payments\u0026amp;title=Create+payment+intent\u0026amp;description=Creates+a+payment+intent+for+a+merchant+customer.+Set+%60transactionType%60+to+one+of+%28deposits+are+not+supported%3A+money+comes+in+only+as+an+escrow+payment+through+\u0026amp;theme=871e0e65f83a6a3d487d4038\u0026amp;signature=3b56538c65107cccc5e3a23f80cd7f072c71a428b945389c3fe793e0335c5158\">\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 payment intent - Payluk API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates a payment intent for a merchant customer. Set transactionType to one of (deposits are not supported: money comes in only as an escrow payment through the Checkout SDK, which generates a temporary virtual account for the customer to pay): - withdrawal: a payout. For a fiat bank withdrawal supply withdrawalDetails (bank account); for a crypto transfer supply blockchainDetails (recipient address + network) instead. - wallet_transfer: send funds to another Payluk wallet via walletDetails. ### Withdrawal fees Payluk sets the fee on the returned intent; you do not send it. The customer is debited amount + fee, so reconcile against the fee you read back rather than assuming a figure. The fee depends on the amount and on which provider Payluk currently settles payouts through, and it may include VAT. It is fixed on the intent when the intent is created, so the figure you read back is the figure that will be charged. ### Two-step flow Creating the intent only stages the transaction; no money moves yet. To execute it, submit the returned reference to Verify payment. This separation exists for security. All field values are lowercase. Requires the customer-id header. Amounts are naira with at most two decimal places; the minimum is 100 for a transfer. Bank payouts are routed to whichever provider Payluk currently settles through, and a crypto payout to blockchainDetails.toAddress on BSC; the gateway field is resolved server-side and can be omitted.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://payluk-ef2ec5d5.mintlify.site/_mintlify/api/og/v2?division=6.+Fund+it%3A+Payments\u0026amp;title=Create+payment+intent\u0026amp;description=Creates+a+payment+intent+for+a+merchant+customer.+Set+%60transactionType%60+to+one+of+%28deposits+are+not+supported%3A+money+comes+in+only+as+an+escrow+payment+through+\u0026amp;theme=871e0e65f83a6a3d487d4038\u0026amp;signature=3b56538c65107cccc5e3a23f80cd7f072c71a428b945389c3fe793e0335c5158\">\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/payments/create-payment-intent\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/payments/create-payment-intent.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/payments/create-payment-intent#webpage\",\"url\":\"https://docs.payluk.ng/api-reference/payments/create-payment-intent\",\"name\":\"Create payment intent\",\"description\":\"Creates a payment intent for a merchant customer. Set transactionType to one of (deposits are not supported: money comes in only as an escrow payment through the Checkout SDK, which generates a temporary virtual account for the customer to pay): - withdrawal: a payout. For a fiat bank withdrawal supply withdrawalDetails (bank account); for a crypto transfer supply blockchainDetails (recipient address + network) instead. - wallet_transfer: send funds to another Payluk wallet via walletDetails. ### Withdrawal fees Payluk sets the fee on the returned intent; you do not send it. The customer is debited amount + fee, so reconcile against the fee you read back rather than assuming a figure. The fee depends on the amount and on which provider Payluk currently settles payouts through, and it may include VAT. It is fixed on the intent when the intent is created, so the figure you read back is the figure that will be charged. ### Two-step flow Creating the intent only stages the transaction; no money moves yet. To execute it, submit the returned reference to Verify payment. This separation exists for security. All field values are lowercase. Requires the customer-id header. Amounts are naira with at most two decimal places; the minimum is 100 for a transfer. Bank payouts are routed to whichever provider Payluk currently settles through, and a crypto payout to blockchainDetails.toAddress on BSC; the gateway field is resolved server-side and can be omitted.\",\"dateModified\":\"2026-10-21T14:59:12.981Z\",\"isPartOf\":{\"@id\":\"https://docs.payluk.ng#website\"},\"breadcrumb\":{\"@id\":\"https://docs.payluk.ng/api-reference/payments/create-payment-intent#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.payluk.ng/api-reference/payments/create-payment-intent#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"6. Fund it: Payments\",\"item\":\"https://docs.payluk.ng/api-reference/payments/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create payment intent\",\"item\":\"https://docs.payluk.ng/api-reference/payments/create-payment-intent\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.payluk.ng/api-reference/payments/create-payment-intent#apireference\",\"headline\":\"Create payment intent\",\"name\":\"Create payment intent\",\"description\":\"Creates a payment intent for a merchant customer. Set transactionType to one of (deposits are not supported: money comes in only as an escrow payment through the Checkout SDK, which generates a temporary virtual account for the customer to pay): - withdrawal: a payout. For a fiat bank withdrawal supply withdrawalDetails (bank account); for a crypto transfer supply blockchainDetails (recipient address + network) instead. - wallet_transfer: send funds to another Payluk wallet via walletDetails. ### Withdrawal fees Payluk sets the fee on the returned intent; you do not send it. The customer is debited amount + fee, so reconcile against the fee you read back rather than assuming a figure. The fee depends on the amount and on which provider Payluk currently settles payouts through, and it may include VAT. It is fixed on the intent when the intent is created, so the figure you read back is the figure that will be charged. ### Two-step flow Creating the intent only stages the transaction; no money moves yet. To execute it, submit the returned reference to Verify payment. This separation exists for security. All field values are lowercase. Requires the customer-id header. Amounts are naira with at most two decimal places; the minimum is 100 for a transfer. Bank payouts are routed to whichever provider Payluk currently settles through, and a crypto payout to blockchainDetails.toAddress on BSC; the gateway field is resolved server-side and can be omitted.\",\"url\":\"https://docs.payluk.ng/api-reference/payments/create-payment-intent\",\"mainEntityOfPage\":{\"@id\":\"https://docs.payluk.ng/api-reference/payments/create-payment-intent#webpage\"},\"dateModified\":\"2026-10-21T14:59:12.981Z\",\"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","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}","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","description":"Fund an escrow from the buyer's Payluk wallet balance. New money never comes in through this route: to collect a payment from a customer, use the hosted [Checkout SDK](/sdk/javascript), which generates a temporary virtual account for the customer to pay. Works for standard and milestone escrows (a milestone escrow is funded in full here). `escrowDetails.escrowId` may be an array to fund several escrows in one call. Requires the `customer-id` header (the buyer).\n\n**`amount` must equal what the buyer owes**: the escrow `amount`, plus the buyer's share of `fee` (all of it when `whoPays` is `buyer`, half when `both`, none when `seller`), plus the escrow's `additionalFee`. Anything else is rejected with `Amount mismatch`, so read the escrow first rather than caching a quote. The escrow must be `AWAITING_PAYMENT` (`Escrow is not in a valid state for checkout` otherwise), and on live keys the buyer may not be the seller.\n\n**Gateways.** `wallet` debits the buyer's main balance (`Insufficient balance` if it does not cover the total). Card payments and direct deposits are not supported.\n\nThe call both creates and settles the payment, so a successful response means the escrow is now `OPENED`. Verifying the same `reference` again with [Verify payment](/api-reference/payments/verify-payment) is idempotent.","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","description":"**Submits a previously created payment intent for processing.** Payment uses a deliberate two-step flow for security: [Create payment intent](/api-reference/payments/create-payment-intent) only stages the transaction (no money moves), and this endpoint is what actually executes it: debiting the wallet and carrying out the withdrawal, crypto transfer, or wallet transfer.\n\nPass the single `reference` returned when the intent was created. If the transaction requires confirmation (e.g. an SMS OTP / transaction PIN), include it as `otp`. Requires the `customer-id` header.","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 payment intent - 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"]}