External bank payouts
Send same-currency fiat from a customer account to an outside bank beneficiary (not another Element Pay ledger account).
Prerequisite: Customers quickstart. Banking gate:
products.deposit_account.status=ready. Source account must be status=active for the payout currency.
Auth
Integrator flow (recommended order)
Do not hardcode bank field lists from this guide alone - call discovery first.1
Resolve source account
GET …/accounts → pick fiat account_id with status=active and enough balance.available2
Discover schemes
GET …/payout-methods → methods[].scheme, required_fields, require_one_of, aliases, default3
Discover banks (local rails)
For NGN / GHS / CAD local rails:
GET …/payout-banks → pick bank_code (and bank_name)4
Preview
POST …/payouts/preview with amount, beneficiary, bank → preview_token5
Confirm
POST …/payouts with preview_token + idempotency_key6
Poll
GET …/payouts/{payout_id} until terminal statuspayout-methods, payout-banks, then payouts/preview). After this docs PR deploys, those operations show success/error response examples in the panel.
1. Discover schemes
data:
Common schemes by currency
SWIFT:
required_fields include swift_bic; use require_one_of: [["iban","account_number"]]. Do not treat both as optional.
Do not use corridor GET /partner/banks for these codes. That list is for quote network_id (African / international corridors), not banking payouts.
2. Discover banks (NGN / GHS / CAD)
data.banks[] typically includes bank_code, bank_name, and optionally swift_bic / bank_institution_number. Country is derived from the account currency (NGN→NG, GHS→GH, CAD→CA). Currencies without a directory return banks: [].
3. Preview
Preview and confirm must use the same sourceaccount_id.
NGN (NIP)
GHS (EFT)
CAD Interac email
security_question / security_answer are optional on preview. Share the answer with the recipient out of band. Answers are never returned in partner responses.
EUR SEPA (shape check)
preview_token. Fees on preview are often fee_status=pending_confirm / fee: null until confirm.
4. Confirm
idempotency_key after network errors. Tokens expire quickly; re-preview if needed.
5. Get payout
Business rules
- Same currency fiat → external bank only (no FX on this rail).
- Discover → preview → confirm on the same source
account_id. - Balance:
available >= amount(exact balance allowed). Insufficient → 422 withdata.available,data.amount,data.currency. - Partner-neutral JSON: errors do not name upstream PSPs.
- Fees may finalize only on confirm/GET; do not invent a fee schedule.
Funding the source account
NGN has no “request money” payment-request; use deposit coordinates.