The API may change until launch. Every change is listed in the Changelog.
When to requote
- To change how the quote executes. Pick another trading wallet or venue account (
source), another destination for the output (deliverTo), another corridor the quote offered (corridor), or a different price protection (priceProtectionBps). A corridor is the pair of chains a cross-chain quote moves between, from the chain you sell on to the chain you buy on; a quote lists the other corridors its venue offers incorridors. - To get an executable price. An indicative quote is the venue’s price, not a commitment. A requote asks the venue for a quote you can order. For a desk whose card reads
next.kind: "requote", this is how you get its firm price. - To refresh a price that expired. An executable quote can be ordered only until its
expiresAt. After that, requote it for a new price from the same venue.
The request
POST /api/v1/quotes, the same endpoint as a search, with a different body:
These four fields are the whole body. The pair, the amount, the side and the filters come from the original quote and cannot change: sending any of them with
requote is refused with 400 REQUOTE_FIELDS_CONFLICT. For a different pair or amount, search again.
Response (shortened)
- One new quote with its own
id, whoserequoteOfnames the quote you requoted. Order the new id. - A JSON reply, never a stream, even if you send
Accept: text/event-stream. - The original stays orderable until its own
expiresAt. Requoting does not cancel it. Each quote can still be ordered only once. - Only that venue is asked. For a route with several legs, every venue on the route is asked for that same route. If the venue declines, you get a named refusal, and TetraFi never substitutes another venue.
Change the price protection
A non-firm executable quote carriesminOut, the least it may deliver. priceProtectionBps sets how far below the quoted amount that floor sits. Here a requote at 50 basis points lowers minOut from 4.99182 to 4.98181 on the same quoted amount:
Quote times
You can requote a quote until its
retainUntil: 10 minutes after it expired (its expiresAt, or staleAfter for an indicative quote). Before then, ordering the lapsed quote answers 410 QUOTE_EXPIRED with next.kind: "requote". After it, a requote or an order answers 410 REQUOTE_WINDOW_CLOSED with next.kind: "search": search again with a pair body.
Firm and non-firm quotes
firm and expiresAt say whether the venue is bound to its price:
next says what you do with the quote: order, fund, or requote (preflight, sign and transact appear only on Advanced quotes, which are not open yet). When it is requote, next.needs lists what the new quote needs from you, such as a trading wallet to name. Some desks’ indicative quotes read next.kind: "order": you order them with a minimum receive instead, as Orders explains.
Refresh an expired quote
Ordering a quote after itsexpiresAt is refused with 410 QUOTE_EXPIRED and nothing is sent. The refusal’s next is {"kind": "requote"}, so requote the same id to get a fresh price from that venue:
Output
Refusals
A refused requote answers the standard error body:error is the code, message a sentence you can show, and details or next where present. For a 429, wait the Retry-After header’s seconds before asking again.