Quoting
Submitting, replacing and revoking quotes — and the invariants that 4xx you
Submit
curl -X POST -H "X-API-Key: $API_KEY" -H "content-type: application/json" \
-d '{"rfqId": "…", "price": "97300.0"}' \
$API_URL/maker/quotesprice— the amount of the pair's quote instrument per 1 unit of the base instrument, positive decimal string. Rememberdirectionis the taker's side: on aSELLRFQ the taker sells base, so you are buying — quote below your reference; onBUYyou are selling — quote above.validUntil— optional. Omitted, the desk uses its own quote lifetime (30 seconds unless the desk configures another), capped at the RFQdeadline. Send it when your pricing has a real window; an explicit value in the past or past the deadline is a 409, since silently shortening a commitment you stated on purpose would be worse than the error.
The 200 response is your QuoteDto plus actions — but the quote is not
live yet. It arrives unanchored: sign the hashes in actions and submit
them in one POST /tx/execute (the sign queue), then
wait for quote.anchored before the taker can accept it — typically a couple
of seconds. A quote left unsigned dies at its validUntil.
What can go wrong
| Status | Why |
|---|---|
| 400 | Body failed validation (bad decimal, malformed timestamp) |
| 403 | Your party is not invited to this RFQ |
| 404 | RFQ unknown or already closed |
| 409 | INSUFFICIENT_FUNDS — your free holdings cannot fund the quote (the leg you send, plus the fee in the quote asset) · DUST_TRADE — a leg rounds to zero · deadline passed · an explicit validUntil in the past or past the deadline · your previous quote is already settling |
| 503 | The ledger is unavailable or busy — retry with backoff |
Replace
Posting a second quote on the same RFQ replaces the first: the old
quote turns revoked (you'll see quote.status) and its allocations are
cancelled on the ledger before the new ones are funded, so the released
capital pays for the replacement. There is no partial update — send the full
body. A replacement that fails leaves you with no quote on the RFQ (see
Quotes live on the ledger).
Revoke
curl -X DELETE -H "X-API-Key: $API_KEY" $API_URL/maker/quotes/$QUOTE_ID204 on success. 403 if the quote is not yours, 404 if it is gone, and 409 once the quote is accepted and settling — from that point your commitment is locked in.