Overview

Crypto accounts use the same unified /accounts resource as fiat accounts. Set the type field to wallet and specify the asset and chain to create a crypto account. Each account holds a single asset on a single blockchain network.
OpenFX uses the term “account” for both fiat and crypto. There are no separate wallet endpoints. This unified model keeps the API surface consistent regardless of the underlying asset type.

Supported Chains and Assets

ChainNetworkSupported Assets
ethereumEthereum MainnetUSDC, USDT, EURC, PYUSD
solanaSolanaUSDC, USDT
tronTRONUSDC, USDT
baseBase (L2)USDC, EURC
polygonPolygon PoSUSDC, USDT
inkInkUSDC
suiSuiUSDC
AssetFull NameType
USDCUSD CoinUSD-pegged stablecoin
USDTTetherUSD-pegged stablecoin
EURCEuro CoinEUR-pegged stablecoin
PYUSDPayPal USDUSD-pegged stablecoin
Not every asset is available on every chain. Verify the chain-asset combination is supported before creating an account. Unsupported combinations return a 400 validation error.

Creating a Crypto Account

Send a POST /accounts request with type set to wallet, along with the target asset and chain.
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": "wallet",
    "asset": "USDC",
    "chain": "ethereum",
    "label": "USDC Ethereum Account"
  }'
The response includes the full account object:
{
  "id": "acc_01953e1a5f4b7010",
  "customerId": "cus_01953e1a5f4b7000",
  "type": "wallet",
  "status": "active",
  "asset": "USDC",
  "chain": "ethereum",
  "label": "USDC Ethereum Account",
  "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 crypto capability.

Blockchain Addresses as Sub-Resources

Crypto accounts receive deposits through blockchain addresses — on-chain deposit addresses that are generated by the system. Like account numbers on fiat accounts, blockchain addresses are managed as separate sub-resources under /accounts/{accountId}/blockchain-addresses.
Account: acc_01953e1a5f4b7010 (USDC on Ethereum)
  +-- ba_... (ethereum, USDC) -- 0x742d35Cc6634C0532925a3b844Bc9e7595f2bD38

Creating a Blockchain Address

After creating a crypto account, generate a deposit address:
curl -X POST https://sandbox.api.openfx.com/v1/accounts/acc_01953e1a5f4b7010/blockchain-addresses \
  -H "Authorization: Bearer $API_KEY" \
  -H "X-Signature: $SIGNATURE" \
  -H "X-Timestamp: $TIMESTAMP" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "chain": "ethereum",
    "asset": "USDC"
  }'
The system generates the on-chain address automatically. The response includes the deposit address:
{
  "id": "ba_01953e1a5f4b7201",
  "accountId": "acc_01953e1a5f4b7010",
  "chain": "ethereum",
  "asset": "USDC",
  "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD38",
  "status": "active",
  "createdAt": "2026-02-23T12:00:00Z"
}

Receiving Crypto Deposits

To receive crypto deposits into an account:
  1. Create the account with POST /accounts (type: wallet).
  2. Create a blockchain address with POST /accounts/{accountId}/blockchain-addresses.
  3. Share the deposit address with the sender.
  4. When funds arrive on-chain and are confirmed, the balance is credited.
For crypto on/off-ramp flows, pair a crypto account with a fiat account and use the FX engine to convert between stablecoins and fiat currencies. This is the core pattern for crypto-to-fiat and fiat-to-crypto conversion.

Multi-Chain Strategy

You can create multiple crypto accounts for the same asset on different chains to give your users flexibility in how they deposit:
Customer: cus_01953e1a5f4b7000
  |-- acc_... (wallet, USDC, ethereum)
  |-- acc_... (wallet, USDC, solana)
  +-- acc_... (wallet, USDC, base)
Each account is independent with its own balance and blockchain addresses. Use internal transfers (POST /transfers) to consolidate balances across accounts when needed.

API Reference