Skip to main content

Overview

Fixed rate swaps lock the exchange rate at the moment you request a quote. The user receives exactly the quoted amountOut regardless of market movement between quote time and swap execution — as long as the exchange is created before the rate lock expires. Reverse quotes build on the same rate lock and invert which side of the swap you specify: instead of “I am sending 1 ETH, what do I get?”, you ask “I need the recipient to get exactly 2500 USDC, what must I send?”.
Best For: Partners and users who want price certainty and are willing to plan around a short rate-lock window. Ideal for high-value swaps where slippage risk is unacceptable, and for paying invoices where the amount the recipient receives is fixed.
Fixed rate is available for standard (CEX) and private (multi-hop CEX) routing. It is not available for DEX swaps — combining fixed=true with a DEX quote type returns DEX_AND_FIXED_RATE_NOT_SUPPORTED (422).Reverse quotes require a fixed rate. See Reverse Quote below.

How it fits in

Fixed rate and reverse quotes are options on an existing flow, not a separate flow. Follow the Standard Swap or Private Swap guide as normal — fetching tokens, creating the order, sending the deposit, and polling status are all unchanged. Only three things differ: The rest of this page covers only those differences.

Fixed Rate

Requesting a quote

Add fixed=true to GET /quotes. Standard and private routing work exactly the same way — types just selects which you get, and omitting it returns both.

Quote fields

Alongside the usual quote fields, a fixed-rate quote adds:

Three deadlines

Fixed rate orders carry three independent time limits. Partners routinely conflate them, so handle each one explicitly:

Creating the order

Identical to a normal swap, except refundAddress is required — omitting it returns 422 REFUND_ADDRESS_REQUIRED_FOR_FIXED_RATE.
refundExtraId is the memo or tag for refundAddress. It applies only when the source chain uses one (XRP, Stellar, TON, Cosmos) — the example above refunds to XRP. Omit it everywhere else.
refundExtraId is not enforced, even on chains that require one. If you omit it on a memo-bearing chain, a refund can land in the exchange’s omnibus account and will need manual recovery. Always send it when the source chain has a memo concept.
The order response adds fixed: true and echoes refundAddress. Everything else — depositAddress, inAmount, expires, status polling — behaves exactly as described in the Standard Swap guide.
The order response does not echo validUntil. Once the order exists the rate is locked, so the only deadline that still matters is expires. Keep the quote’s validUntil on your side if you want to display a countdown.
Fixed rate never silently re-quotes. The rate is bound to the route you were quoted. If anything changes between quote and exchange — the provider loses fixed-rate capability, a token or rate combination is disabled, a leg is excluded — you get FIXED_RATE_QUOTE_EXPIRED rather than a substituted rate.

When no quotes are returned

An empty quotes array is a normal outcome, not an error — a fixed-rate route has to satisfy constraints a floating one does not. This is far more likely on private routing, where every constraint must hold for both hops:
Only about half the CEX partners offer fixed rate, and each is independently toggleable. On a private route both hops must qualify, and the second hop is further restricted to providers that can issue automatic refunds.
Fixed rate carries a separate, lower USD cap than floating rate — applied per hop on a private route. Fixed-rate books are also generally narrower, so a max that works for a floating quote may not for a fixed one.
A rate lock cannot outlive a slow first hop, so private fixed candidates whose first hop is estimated to take too long are dropped.
The bridge token used between the hops can be disabled for the private-fixed combination specifically, without affecting floating private swaps on the same pair.

Reverse Quote

By default, amount is what the user sends and the API computes what they receive. A reverse quote flips this: set amountType=receive and amount becomes what the recipient must receive, with the API computing the required deposit. This is what you want when the amount the recipient receives is the fixed constraint — paying an invoice, settling a fixed-price order, or topping an account up to an exact balance.
Reverse quotes require fixed=true. There is no floating variant — a floating rate moves between quote and settlement, so a guaranteed output is a promise it cannot keep. Requesting amountType=receive without fixed=true returns 422 EXACT_OUT_REQUIRES_FIXED_RATE.

Response changes

The sort defaults flip deliberately. On a reverse quote every route delivers the same amountOut, so routes are ranked by the smallest amountIn — the least the user has to send. If you pass sort explicitly, it is respected in both modes.
Validate the requested output amount against minOut / maxOut, not min / max.

Provider support

Quoting backwards from the output side is something not every CEX partner can do. Combined with the fixed-rate requirement, the eligible provider set is meaningfully smaller than for a plain floating quote — and on a private route both hops must qualify. Expect fewer routes, and handle an empty quotes array the same way — see when no quotes are returned.
Reverse quotes are not available on batch orders. POST /exchanges/multi has no amountType field — see Multi-Swap.

Error Codes

An order that reaches REFUNDED failed after the rate lock was accepted — for example the CEX rejected the transaction. Refund handling depends on the provider: some return funds to refundAddress automatically, others require the user to contact support. Surface the failure to the user either way.

Next Steps

Standard Swap

Fast single-hop CEX swaps without rate lock

Private Swap

Multi-hop privacy swaps via CEX routing

Order Lifecycle

Understand all order statuses

Error Handling

Handle errors and edge cases