Send a payout from an account to a beneficiary on one rail. Returns 202; poll GET /withdrawals/{id} until the status is COMPLETED, FAILED, or CANCELLED.
On the CRYPTO, ACH, FEDWIRE, and SWIFT rails the beneficiary is sent exactly amount and the payout fee (fee_amount) is debited from the account in addition to it; total_amount reports the full debit (amount + fee_amount) once the fee is known. Before submitting, the available balance (net of in-flight withdrawals) is checked against amount plus the estimated fee where the fee can be estimated: a shortfall is rejected synchronously with 400 INSUFFICIENT_FUNDS and a details object (fee_amount, fee_currency, required_amount, available_amount), and no withdrawal is created — top up and retry, with the same Idempotency-Key if you like. If the balance drops between that check and submission, the payout is returned 202 with status: FAILED and reason_code: INSUFFICIENT_FUNDS. Quote-driven payouts are checked on amount alone (the fee is priced into the quote). On CHINA_OFFRAMP, amount is the quote's source_amount (the full debit, so total_amount equals amount) and the beneficiary receives the quote's target_amount.
A CRYPTO payout is funded from the account of the asset being sent: the beneficiary's payment_details.currency must equal the account's currency, otherwise 400 VALIDATION_ERROR. CRYPTO is not available on a fiat account (400 RAIL_NOT_AVAILABLE).
The beneficiary's payment_details must carry an identifier that settles on the requested rail, otherwise 400 VALIDATION_ERROR: SWIFT needs swift_code; ACH, FEDWIRE, RTP, and FEDNOW need routing_number; SEPA and SEPA_INSTANT need iban; FASTER_PAYMENTS and CHAPS need iban or a SORT_CODE entry in bank_routing_codes. A wallet beneficiary (wallet_address set) can only be paid on CRYPTO; every other rail rejects it.
On every rail other than CRYPTO and CHINA_OFFRAMP, when no quote_id is supplied the beneficiary's payment_details.currency must equal the account's currency, otherwise 400 VALIDATION_ERROR (there is no FX leg to reconcile the mismatch). A quote-driven payout is checked against the quote's target_currency instead.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
