Appearance
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
| HTTP | code | On v2 this means |
|---|---|---|
| 400 | invalid_request | Often "no RFQ corridor for this pair", or the corridor is in BOOK mode. Also both/neither of sellAmount/buyAmount. |
| 403 | forbidden | Either your key lacks the scope, or your partner isn't allowlisted for the alpha — see Authentication. |
| 404 | not_found | No such RFQ for you. Ownership is scoped per partner and per environment, so another key's RFQ is a 404, not a 403. |
| 409 | conflict | You reported a different transaction hash for an RFQ already submitted or filled. The same hash is idempotent. |
| 429 | rate_limited | Either 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.