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, capped at the RFQdeadline. Send it when your pricing has a real window; an explicit value 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 both 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. Budget one ledger
round-trip of latency (~1–2 s on DevNet) for that.
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 | Deadline passed · an explicit validUntil > deadline · quote already settling · WALLET_MAKER_UNSUPPORTED |
Replace
Posting a second quote on the same RFQ replaces the first: the old
quote turns revoked (you'll see quote.status) and its proposal pair is
cancelled on the ledger. There is no partial update — send the full body.
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.