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. The corridors and rails available to you depend on how your project is configured; contact us before you build against them.
A remittance in OMS is two flows joined by the sender’s OMS wallet: the sender funds the wallet with fiat, which settles as USDC, then you pay out from that wallet to the recipient. There is no single remittance endpoint; this page shows which guide covers each leg.
Remittance flow
1Sender→OMSFund with a bank transfer or cash
2OMSConverts fiat to USDC (cashToCrypto / fiatAccountToCrypto)
3PolygonUSDC settles onchain in the sender’s OMS wallet
4OMSConverts USDC to recipient currency (cryptoToFiatAccount / cryptoToCash)
5OMS→RecipientDelivers USD or CAD to a bank account, or USD as cash pickup

Step 1: Fund the sender’s wallet

The sender is your customer. Pick the funding route that fits them:
  • Bank transfer: give the sender a virtual account whose destination is their OMS wallet. Each ACH or wire deposit is converted to USDC automatically.
  • Cash: issue a cash-in code the sender takes to a retail location.
Wait for the funding transaction to reach completed (transaction.statusChanged) before you pay out.

Step 2: Register the recipient

The recipient is a counterparty of the sender. Create it with POST /counterparties, then register the recipient’s bank account with POST /external-accounts and owner: { "kind": "counterparty", "counterpartyId": "ctp_..." }:
  • bankUs for a US account, paid in USD.
  • bankIban for an IBAN account, paid in USD over SWIFT.
  • bankCanada for a Canadian account, paid in USD over SWIFT or CAD over the local rail.
Call GET /reference/account-type-requirements?customerId=cst_... to see which account types your project can create and the fields each needs. Pay a third party has the full request and response bodies.

Step 3: Pay out

Create a quote from the sender’s OMS wallet to the recipient’s account and accept it with POST /transactions, as in Bank transfers. The quote locks the rate and fees in pricing (exchangeRate and fees) until expiresAt, so show the recipient amount to the sender before they confirm. For a recipient who wants cash in the US, use a cash destination instead; see Cash pickup.

Track the remittance

Each leg is its own transaction. Put a shared metadata key (for example remittanceId) on the payout quote, which copies it to the payout transaction, and record the funding transaction’s ID alongside it. Follow both with transaction.statusChanged. The payout transaction’s destination.owner names the recipient counterparty, and its payout transfer (GET /transfers/{transferId}) carries the bank references for tracing. Verification of the sender is set per project. Depending on your configuration, OMS verifies customers or relies on your own verification.