Create a unified ledger account. Three account types are supported:
demand_deposit — fiat currency account (USD, GBP, EUR, etc.). Specify currency.wallet — crypto asset account (USDC, USDT, etc.). Specify asset and chain.virtual — segregated sub-account for client money management.Prerequisites: The customer must be in active status (KYB approved) and have the accounts capability.
Next steps after creation:
POST /accounts/{id}/account-numbersPOST /accounts/{id}/blockchain-addressesAPI key issued at onboarding. Passed as a Bearer token in the Authorization header: Authorization: Bearer <api-key>. Identifies the caller and determines organization scope. Invalid or revoked keys return 401 with error type authentication_error.
Ed25519 or RSA-SHA256 asymmetric signature over the request payload (ADR-0015). Provides request integrity and non-repudiation. The signature covers the HTTP method, path, query string, request body, and timestamp. Invalid signatures return 401 with error type authentication_error.
Unix timestamp (seconds) of when the request was signed. Server rejects requests where the timestamp drifts beyond +/-60 seconds from server time to prevent replay attacks. Must match the timestamp used in the signature computation.
Idempotency key for this request. UUID v4 recommended. Max 128 characters. 24-hour retention. Same key + same body replays original response with Idempotency-Replayed: true. Same key + different body returns 409 (code: duplicate_idempotency_key). Same key while the original request is still processing returns 409 with a Retry-After header (code: idempotency_key_in_flight).
128"550e8400-e29b-41d4-a716-446655440000"
Request body for creating an account. The type field determines whether this is a fiat account (demand_deposit or virtual) or a crypto wallet account (wallet).
Customer resource identifier.
^cus_[A-Za-z0-9]+$"cus_01953e1a5f4b7000"
Account type. Use demand_deposit for standard fiat bank accounts or virtual for segregated sub-accounts.
demand_deposit, virtual ISO 4217 currency code for the fiat account.
^[A-Z]{2,10}$"USD"
Consumer-defined label for the account.
Intended purpose of this account. Used for compliance classification.
operating, payroll, vendor_payments, treasury, collections, disbursement, escrow, other Consumer-defined key-value store. Available on all primary resources. Max 50 keys. Keys must match ^[a-zA-Z0-9_]{1,40}$. Values are strings (max 500 chars) or null.
Account created.
Unified ledger account for fiat and crypto assets. Replaces the V2 separation of /accounts and /wallets. The type field distinguishes demand_deposit (fiat), wallet (crypto), and virtual accounts. Use the type discriminator to determine which variant applies.
Account resource identifier.
^acc_[A-Za-z0-9]+$"acc_01953e1a5f4b7002"
Customer resource identifier.
^cus_[A-Za-z0-9]+$"cus_01953e1a5f4b7000"
Account type. demand_deposit for standard fiat bank accounts, virtual for segregated sub-accounts.
demand_deposit, virtual Lifecycle status of an account.
pending, active, suspended, closed UTC timestamp in RFC 3339 / ISO 8601 format.
"2026-02-23T12:00:00Z"
UTC timestamp in RFC 3339 / ISO 8601 format.
"2026-02-23T12:00:00Z"
ISO 4217 currency code for the fiat account.
^[A-Z]{2,10}$"USD"
Consumer-defined label for the account.
"Operating Account - USD"
Intended purpose of this account. Used for compliance classification.
operating, payroll, vendor_payments, treasury, collections, disbursement, escrow, other Consumer-defined key-value store. Available on all primary resources. Max 50 keys. Keys must match ^[a-zA-Z0-9_]{1,40}$. Values are strings (max 500 chars) or null.