- Neobanks and fintech apps serving emerging-market users who need USD-denominated accounts
- Freelancer platforms whose contractors need a US bank account to receive client payments
- Marketplaces that want to offer USD wallet balances to international sellers
Create each customer’s virtual account with
POST /virtual-accounts; OMS assigns the routing and account number once the account is provisioned. Virtual accounts must be enabled for your project, and the OMS API is in early access: request access for an API key. In sandbox, simulate an incoming deposit with POST /virtual-accounts/{virtualAccountId}/simulate/inbound-transfer. See the Virtual accounts guide.How it works
Each customer gets their own dedicated account number. When a payer sends a bank transfer to that number, OMS automatically creates a transaction that converts the USD to USDC and credits the customer’s wallet: their custodial OMS wallet where your project’s account provider supports it, or a registered external wallet. The customer can hold the balance or withdraw at any time. To keep the balance in dollars instead, point the virtual account at a fiat wallet (walletFiat).
The account’s routing details, including the rails it accepts, are in the virtual account’s depositInstructions.bankUs once its status is active.
OMS resources
Implementation
Customer onboarding
Create customer records, collect KYC, and provision wallets.
Virtual accounts
Assign a persistent USD account number and handle incoming deposits.
Bank transfers
Quote and execute outbound ACH and wire withdrawals.
Crypto-to-fiat
Convert USDC to fiat for withdrawal via OMS.