Skip to content

Errors & limits

v2 uses the same error envelope and the same codes as v1 — see v1 errors for the full table. This page covers only what behaves differently.

Not an error: no_quote

The one that surprises people. POST /v2/rfq/request returns 200 with status: "no_quote" when nobody would price your trade. It is a normal outcome, not a failure, and it carries a reason explaining which kind: no_makers_online, no_restricted_liquidity, or no_valid_quote (details).

Branch on data.status, not on the HTTP code.

Codes that mean something specific here

HTTPcodeOn v2 this means
400invalid_requestOften "no RFQ corridor for this pair", or the corridor is in BOOK mode. Also both/neither of sellAmount/buyAmount.
403forbiddenEither your key lacks the scope, or your partner isn't allowlisted for the alpha — see Authentication.
404not_foundNo such RFQ for you. Ownership is scoped per partner and per environment, so another key's RFQ is a 404, not a 403.
409conflictYou reported a different transaction hash for an RFQ already submitted or filled. The same hash is idempotent.
429rate_limitedEither the per-key request limit, or the outstanding-RFQ cap below.

The outstanding-RFQ cap

You may hold 4 outstanding RFQs at once. Over that, POST /v2/rfq/request returns 429 with a message naming the cap.

A slot is held for as long as the quote is a live option on a maker's inventory — not just for the duration of the request:

  • A no-quote or an error releases immediately.
  • A firm quote holds its slot until the swap fills or the signed order's deadline passes.
  • Reporting a transaction does not release it. The hash is unverified at that point, so releasing on it would let a caller free slots at will while their orders stayed live.

This is why the cap is small: a solicitation is a free option on real maker inventory, so it's bounded by how much of it you can hold open, not by how fast you can ask.

Rate limits

The per-key request limit is shared with v1 and documented in v1 rate limits. The outstanding-RFQ cap above is additional and independent — you can be well inside your request rate and still be told to wait because you're holding four live quotes.

Timeouts

POST /v2/rfq/request blocks while makers answer, up to the corridor's reply budget (750 ms by default). Set your client timeout comfortably above it — a couple of seconds. A client that times out at 500 ms will abandon requests the venue is about to answer, and each abandoned one still occupies a slot until its quote expires.