This page covers the custodial
wallet resource of the Payments API. If your product needs users to control their own keys on-chain (consumer apps, agentic flows), use OMS non-custodial wallets. The two models can be combined in a single product.Object
address field is the wallet’s on-chain address. It is read-only and assigned at creation. type is internal for OMS-managed wallets or external for wallets held outside OMS. chain is the canonical chain name (for example, polygon), and blockchainAsset carries the resolved on-chain identity: protocol, chainId, and tokenId.
| Wallet status | Meaning |
|---|---|
active | Usable for sends and receipts. |
suspended | Temporarily blocked. |
closed | Terminated. |
At launch, wallets are custodial only: a single asset on one chain. Provisioning is scoped per asset and chain, so hold multiple assets by creating one wallet each under the same customer.
Create a wallet
POST /customers/{id}/wallets provisions a wallet for a customer for the requested asset and chain, and returns the created wallet.
Idempotency-Key header to safely retry without provisioning duplicates.
Balance
Read a wallet’s current balance withGET /wallets/{id}/balance. The response includes the display balance and its estimated value; pass estimatedBalanceCurrencyCode to value the balance in a currency other than USD (the default).
GET /customers/{id}/balance. See Customers.
Funding a wallet
A wallet can receive funds in three ways:| Method | How it works |
|---|---|
| Direct crypto transfer | Send crypto to the wallet’s address. |
| Virtual account | Fiat deposited to the customer’s assigned bank account number auto-converts to crypto. |
| Deposit address | Crypto sent to a monitored address auto-routes to the configured destination. |
address credits the wallet balance. Virtual accounts and deposit addresses are the flows where OMS auto-creates a transaction in response to incoming funds.
Transaction history
GET /accounts/{id}/transactions returns a wallet’s transaction history, most recent first, with cursor-based pagination and optional transactionType, since, and until filters. The id path parameter accepts a wallet ID (wlt_ prefix).
Key operations
| Operation | Endpoint |
|---|---|
| Create a wallet | POST /customers/{id}/wallets (body: asset, chain) |
| List a customer’s wallets | GET /customers/{id}/wallets |
| Get a wallet balance | GET /wallets/{id}/balance |
| List wallet transactions | GET /accounts/{id}/transactions |
Programmatic wallet creation via
POST /wallets with an explicit custodyType (custodial or embedded) is coming in an upcoming release. Today, provision wallets under a customer with POST /customers/{id}/wallets.Related
- Virtual accounts: assign a bank account number that auto-funds a destination
- Deposit addresses: set up a monitored crypto address that routes to a destination
- Transactions: move funds out of a wallet via crypto, bank transfer, or cash