Skip to main content
Pay a UAE bank account in UAE dirhams (AED). For the general flow, see Payout lifecycle. The quote, confirm, and webhook steps are the same as for EUR, and so is the fee model. Supported payout currencies compares every payout currency side by side.

Before you start

  • Your organization must be enabled for AED. Until it is, a request in it fails with 403 PAYOUT_CURRENCY_NOT_ENABLED.
  • The recipient’s account needs the UAE-dirham receiving capability, ACTIVE before you pay. Capabilities lists the id, and Be paid in UAE dirhams lists the identity the recipient owes.
  • AED has no sending capability. Don’t send a sender on a quote or payout, or it fails with 422 SENDER_NOT_SUPPORTED.
  • Every POST needs an Idempotency-Key header. See Idempotency.

Register the bank account and create the payout

A UAE bank account is identified by its IBAN and paid over AE_LOCAL. The recipient owes a name and an address with line1 and country, in any country, and no identity document. See Be paid in UAE dirhams. Register the account with routingFamily AE_LOCAL and the UAE IBAN as accountNumber. The IBAN carries the bank, so you send no BIC, bank code, or account type. No name check runs, so verifications[] stays empty. The accountHolderName can be at most 75 bytes. Be paid in UAE dirhams lists the characters it can use.
cURL
Three rules apply only to AED:
  • Every payout needs a purpose. Send one of GOODS_AND_SERVICES, INVESTMENTS, PAYROLL, or TREASURY_MANAGEMENT. OTHER is refused. A missing or refused value fails with 400 PURPOSE_INVALID. A quote carries no purpose, so send it when you create the payout.
  • You fund it from a stablecoin or AED balance. The financial account must hold USDC, USDT, EURC, or AED. Any other send currency fails with 422 QUOTE_SEND_CURRENCY_UNAVAILABLE.
  • Per-payout limits apply. A receiveAmount outside them is refused when the payout is priced, with 422 AMOUNT_OUT_OF_RANGE. error.details carries the exact bound.
cURL
The payout starts in REQUIRES_CONFIRMATION. Confirm it as you would any payout.

Memos

On AE_LOCAL, a receiverMemo is at most 100 letters, digits, and spaces. A memo that is too long or holds any other character fails with 400 RECEIVER_MEMO_INVALID. OpenFX never truncates it.

Track settlement

On an AE_LOCAL payout, settlementTraceId.status reads UNSUPPORTED. Trace a payout with the receiving bank lists the key for every rail.

Common mistakes

  • Naming a sender. AED has no sending capability. Remove sender from the quote and the payout.
  • Leaving out purpose, or sending OTHER. Both fail with 400 PURPOSE_INVALID. Pick the closest of the other four values.
  • Funding the payout from another currency. Fund it from USDC, USDT, EURC, or AED.

What’s next

Payout lifecycle

The general payout flow.

Capabilities

The receiving capability and identity each currency needs.

EUR payout integration guide

Paying euro accounts over SEPA or SWIFT.

MXN payout integration guide

Paying Mexican bank accounts over SPEI.

COP payout integration guide

Paying Colombian bank accounts and Bre-B keys.

Payment Webhooks

Every payout and address event.