Skip to main content
OMS supports two complementary in-person cash flows:
  • Cash-in: the customer deposits physical cash at a retail location and receives USDC in the destination wallet.
  • Cash-out (cash pickup): the customer withdraws USDC from a wallet and collects physical cash at a retail counter or ATM.
Both flows use code-based handoffs at partner retail locations and skip the upfront quote step: pricing is reconciled when the cash actually moves at the counter.

Cash-in

A cash-in is an in-person cash deposit flow for retail locations. The developer creates a cash-in that generates a deposit code. The customer takes that code to a partner retail location, deposits cash in any amount, and OMS automatically converts it to USDC and delivers it to the destination wallet. Cash-ins skip the quote step: the customer decides how much to deposit at the counter, so no amount is specified at creation.

Cash-in limits

LimitValue
Transaction minimum$20
Transaction maximum$500 ($1,000 at Walmart locations)
Daily maximum$1,500 and 3 transactions
Weekly maximum$3,500 and 12 transactions
Monthly maximum$5,000 and 20 transactions

Cash-in object

{
  "id": "ci_...",
  "status": "pending",
  "customerId": "cst_...",
  "source": {
    "asset": "usd",
    "network": "cash",
    "indicatedAmount": "100.00"
  },
  "destination": {
    "wallet": { "id": "wlt_..." },
    "asset": "usdc",
    "network": "polygon"
  },
  "cash": {
    "locationId": "loc_...",
    "locationReference": "..."
  },
  "depositInstructions": {
    "code": "ABC 12345",
    "expiresAt": "2025-01-15T11:30:00Z",
    "locationName": "Retail Partner #4521",
    "locationAddress": "123 Main St, New York, NY 10001"
  },
  "omsFeeSchedule": {
    "feeCurrency": "usd",
    "entries": [
      { "type": "percentage", "rate": "0.015" },
      { "type": "fixed", "amount": "0.50" }
    ]
  },
  "transactionId": null,
  "createdAt": "2025-01-15T10:30:00Z",
  "completedAt": null
}
Display the depositInstructions.code in your UI. The omsFeeSchedule is included so you can show customers the fee structure before they visit the retail location.

Cash-in flow

POST /cash-ins  →  deposit code (valid 1 hour)

      customer deposits cash at retail location

              OMS converts to USDC

         transaction.fiatToCrypto.completed
The deposit code is valid for one hour. If it expires before the customer deposits, refresh it via POST /cash-ins/{id}/refresh: no need to create a new cash-in.

Cash-in status

StatusMeaning
pendingDeposit code issued, awaiting customer deposit
processingCash received; conversion in progress
completedUSDC delivered to the destination wallet
expiredCode expired before a deposit was made

Cash-in operations

OperationEndpoint
Create a cash-inPOST /cash-ins
Refresh deposit codePOST /cash-ins/{cashInId}/refresh
Get a cash-inGET /cash-ins/{cashInId}
List cash-insGET /cash-ins

Cash-out

A cash-out (also referred to as cash pickup) is the inverse of a cash-in: the customer holds USDC in an OMS wallet and wants to withdraw it as physical cash. OMS converts the crypto to fiat, issues a time-limited pickup code, and the customer collects cash at a retail counter or ATM.
Cash-out is under active development and not yet available in the OMS API. To be notified when it launches, register your interest.

Cash-out limits

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

Cash-out flow

POST /quotes (USDC → USD/cash)

POST /transactions {quote}  →  OMS pulls USDC from wallet

   pickup code (time-limited)

customer collects cash at retail location or ATM

   transaction.cryptoToFiat.completed

Supported networks

Cash deposits and withdrawals are processed through OMS’s partner retail and ATM network across the US.