Overview
Fixed rate swaps lock the exchange rate at the moment you request a quote. The user receives exactly the quotedamountOut 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
Addfixed=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, exceptrefundAddress 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.
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 emptyquotes 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:
The provider supports and has fixed rate enabled
The provider supports and has fixed rate enabled
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.
The amount is under the fixed-rate USD ceiling
The amount is under the fixed-rate USD ceiling
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.Private routing only: the first hop is fast enough
Private routing only: the first hop is fast enough
A rate lock cannot outlive a slow first hop, so private fixed candidates whose first hop is estimated to take too long are dropped.
Private routing only: the intermediate token is enabled
Private routing only: the intermediate token is enabled
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.
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.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 emptyquotes 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