Unified Account Model
OpenFX uses a single/accounts resource for both fiat currency accounts and crypto asset accounts. There are no separate wallet endpoints. Whether you are holding USD, EUR, or USDC, the same API surface manages account creation, balance queries, and lifecycle transitions.
Why operational accounts matter
Operational accounts are the foundation of the OpenFX business model. They solve a critical problem: capital leakage from off-platform fund flows. Today, customers sweep funds to external bank accounts between FX trades and payouts. Every dollar that leaves OpenFX between trades is a dollar that must be won back. Operational accounts on the platform change the economics:- Funds stay on-platform — working capital remains accessible for trades, payouts, and conversions without external bank transfers
- Customer switching costs rise — once balances are held on-platform, customers are less likely to move to a competitor
- Retained balances deepen on-platform liquidity — making FX execution instant, capital-efficient, always-on (24/7/365), and cheaper to operate
The unified account model — a single
/accounts resource for both fiat and crypto — is a
locked architectural decision. There are no separate /wallets endpoints. This unification
simplifies the API surface and avoids artificial splits between asset types.type field determines the flavor:
| Type | Description | Key Fields | Use Case |
|---|---|---|---|
demand_deposit | Standard fiat bank account | currency (ISO 4217) | Hold and move fiat currencies (USD, GBP, EUR) |
wallet | Crypto asset account | asset, chain | Hold and move stablecoins (USDC, USDT, EURC, PYUSD) |
virtual | Segregated fiat sub-account | currency (ISO 4217) | Client money segregation, escrow, earmarking |
All account IDs use the
acc_ prefix followed by a UUIDv7 identifier (e.g., acc_01953e1a5f4b7002). This prefix makes account references instantly recognizable in logs and debugging.Account Lifecycle
Every account progresses through a defined set of statuses:| Status | Description |
|---|---|
pending | Account has been created but is not yet ready for use. |
active | Account is fully operational. Balances can be credited and debited. |
suspended | Account is temporarily frozen. No transactions allowed until reactivated. |
closed | Account is permanently closed. This is a terminal state. |
Account Purpose
Thepurpose field classifies how the account will be used. This aids compliance reporting and internal categorization.
| Purpose | Description |
|---|---|
operating | General operating funds |
payroll | Payroll disbursement |
vendor_payments | Payments to vendors and suppliers |
treasury | Treasury and cash management |
collections | Receiving inbound collections |
disbursement | Outbound disbursements |
escrow | Escrow or trust funds |
other | Any other purpose |
purpose field is optional at creation time and can be set based on your business needs.
Resource Hierarchy
Accounts sit at the center of the banking layer. Here is how they relate to other resources:- A customer owns one or more accounts.
- Each account has balances across one or more currencies or assets.
- Fiat accounts receive deposits through account numbers (ACH routing, wire, IBAN, etc.).
- Crypto accounts receive deposits through blockchain addresses (Ethereum, Solana, etc.).
- All balance-affecting events are recorded as transactions in the ledger.
Creating Accounts
Prerequisites: The customer must be in
active status (KYB approved) and have the accounts capability before you can create accounts.Next Steps After Account Creation
Once you have created an account, set up the deposit infrastructure so the account can receive funds:- Fiat accounts: Create account numbers to receive bank deposits. See Account Numbers.
- Crypto accounts: Create blockchain addresses to receive on-chain deposits. See Blockchain Addresses.
Related Guides
Fiat Accounts
Creating and managing fiat currency accounts with multi-currency support.
Crypto Accounts
Creating crypto asset accounts across supported chains.
Account Numbers
Provisioning routing identifiers to receive fiat deposits.
API Reference
- POST /accounts — Create account
- GET /accounts — List accounts
- GET /accounts/ — Get account
- POST /accounts//close — Close account