Examples
A complete two-leg auction from the winning maker's perspective. All timestamps are milliseconds; all prices and quantities are string decimals.
1. Discovery
A taker opens a $50,000 notional RFQ on a two-leg combo. The anonymous broadcast arrives on requestForQuote:
Code
The quoting window closes at w — 1 second after creation.
2. Submit a quote
The maker prices the combo at 0.55 per contract and will cover up to 100,000 contracts:
Code
Code
The quote is immutable — there is no revise. If the maker needs out before the window closes, rfq.withdraw_quote pulls it — permanently, for this RFQ (the one-quote-per-account slot is not freed).
The submission response is private to the maker. Neither submission nor withdrawal produces a customer stream delivery while the RFQ is open.
Because the maker omitted validUntil, the service assigns w (1780000001000). That makes the quote eligible at the logical close; validUntil is not checked again in later lifecycle stages.
3. Winner disclosed to the requester
At or after w, the venue selects the best eligible quote. This example closes 100 milliseconds after w. The requester receives one private CLOSED delivery containing only that quote; losing quotes remain undisclosed:
Code
The transition to PENDING_ACCEPTANCE starts the requester's 5-second decision window. Notice that vu is already at the logical auction close; that does not prevent post-close acceptance.
4. Acceptance arrives
In this example, the requester accepts 3 seconds after the CLOSED transition. The maker's requestForQuote@account stream delivers:
Code
At $50,000 notional and a price of 0.55, the fill will be floor(50000 / 0.55) = 90,909 contracts.
The ACCEPTED transition and matching quoteId identify the winner. The quote remains ACTIVE until execution finalizes, when its status becomes WON.
5. Last-look confirm
The transition to CONFIRMING starts the winning maker's 1-second deadline to confirm or decline. The maker should act immediately on the ACCEPTED delivery.
Code
Code
Confirming places the maker's collateral hold, authorizes execution, and hands the trade to settlement (S moves to FINALIZING).
Declining instead ("confirm": false) fails the RFQ: the requester is notified, and no trade occurs.
6. Finalization
The public feed (and the maker's private stream) reports the terminal state, now carrying the filled quantity:
Code
The resulting combo position and balance changes flow through the standard authenticated streams — see the Stream Reference.
:::caution Maker fill can differ from the requester fill
f: "90909" is the requester's full-size execution quantity; it does not guarantee that the selected maker filled 90,909 contracts. The maker's post-only order executes first on the normal order book and can fill partially against other participants, while the requester can obtain some or all of its fill from other resting liquidity. If requester execution fails after a maker partial fill, the completed maker fill remains even though the RFQ ends in FAILED; only the unfilled maker-order remainder is cancelled.
:::
Error example: quoting a closed auction
Submitting after the window closes:
Code
See also
- Quote Methods — full parameter and error tables.
- Maker Integration — the workflow these messages belong to.