Overview

Fiat accounts hold balances denominated in traditional currencies (USD, GBP, EUR, and others). OpenFX supports two fiat account types:
TypeDescriptionUse Case
demand_depositStandard fiat bank accountGeneral-purpose operating accounts, treasury, payroll
virtualSegregated fiat sub-accountClient money segregation, earmarked funds, escrow
Both types share the same API surface. The difference is operational: virtual accounts provide logical segregation within the platform for client money management use cases.

Creating a Fiat Account

To create a fiat account, send a POST /accounts request with type set to demand_deposit or virtual and a valid ISO 4217 currency code.
curl -X POST https://sandbox.api.openfx.com/v1/accounts \
  -H "Authorization: Bearer $API_KEY" \
  -H "X-Signature: $SIGNATURE" \
  -H "X-Timestamp: $TIMESTAMP" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "cus_01953e1a5f4b7000",
    "type": "demand_deposit",
    "currency": "USD",
    "label": "USD Operating Account",
    "purpose": "operating"
  }'
The response includes the full account object:
{
  "id": "acc_01953e1a5f4b7002",
  "customerId": "cus_01953e1a5f4b7000",
  "type": "demand_deposit",
  "status": "active",
  "currency": "USD",
  "label": "USD Operating Account",
  "purpose": "operating",
  "metadata": {},
  "createdAt": "2026-02-23T12:00:00Z",
  "updatedAt": "2026-02-23T12:00:00Z"
}
Prerequisites: The customer must be in active status (KYB approved) and have the accounts capability.

Multi-Currency Support

A single fiat account holds balances in its designated currency. To hold multiple currencies, create one account per currency.
Customer: cus_01953e1a5f4b7000
  |-- acc_... (demand_deposit, currency: USD)
  |-- acc_... (demand_deposit, currency: GBP)
  +-- acc_... (demand_deposit, currency: EUR)
Each account tracks its own set of balances (available, pending, held, total). Use the FX engine to convert between currencies across your accounts.
Common pattern: Create a USD operating account for domestic payments and additional currency accounts as needed. This lets you hold local currency and originate payments on local rails.

Account Numbers as Sub-Resources

Fiat accounts receive deposits through account numbers — routing identifiers like ACH routing numbers, IBANs, or UK sort codes. Account numbers are not inline fields on the account. They are managed as separate sub-resources under /accounts/{accountId}/account-numbers. This design allows a single account to have multiple account numbers across different rails:
Account: acc_01953e1a5f4b7002 (USD)
  |-- an_... (us_ach)   -- ACH routing + account number
  |-- an_... (us_fedwire)  -- Fedwire routing + account number
  +-- an_... (iban)     -- IBAN for international receipts
See the Account Numbers guide for full details on creating and managing account numbers.

Listing Account Numbers

Retrieve all account numbers provisioned for an account:
curl -X GET https://sandbox.api.openfx.com/v1/accounts/acc_01953e1a5f4b7002/account-numbers \
  -H "Authorization: Bearer $API_KEY" \
  -H "X-Signature: $SIGNATURE" \
  -H "X-Timestamp: $TIMESTAMP"

Receiving Fiat Deposits

To receive fiat deposits into an account:
  1. Create the account with POST /accounts.
  2. Create an account number with POST /accounts/{accountId}/account-numbers specifying the rail type (us_ach, us_fedwire, iban, uk_sort_code).
  3. Share the routing details (routing number + account number, or IBAN + BIC) with the sender.
  4. When funds arrive, the balance is credited to the account.
Use GET /accounts/{accountId}/deposit-instructions to retrieve a unified view of all deposit methods (both fiat and crypto) for an account in a single call.

Closing a Fiat Account

Close an account with POST /accounts/{accountId}/close. The account must have a zero balance and no pending transactions.
curl -X POST https://sandbox.api.openfx.com/v1/accounts/acc_01953e1a5f4b7002/close \
  -H "Authorization: Bearer $API_KEY" \
  -H "X-Signature: $SIGNATURE" \
  -H "X-Timestamp: $TIMESTAMP" \
  -H "Idempotency-Key: $(uuidgen)"
Closing an account is permanent. The account transitions to closed status, which is a terminal state. All associated account numbers are also closed. Ensure all funds have been transferred out before closing.

API Reference