Skip to main content
A requote asks the venue of a quote you already hold for a new price. You send the quote’s id instead of a new search, and you get back one new quote from that venue. Every other venue is left alone.
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 in corridors.
  • 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)
What you get back:
  • One new quote with its own id, whose requoteOf names 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.
A requote is a live quote request, so it counts toward the limit of one live quote request every 3 seconds.

Change the price protection

A non-firm executable quote carries minOut, 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 its expiresAt 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.

In the app

On the Trade page, an expired quote card offers to request it again, a desk’s indicative card offers Get firm quote, and changing price protection in Review offers Requote and execute: each sends this same requote.