Create an order
Creates an order for a supported source and destination currency pair, including pricing and recipient validation. Returns 202 with the order in its pending state. Creation never checks or reserves the source’s available balance — an order can always be created before its source is funded, regardless of autoExecute. See autoExecute and lockExpiresAt on the response for how and when execution can start.
Authorizations
Headers
Caller-generated unique key that lets the server safely replay this request. The cached response is returned for 5 minutes on any retry with the same key from the same API principal. Required on every state-changing money-moving or resource-creating POST.
1 - 128^[A-Za-z0-9_.:-]{1,128}$Body
- Option 1
- Option 2
- Option 3
- Option 1
- Option 2
source, destination - Option 1
- Option 2
Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.
^[A-Za-z0-9_\-:.]{1,255}$Chains a follow-on external Withdrawal that fires automatically once this order's conversion settles — independent of autoExecute, which controls how the conversion itself starts. Its shape must match the order's direction: the fiat variant (rail/recipient/ach/swift/instant/remittance) for OFFRAMP, the crypto variant (recipient only) for ONRAMP. Subject to the same documentation/whitelist policy as a standalone POST /v2/payouts, enforced at order-create time.
- Option 1
- Option 2
Your own margin on this order, in basis points, to two decimal places. Conduit folds it into the quoted rate, so endUserRate is the marked-up rate your customer receives and totalSpreadBps includes it. There is no configured maximum; the request is refused only when this margin plus Conduit's own three spread terms reach 10000 bps, the point at which the quoted rate would collapse to zero. The amount is accrued to you at settlement and reported on GET /v2/markup/balances; it stays inside the rate, so it never enters fees[] and totalDebit stays principal plus fees. Omit the field for no markup. Requires markup to be enabled for your organization.
0.01 <= x <= 99999.99Must be a multiple of 0.01Your own margin on this order as a flat amount per transaction, in the order's source asset. A value finer than that asset's precision is refused. A flat amount cannot sit inside the rate, so it behaves exactly as Conduit's own fixed fee: on a SOURCE-locked order it reduces the principal and your customer receives less, and on a DESTINATION-locked order it adds to totalDebit and your customer pays more. On a quoteOptionId redemption this always adds to totalDebit instead, on both lock sides: the option's sourceAmount and destinationAmount are already locked at its quoted rate and never recomputed, so the margin rides on top rather than carving into either side. It appears in fees[] as an entry owned by you, and it is accrued to you at settlement. Send it alongside markupBps, on its own, or omit both. Requires markup to be enabled for your organization.
Controls how the order starts executing; does not affect order creation, which never checks or reserves the source's available balance regardless of this flag — an order can always be created before the source is funded. When true, Conduit automatically starts execution as soon as the available source balance covers totalDebit (principal plus fees), with no client action required; orders sharing the same source resource execute oldest-first, so a still-underfunded older order can delay a newer, already-funded one. When false (default), the client must call POST /v2/orders/{id}/execute to start execution; an underfunded attempt returns 422 INSUFFICIENT_FUNDS immediately and leaves the order pending, so the client may retry after funding. Either way, execution must start before lockExpiresAt or the order is cancelled with cancellationReason 'expired' — funding after that deadline does not revive it.
Response
^ord_[0-9A-Za-z]{22}$^cus_[0-9A-Za-z]{22}$pending, succeeded, failed, cancelled onramp, offramp, conversion - Option 1
- Option 2
source, destination Deadline for execution to begin, not merely for the source to be funded. If execution hasn't been claimed by this time, the order transitions to status: cancelled with cancellationReason: 'expired' and can no longer execute — funding the source after this timestamp does not revive it. Create a new order to get a fresh rate lock.
"2026-01-15T09:30:00.000Z"
ISO 8601 timestamp
"2026-01-15T09:30:00.000Z"
Echoes the create-time value. When true, Conduit automatically claims execution once the available source balance covers totalDebit (principal plus fees), with no client action required — orders sharing the same source resource execute oldest-first, so a still-underfunded older order can delay a newer, already-funded one; when false, the client must call POST /v2/orders/{id}/execute (repeatable after funding if a prior attempt returned 422 INSUFFICIENT_FUNDS). Order creation never checks or reserves the source's available balance regardless of this value.
^txn_[0-9A-Za-z]{22}$Client-supplied reference, unique per resource within your organization. 1-255 characters from A-Za-z, 0-9, underscore, hyphen, colon, and period — no spaces.
^[A-Za-z0-9_\-:.]{1,255}$The funding resource, when the order named one. Omitted entirely on a deposit-funded order (created without a source): the funding wallet is Conduit-managed infrastructure with no client-resolvable id, and depositInstructions carries the address to fund at instead. The presence of depositInstructions is the discriminator.
- Option 1
- Option 2
AutoPayout payload. Crypto recipients omit rail/ach/swift/instant/remittance; fiat (us|swift) recipients require rail and may carry the matching per-rail context block.
Present on an order that declared a margin which comes to at least one minor unit of the source asset. assetAmount is the total accrued to you, fixed at quote time. The two shapes reach the customer differently: the markupBps part is folded into the quoted rate, so it never appears in fees[] and does not move totalDebit, while the markupAmount part is a line item in fees[] owned by you and it does move totalDebit.
ISO 8601 timestamp
"2026-01-15T09:30:00.000Z"
Which path claimed execution: 'client' for a POST /v2/orders/{id}/execute call, 'auto' for automatic execution by Conduit. Set as soon as execution is claimed — well before the order reaches a terminal status — so it can appear on an order that is still status: pending while its conversion is in flight. Absent on an order that hasn't started executing yet (including one cancelled before execution began).
client, auto ISO 8601 timestamp
"2026-01-15T09:30:00.000Z"
expired, client_cancelled insufficient_funds, provider_unavailable, provider_rejected, internal_error, cancelled Present when this order redeemed a POST /v2/quotes option — the id of the option it consumed.
^qop_[0-9A-Za-z]{22}$Where to send funds to fund this order. Exactly one crypto_address block.
1 elementTransfers that funded this order, with how much of each it draws. Present on the order detail read for an order funded at a Conduit funding address; omitted on the list read and on an order that names its own source.