POST /transactions requires a quote. A quote locks the exchange rate and fee structure for a short window, giving you a guaranteed price before committing to execution.
Quote lifecycle
What a quote contains
A quote response includes:source: the source instrument (a typed side identifying the wallet or card being pulled from)destination: the destination instrument (typed the same way, identifying where funds are delivered)pricing: consolidated economics for both sides, the rate pair, and gas sponsorship (see below)sourceToDestination: a composite corridor tag such ascryptoToCrypto,cryptoToCash,cryptoToFiatAccount,cashToCrypto, orfiatAccountToCryptoexpiresAt: when the rate lock expires
Fee structure
Economics live in a single top-levelpricing object. pricing.source.amount is the gross the customer pays and pricing.destination.amount is what arrives at the destination; the fee breakdown lives in a pricing.fees array.
pricing.source.amount minus the entries in pricing.fees with side: "source"; the destination gross is pricing.destination.amount plus the entries with side: "destination". pricing.fees is always present and may be empty when no fees apply; only non-zero OMS, developer, and gas fees are listed.
Every amount is a decimal string padded to its asset’s precision (two decimals for usd/eur, six for usdc/usdt, eighteen for eth). The same amount renders the same string on every network and in every response and webhook.
Developer fees are configurable per integration. Set them on your OMS account or pass them in the quote request. OMS never shows your fee margin to the end user.
Gas sponsorship
SetsponsorGas: true on the quote request to cover network gas for your users. When OMS absorbs the gas cost, pricing.sponsorGas is true on the response (the field is omitted when gas is not sponsored). The absorbed gas cost does not appear as an entry in pricing.fees; it is a separate, out-of-band developer cost on your account. This is the standard pattern for custodial wallets where users should not be aware of blockchain mechanics.
Fixed-amount quoting
You can fix either side by setting theamount on exactly one side of the quote request; pricing.fixedAmountSide on the response reports which side you fixed:
pricing.fixedAmountSide: "source": user sends an exact amount, destination is calculatedpricing.fixedAmountSide: "destination": user receives an exact amount, source is calculated