Skip to main content
Before you start: the OMS API is in early access. Every endpoint, including the ones in this guide, requires an early-access API key. Request access before you begin.

How it works

A customer holds USDC in an OMS wallet and wants to withdraw as physical cash. You create a quote whose source is the customer’s OMS wallet and whose destination is a cash instrument at an ALLPOINT pickup location, with the cash amount set on the destination side. OMS converts the crypto to fiat, issues a time-limited pickup code, and the customer collects cash at a retail counter or ATM. The transaction direction is cryptoToCash. This is the complement to Cash-in. Cash-in funds a wallet from cash; cash pickup withdraws from a wallet to cash.
Cash pickup flow
1AppOMSPOST /quotes (cryptoToCash, amount on destination)
2OMSAppQuote with pickup fee breakdown
3AppCustomerShow amount to receive
4CustomerAppConfirm
5AppOMSPOST /transactions {quoteId}
6OMSPull USDC from wallet
7OMSAppWebhook: transaction.cryptoToFiat.cashPickupReady
8AppCustomerShow pickup code + location
9CustomerRetailPresent code, collect cash
10OMSAppWebhook: transaction.cryptoToFiat.completed

Limits

The following limits apply to cash pickups (cash-outs):
LimitValue
Transaction incrementMultiples of $20.00 USD
Transaction minimum$20
Transaction maximum$400
Daily maximum$1,000 in California and New Mexico; $2,000 in all other states
Monthly maximum$60,000

What is available today

The quote and transaction mechanics for a cash pickup are part of the canonical API. A cryptoToCash quote takes an OMS wallet as the source and a cash destination whose details carry asset: usd, a cashLocationId, a cashLocationReference, and the amount (a multiple of $20.00, up to $400.00 per transaction). You execute it with POST /transactions referencing the quote by quoteId, and OMS drives the pickup through the transaction.cryptoToFiat.* events: transaction.cryptoToFiat.processing when the payout starts, transaction.cryptoToFiat.cashPickupReady when the pickup code is issued, transaction.cryptoToFiat.completed when the cash is collected, and transaction.cryptoToFiat.codeExpired if the code expires uncollected. The transaction’s subStatus carries the matching detail (for example completed.cashPickupCollected). See Webhook events for the envelope and the full catalog. Cash pickup is enabled per project through early access; contact us before you build against it.

Planned capabilities

  • Cash-out location lookup with GET /cash-locations and flow=cash_out
  • Time-limited pickup codes with automatic refund on expiry
  • Wider coverage across US retail networks and ATMs

Cash pickup is under active development and available through early access. Contact us to enable it for your project.

Register interest

Share your use case and we’ll reach out when cash pickup is available.