Skip to main content

What happened

POST /v2/payouts named a rail that cannot settle the currency the payout moves, so the payout was refused. No transaction was created, no review started and no funds moved. POST /v2/orders answers the same when its autoPayout names a rail that cannot settle the currency the conversion delivers. No order is created. Each bank rail apart from swift settles exactly one currency, and a payout moves one currency and never converts, so a rail paired with any other currency is impossible rather than temporarily unavailable — a retry never clears it. swift carries any fiat currency the correspondent chain supports, so this error never applies to it.

Common causes

  • A EUR virtual account sent over a US railfedwire, rtp, fednow or ach on a EUR balance
  • A USD virtual account sent over sepa — the mirror of the same mistake
  • The rail is hard-coded — one rail is used for every payout, and the funding account’s currency varies

Recovery

1. Send it over a rail that settles the currency Use sepa or swift for EUR, and fedwire, rtp, fednow, ach or swift for USD. The recipient coordinates follow from the rail: a sepa recipient carries an IBAN and BIC, a US recipient carries an account and routing number.
2. Or convert first, then pay out To send over a rail that settles another currency, convert between the customer’s own virtual accounts with POST /v2/orders, then pay out from the account the order credits. Use a fresh Idempotency-Key for the new payout.

Prevention

  • Pick the rail from the funding account’s currency — read the virtual account’s asset.code and map it to the rails that settle it, rather than hard-coding one rail
  • Ask the requirements endpointGET /v2/payouts/requirements returns the recipient fields each rail needs, and is the same rail vocabulary create accepts