Skip to main content
A user funds their wallet by paying in fiat cash, which OMS converts to USDC. They hold the USDC on Polygon. When they want to move money out, they can send it onchain to another wallet or external blockchain address, or withdraw it back to a bank account. Funding via bank rails (a dedicated virtual account for inbound ACH) is available as early access. This is the core loop for any consumer crypto product: move money in, hold it onchain, move it out. OMS handles the fiat rails, conversion, and compliance on both sides. Who this is for:
  • Consumer apps that want to offer crypto-backed savings or spending accounts
  • Crypto exchanges and brokers handling retail on/off-ramp volume
  • DeFi frontends that need fiat on-ramps for users without existing crypto holdings
Cash-in funding and crypto-to-crypto sends are available in the OMS API today. Bank funding (inbound ACH to a virtual account) and bank payouts (to an external account) are early access: those resources are referenced by ID in quote and transaction bodies but are not yet provisionable in the OMS API.

Register interest

Share your use case and we’ll reach out when bank rails are available.

How it works

On-ramp flow
1AppOMSPOST /quotes (cash-in source, wallet destination); bank rails via Virtual Account (early access)
2OMSAppQuote with rate, fees, and expiry window
3AppOMSPOST /transactions (quoteId)
4OMSReceives fiat cash, or ACH to a Virtual Account (early access), converts to USDC, credits wallet
5OMSAppWebhook: fiatToCrypto.completed
Off-ramp flow
1AppOMSPOST /quotes (wallet source, bank destination — early access)
2OMSAppQuote with rate, fees, and expiry window
3AppOMSPOST /transactions (quoteId)
4OMSPulls USDC from wallet, initiates ACH or wire transfer to the external account (early access)
5OMSAppWebhook: cryptoToFiat.completed
Both directions use the same quote-then-execute flow. The source is always an OMS wallet, and the customer agrees to a rate and fee breakdown before any money moves. Rates lock at quote time for a short window, so the customer sees exactly what they’ll receive. To move money out today without bank rails, run the same POST /quotes then POST /transactions flow as a crypto-to-crypto send: the source is the customer’s wallet and the destination is another wallet or an external blockchain address. Bank payouts to an external account follow the flow above and are early access.

OMS resources

ResourceRole
CustomerIdentity record with KYC endorsements
WalletCustodial or non-custodial stablecoin balance
External accountCustomer’s registered bank account (early access)
QuoteRate lock with fee breakdown before execution
fiatToCrypto transactionConverts fiat cash to USDC and credits the wallet
cryptoToCrypto transactionSends USDC from the wallet to another wallet or external blockchain address
cryptoToFiat transactionPulls USDC from the wallet, delivers fiat via ACH or wire (early access)

Implementation

Customer onboarding

Create customer records, collect KYC, and provision wallets.

Fiat to crypto

Quote and execute cash-in funding, plus ACH on-ramps (early access).

Crypto to fiat

Quote and execute ACH or wire off-ramps.

Bank transfers

Full walkthrough of both funding and withdrawal flows.