Skip to main content
Every side of a transaction specifies an asset (what kind of money) and, for most instruments, a network (how it moves). Crypto sides carry an asset and a network; fiat sides carry an asset (usd or cad) and a rail-specific network.

Crypto assets and networks

OMS custodial wallets and on-chain instruments hold stablecoins: A crypto instrument pairs the asset with a network. The network on every crypto request field is a closed set: Send network values in lowercase. Typed clients generated from the OMS schema validate against these exact values. Availability of an asset on a given network is a separate check: usdc is available on ethereum, base, and solana; usdt is available on ethereum only. Each crypto side also resolves a blockchainAsset object that carries the on-chain identity: the wire-level protocol (evm, svm, or sui), the chainId, and the tokenId. Polygon is the recommended network for most use cases: sub-2-second finality, fractions-of-a-cent transaction cost, and native USDC (no bridging or wrapping).
Call GET /networks at runtime to discover every network OMS currently supports, along with its assets and which OMS resources can use it as a source or destination. Availability is derived from live route configuration, so a network absent from the response is not routable.

Fiat rails

Fiat instruments are identified by a type and carry a rail-specific network: Card rails accept a settlementType on the quote: internal (OMS custodies the crypto) or external (an on-chain wallet). A card buy defaults to external; a card sell defaults to internal. The field is ignored for non-card rails. Which rails a customer can use depends on the endorsements granted to that customer (basic, cryptoCustody, and usd). Endorsements are granted after verification and delivered via webhook. See Entities and relationships for the endorsement model.

Exchange rates and FX

USD and its stablecoins convert by issuer redemption: USD to USDC or USDT is redeemed 1:1 with the issuer, so there is no market, exchange, or central-bank reference rate and no FX spread. What a quote locks is the fee schedule, not a fluctuating rate. The quote’s pricing object expresses this:
  • pricing.exchangeRate: units of the destination asset per unit of the source asset.
  • pricing.effectiveRate: the all-in rate the customer receives after fees.
  • pricing.fixedAmountSide: which side of the trade the amount was specified on.
  • expiresAt: when the locked pricing expires.
The per-side feesDeducted breakdown reports OMS, developer, and gas fees separately.

Settlement times

Typical production times from initiating a payment to the confirmation event. Inbound confirmations fire when the bank confirms receipt; the same timing applies to payouts. Amounts above bank-internal thresholds can trigger a compliance review before release: a hold, not a rejection. Execution is never force-split across payments.

Cash networks

OMS supports cash deposits and withdrawals through a partner retail network. A cash-in generates a code the customer presents at a retail location; OMS monitors for the deposit and auto-creates a cashToCrypto transaction when cash is received. Cash payouts (cryptoToCash) are delivered as a pickup: the amount must be a multiple of 20.00, up to a maximum of 400.00 per transaction. Query available locations with GET /cash-locations, passing the provider, the customer’s latitude and longitude, and a flow of cash_in or cash_out. See the Cash-ins and cash-outs page for the full flow.

Network reference endpoint

GET /networks returns the live catalog of networks OMS routes on, with each network’s asset list, on-chain identity, and which OMS resources can use it in which direction. The response derives from the current routing configuration, so it always reflects what the running API accepts. The endpoint takes no query parameters and does not paginate; the catalog is configuration-bounded.
A single entry:
Every entry carries the network token you send in request network fields, a category (crypto, fiatAccount, or cash), and a type (blockchain, bankRail, card, or physical). Blockchain networks add chainId (null for non-EVM), networkFamily (evm or solana), and one assets entry per active pair. assets[].contractAddress is null for a native asset; assets[].decimals is absent when the on-chain scale is unknown for that pair. supportedBy states, per OMS resource type, whether that network is usable as a source, as a destination, or both. externalAccount is asymmetric: the values are the external-account arm names that can attach on that side (for example, walletExternal for crypto destinations); an empty array means the arm is not selectable on that side. supportedBy.wallet is populated only when OMS wallets are known to hold value on the network. When the property is absent, treat it as unproven for wallet use rather than as an explicit “no”: OMS reports what its wallet custodian has validated, not the negation. Fiat availability is scoped to the caller’s project. Rails your project does not have enabled are reported as unavailable on your response even when they are enabled globally. Consume this endpoint at the boundary of your integration to drive picker UIs and configuration checks. The tables earlier on this page summarize the same catalog at doc-writing time.