autoPayout block, and Conduit then pays a bank recipient from that virtual account. You create both with one POST /v2/orders call, but they are two resources: the order (the conversion) and a chained withdrawal (the payout). Each has its own status and its own webhooks.
Test this flow in sandbox. See OFFRAMP orders (sandbox) for the simulated path, the document-review step and failure controls.
Prerequisites
- An
activecustomer with a USD virtual account (Add virtual accounts). - The crypto to convert: in a wallet of the customer, or sent to a funding address that the order gives you. For the funding address, register the sending address first (Deposit-funded orders).
- A supporting document for the payout’s
purpose, uploaded withPOST /v2/documents(purposetransaction_support).intercompanyandpersonal_transfer_of_fundstake a whitelisted recipient instead (Payout requirements). - Your API key.
Step 1 — Create the order with a SWIFT autoPayout
This order is funded by a deposit: it namessourceAsset and no source. To convert from a wallet the customer already holds, send source instead (Convert).
autoPayouttakes the samepurpose,documentsand recipient fields as a fiatPOST /v2/payouts. Onswift, sendibanoraccountNumber.bankAddressis optional: Conduit derives it frombic.- Conduit checks the payout’s requirements when it creates the order. A payout that would be refused is refused here, before any money moves.
- The response carries
depositInstructions. Send the order’stotalDebitto that address beforelockExpiresAt. On asource-locked order,totalDebitequalsamount(How much an order debits).
Step 2 — The order succeeds
When the funds clear, the order executes on its own. It converts the crypto and credits the customer’s virtual account. Thenorder.succeeded fires.
order.succeeded means the virtual account is credited. It does not mean the recipient is paid. An account whose bank pays only on the order’s instruction, such as a naira account, is the exception: there the order succeeds only when the bank has paid the recipient.
Step 3 — Follow the chained withdrawal
After the credit, Conduit starts the payout as its own transaction,type: "withdrawal", with linkedOrderId set to the order. Find it in either of these ways:
GET /v2/transactions?linkedOrderId=ord_...&type=withdrawal.- The
transaction.createdwebhook withtype: "withdrawal"andlinkedOrderIdset to the order.
GET /v2/orders/{id} also lists the ids of every transaction of the order in linkedTransactionIds, but not their types.
Conduit’s payout fee comes out of the converted amount, so the recipient receives destinationAsset.amount less that fee, and less any margin you declared on the payout with autoPayout.markupBps or autoPayout.markupAmount. The withdrawal then moves like any payout (Send a payout):
A failure of the withdrawal does not change the order: it stays
succeeded, and order.failed does not fire.
Recover from a failed payout
The withdrawal’sstatus tells you where the money is and whether you may pay again:
To pay again, send a standalone
POST /v2/payouts from the customer’s virtual account, with a new idempotency-key. A new order is not needed: the converted money is already in the virtual account.
- Held for review. The withdrawal reads
stage: "under_review"or, when Conduit asks you for a document,stage: "awaiting_customer_action"withhasRfi: true. Answer the request (A payout that needs a document). Do not pay again while it is held. - Document declined.
transaction.rejectednames theacceptedDocumentTypes. Pay again with one of them. - No withdrawal after
order.succeeded. The payout did not start, and the converted amount stays in the virtual account. Contact support before you pay it out yourself.
See also
- Deposit-funded orders — the funding address, its deadline and returns.
- Send a payout — payout stages, requirements and failure codes.
- Onramp — the reverse direction.