GeminiGemini
SandboxGet API key
  • Crypto Trading
  • Prediction Markets
Changelog
Gemini Crypto Exchange LogoGemini Crypto Exchange Logo

© 2026 Gemini Space Station, Inc.

Getting StartedAPI Specifications
Maker and Taker Incentives
    Market Maker ProgramMaker Rebate ProgramLiquidity Rewards ProgramTaker Rewards Program
WebSocket
    IntroductionAuthenticationMessage Format
    Streams
      Book TickerL2 Partial DepthL2 Differential DepthTrade StreamOrder EventsBalance UpdatesPosition UpdatesContract Status
    Playground
      OverviewconninfopingtimeSUBSCRIBEUNSUBSCRIBELIST_SUBSCRIPTIONSdepthorder.placeorder.cancelorder.cancel_allorder.cancel_session
REST APIs
    Combos
    Events
    Terms
    Order Management
    Positions
    Rewards
Combo Contracts
    Overview
Combos Request-for-Quote (RFQ)
    OverviewWebSocket StreamsQuote MethodsMaker IntegrationExamples
Tickers
    OverviewCryptoSportsCommoditiesWeather
Schemas
Combos Request-for-Quote (RFQ)

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
{ "e": "requestForQuote", "E": 1780000000000, "r": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "l": [ { "c": "123456", "o": "YES" }, { "c": "123789", "o": "NO" } ], "n": "50000.00", "S": "OPEN", "w": 1780000001000, "x": 1780000120000, "c": 1780000000000 }

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
{ "id": 1, "method": "rfq.submit_quote", "params": { "rfqId": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "price": "0.55", "quantity": "100000" } }
Code
{ "id": 1, "status": 200, "result": { "rfqId": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "quoteId": "01J9Z2K7Q2N8M4P6R8T0V2W4X6" } }

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
{ "e": "requestForQuote", "i": "b16097e9-3d7f-5910-9820-eeedf51a8be3", "E": 1780000001100, "r": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "x": "CLOSED", "S": "PENDING_ACCEPTANCE", "q": "01J9Z2K7Q2N8M4P6R8T0V2W4X6", "p": "0.55", "sz": "100000", "qs": "ACTIVE", "vu": 1780000001000 }

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
{ "e": "requestForQuote", "i": "88bfe6b3-be05-56c6-bd1b-51b25fafb27a", "E": 1780000004100, "r": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "x": "ACCEPTED", "S": "CONFIRMING", "q": "01J9Z2K7Q2N8M4P6R8T0V2W4X6", "p": "0.55", "sz": "100000", "qs": "ACTIVE", "vu": 1780000001000 }

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
{ "id": 2, "method": "rfq.confirm_quote", "params": { "rfqId": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "quoteId": "01J9Z2K7Q2N8M4P6R8T0V2W4X6", "confirm": true } }
Code
{ "id": 2, "status": 200, "result": { "rfqId": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "quoteId": "01J9Z2K7Q2N8M4P6R8T0V2W4X6", "confirmed": true } }

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
{ "e": "requestForQuote", "E": 1780000004500, "r": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "l": [ { "c": "123456", "o": "YES" }, { "c": "123789", "o": "NO" } ], "n": "50000.00", "f": "90909", "S": "FINALIZED", "c": 1780000000000 }

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
{ "id": 3, "status": 400, "error": { "code": -2010, "msg": "RFQ is not in a valid state for this operation" } }

See also

  • Quote Methods — full parameter and error tables.
  • Maker Integration — the workflow these messages belong to.
Last modified on July 21, 2026
Maker IntegrationTickers
On this page
  • 1. Discovery
  • 2. Submit a quote
  • 3. Winner disclosed to the requester
  • 4. Acceptance arrives
  • 5. Last-look confirm
  • 6. Finalization
  • Error example: quoting a closed auction
  • See also
JSON
JSON
JSON
JSON
JSON
JSON
JSON
JSON
JSON