Create off-ramp order (crypto → fiat)
POST/offramp
Creates an off-ramp order: the customer sends crypto and receives a bank payout.
There is no separate quote step and the exchange rate is not locked at creation. The payout is priced when the deposit is credited. Until then order.fiat_amount is null.
Pay exactly the returned amount. The returned order.crypto_amount may be up to 1000 base units lower than requested: no two open orders share an amount, so a deposit matches only its own order. Send exactly that amount, as an Arkade transfer, to deposit_crypto_address, then report it with POST /order/{token}/deposit. Use ARK-BTC or USDT-CX: only Arkade transfers are credited.
Destination fields by destination_type:
sepa:destination_bank_address(IBAN),destination_bank_name(beneficiary name).swift:destination_bank_address(IBAN),destination_bic,destination_bank_name, and a structured beneficiary address:destination_country(ISO 3166-1 alpha-2),destination_street_name,destination_building_number,destination_town_name,destination_post_code.us:destination_bank_account_number,destination_bank_routing_number(ABA),destination_bank_name(beneficiary name). US payouts are not automated yet: these orders are reviewed and paid out by our team (PENDING_MANUAL) and take longer.
For customers verified with ID-Flow, SEPA payouts go to the IBAN registered in their ID-Flow profile, which takes precedence over the IBAN in the request.
Request
- application/json
Body
required
Possible values: [BTC, ARK-BTC, USDT, USDT-CX, CEXT]
Crypto asset ticker, e.g. ARK-BTC. See GET /assets.
Possible values: [EUR, CHF, USD]
Amount the customer will send
Possible values: [sepa, swift, us]
IBAN — required for sepa/swift
Beneficiary name — required for all circuits
Beneficiary bank's BIC/SWIFT code — required for swift
Required for destination_type=us
ABA routing number — required for destination_type=us
ISO 3166-1 alpha-2 — required for swift
Required for swift
Required for swift
Required for swift
Required for swift
Possible values: [api, web, app]
Default value: api
Responses
- 201
- 400
- 403
Order created
- application/json
- Schema
- Example (from schema)
Schema
order object
Short public token (shown to customer)
Human-readable order reference. Quote it when contacting support.
Possible values: [onramp, offramp]
Null for gift card purchases — no crypto asset involved
Null until settlement for off-ramp orders — see status
Null until settlement for on-ramp orders — see status
Possible values: [WAITING_FOR_DEPOSIT, DEPOSIT_RECEIVED, PROCESSING, COMPLETED, FAILED, PENDING_MANUAL, REJECTED, EXPIRED, REFUNDED]
Bank payment reference the customer must include in their transfer
Possible values: [crypto, sepa, swift, us, gift_card]
Off-ramp: the Arkade transaction credited as the deposit
Crypto address the customer must send tokens to
fee object
{
"order": {
"id": "string",
"code": "string",
"email": "string",
"direction": "onramp",
"asset": "string",
"fiat_currency": "string",
"fiat_amount": "string",
"crypto_amount": "string",
"status": "WAITING_FOR_DEPOSIT",
"transfer_code": "string",
"destination_type": "crypto",
"destination_crypto_address": "string",
"deposit_txid": "string",
"deposit_iban": "string",
"deposit_bic": "string",
"deposit_beneficiary": "string",
"deposit_bank_name": "string",
"deposit_payment_type": "string",
"kyc_verified": true,
"created_at": "2026-11-09T04:34:14.500Z",
"expires_at": "2026-11-09T04:34:14.500Z",
"completed_at": "2026-11-09T04:34:14.500Z"
},
"deposit_crypto_address": "string",
"fee": {
"feePct": "string",
"feeFlat": "string",
"feeAmount": "string",
"netAmount": "string"
}
}
Validation error
- application/json
- Schema
- Example (from schema)
Schema
{
"error": {}
}
KYC failed or below minimum order
- application/json
- Schema
- Example (from schema)
Schema
{
"error": "string"
}