Skip to main content

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.
Preview requires available balance (available >= amount). Confirm on live moves money. Sandbox often cannot complete a full bank push - use discovery + insufficient-balance checks first.

Auth

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.available
2

Discover schemes

GET …/payout-methods → methods[].scheme, required_fields, require_one_of, aliases, default
3

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_token
5

Confirm

POST …/payouts with preview_token + idempotency_key
6

Poll

GET …/payouts/{payout_id} until terminal status
Use Try it under API Reference for the same paths (search payout-methods, payout-banks, then payouts/preview). After this docs PR deploys, those operations show success/error response examples in the panel.

1. Discover schemes

Typical 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 source account_id.

NGN (NIP)

GHS (EFT)

CAD Interac email

Outbound Interac 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)

Save preview_token. Fees on preview are often fee_status=pending_confirm / fee: null until confirm.

4. Confirm

On live, confirm initiates an external bank payout. Do not confirm unless you intend to send funds.
Reuse the same idempotency_key after network errors. Tokens expire quickly; re-preview if needed.

5. Get payout

Business rules

  1. Same currency fiat → external bank only (no FX on this rail).
  2. Discover → preview → confirm on the same source account_id.
  3. Balance: available >= amount (exact balance allowed). Insufficient → 422 with data.available, data.amount, data.currency.
  4. Partner-neutral JSON: errors do not name upstream PSPs.
  5. 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.

Errors

Next