Skip to main content
There are two ways to price a payout, and they answer different questions. 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.
You always specify what the beneficiary receives (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

Read 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

Expiry is evaluated when you read the quote, so a quote past its expires_at reports EXPIRED on the next fetch rather than staying PENDING until something sweeps it. Accepting is optional:
An expired quote cannot be accepted:
Handle 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

A quote is not an input to POST /v1/payouts. There is no fx_quote_id field on a payout. Payout creation locks its own rate when the payment instruction is generated, at the rate prevailing at that moment.
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 as exchange_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.