Both need the
rates:read scope.
Indicative rates
Live, mid-market-derived, and non-binding. Cheap enough to call on every page render.rate is what you would transact at — destination units per one settlement unit,
after spread. mid_market_rate is the pre-spread reference, shown so the
spread is visible rather than buried.
rate does not account for fees. A payout at this rate still carries a platform
fee and a network fee on top, so destination_amount / rate understates what
you will owe. Quote if you need the real number.Executable quotes
A quote freezes the rate, the spread, and every fee for a short window, and shows you the exact settlement amount.destination_amount) and we
derive what you owe (settlement_amount). There is no reverse direction — you
cannot ask “what does 50 USDT buy”.
Reading the numbers
settlement_amount and total_fee_amount directly. Do not recompute them
from exchange_rate and a fee percentage — rounding and fee schedules are ours to
change, and a recomputed figure that disagrees with ours is a reconciliation bug
waiting to happen.
Every amount is paired with its currency. Fees are charged in the settlement
currency, which is not the currency the beneficiary is paid in.
Quote statuses
expires_at
reports EXPIRED on the next fetch rather than staying PENDING until something
sweeps it.
Accepting is optional:
QUOTE_EXPIRED by locking a fresh quote and re-presenting the price. Never
retry the same quote ID — it cannot come back.
How quotes relate to payouts
So a quote is a display instrument — it tells your user what a payout will cost, a second or two before they commit. The payout’s own locked rate is what you are actually charged, and it appears on the payout asexchange_rate,
settlement_amount, and the fee fields once the instruction exists.
The practical consequence: the price you showed and the price you pay can differ
slightly if the rate moved between quoting and creating. Keep the gap short, and
reconcile against the payout rather than the quote.
Once the instruction is issued, the rate is frozen for the life of that
instruction. If the instruction expires unpaid the payout ends EXPIRED and the
locked rate dies with it — see Payout lifecycle.
Errors
The two
503s are transient — retry with backoff. See Errors.