GeminiGemini
Demo environmentGet API key
  • Overview
  • Crypto Trading
  • Prediction Markets
  • Perpetuals
  • Stocks
  • API Reference
  • SDKs & Tools
Changelog
Gemini logoGemini logo

© 2026 Gemini Space Station, Inc.

Overview
Core Concepts
    Events, contracts, and outcomesCombo contracts
Market Data
    OverviewFetching Markets
    Ticker formats
      OverviewCryptoSportsSports Market TaxonomyCommoditiesWeather
Trading
    QuickstartOrder lifecycle and settlement
    Full REST reference
      Combo RFQ
      Events
      Volume
      Terms
      Order Management
      Positions
      Rewards
    WebSocket APIs
      OverviewAuthenticationMessage format
      Streams
        Book tickerL2 partial depthL2 differential depthTrade streamOrder eventsBalance updatesPosition updatesContract statusPrediction
      Utility
      Subscriptions
      L2 Data
      Order management
      Combo RFQ
        OverviewWebSocket streamsQuote methodsMaker integrationExamples
Market Makers
    Maker Fee-Free Trading PromoTaker Rewards ProgramMaker Rebate ProgramLiquidity Rewards ProgramMarket Maker Program
Resources
    SchemasDemo environmentRate limitsErrors
Combo RFQ

WebSocket Streams

Prediction markets

Combo RFQ streams extend the core WebSocket protocol for Prediction Markets.

The combo RFQ WebSocket streams documented on this page are available in production for beta testing. Quoting requires an eligible account with the capabilities described in Quote Methods.

Combo RFQ uses three streams:

StreamAuthUse for
requestForQuotePublicDiscovering RFQ auctions (anonymous broadcast).
requestForQuote@accountAuthenticated (view_orders)Your private deliveries: the selected quote after your RFQ closes, acceptances of your quotes, and confirm/decline outcomes. Each delivery has a durable event ID for deduplication.
requestForQuote@sessionAuthenticated (view_orders)Same account-scoped deliveries as @account; an alternate subscription form. Mutually exclusive with @account.

requestForQuote

Anonymous, real-time feed of combo request-for-quote auctions. When a taker opens an RFQ, this feed broadcasts the auction so makers can choose to quote it. Only the auction's existence and parameters are broadcast: the requester's identity, the maker accounts, and the individual quotes are never included. After close, only the selected quote is delivered privately to the requester over an authenticated stream.

Auth: public. Anyone can subscribe.

Try ItrequestForQuote
disconnected

Message shape

Code
{ "e": "requestForQuote", "E": 1780000000000, "r": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "s": "GEMI-CMB-260306-A1B2C3D4E5F6G7H8-CMB", "l": [ { "c": "123456", "o": "YES", "s": "GEMI-XRPUSD-260828" }, { "c": "123789", "o": "NO" } ], "n": "50000.00", "S": "OPEN", "w": 1780000001000, "x": 1780000120000, "c": 1780000000000 }
FieldTypeDescription
estringEvent type — always requestForQuote.
EnumberEvent timestamp (milliseconds).
rstringrfqId — unique ULID for this request-for-quote. Pass it to rfq.submit_quote.
sstringThe combo's deterministic instrument symbol, when available. Use it to place a CLOB order on the combo; this activates its book on demand.
larrayThe contracts that make up the combo, in a fixed order. Each: c = CMS contract id, o = the outcome the combo takes on that contract (YES / NO), s = the leg's own instrument symbol, when available.
nstringRequested size as a USD notional, if sized that way. Omitted otherwise; mutually exclusive with q.
qstringRequested size in contracts, if sized that way. Omitted otherwise; mutually exclusive with n. The RFQ quantity grid can be whole contracts or 0.01 fractional contracts.
fstringExecution quantity calculated when the requester accepts. It is present on later lifecycle events and can appear on FAILED; only S: "FINALIZED" confirms successful execution.
SstringLifecycle state (OPEN / PENDING_ACCEPTANCE / CONFIRMING / FINALIZING / FINALIZED / CANCELLED / EXPIRED / FAILED). OPEN is live and quotable.
wnumberWhen the 1-second quoting window closes (milliseconds), 1 second after RFQ creation. Omitted when unset.
xnumberHard expiry by which the auction must finalize (milliseconds). Omitted when unset.
cnumberWhen the request-for-quote was created (milliseconds). Omitted when unset.

Exactly one of n (notional) and q (requested quantity) is present per event. The eventual fill is floored to the RFQ's quantity grid: whole contracts by default, or 0.01 fractional contracts when configured. An explicitly quantity-sized RFQ is already on that grid.

The public stream emits RFQ-existence transitions: creation, cancellation, close, expiry, finalization, and failure. It does not emit the requester acceptance or maker confirmation transitions, and it never carries quote contents.

Replay on reconnect

requestForQuote is an event stream, not a state snapshot. Auctions broadcast while you were disconnected are not replayed. Auctions are short-lived (the quoting window is carried in w), so treat a reconnect as starting fresh.

requestForQuote@account

Private combo-RFQ deliveries for the authenticated account.

  • As a requester: receive only the selected quote after your RFQ closes, followed by the winning maker's confirm/decline and the terminal outcome.
  • As a maker: receive the requester's acceptance of your quote and the terminal outcome. Respond to ACCEPTED with rfq.confirm_quote immediately; the 1-second deadline starts with the CONFIRMING transition, not delivery processing.

The quoting window is sealed: quote submissions and withdrawals produce no customer delivery while the RFQ is OPEN. At close, the requester receives one CLOSED delivery containing only the selected quote. Losing quotes remain undisclosed, and the requester is not told which maker submitted the selected quote (it is keyed by quoteId only).

The service does not assign session-level or RFQ-level participant pseudonyms. r identifies the RFQ and q identifies either the requested quantity or a quote, depending on the stream; neither identifies a participant. Counterparty account identities are not disclosed through these streams, including after execution.

Auth: required, with the view_orders capability. See Authentication. Mutually exclusive with requestForQuote@session.

Message shape

Code
{ "e": "requestForQuote", "i": "b16097e9-3d7f-5910-9820-eeedf51a8be3", "E": 1780000001000, "r": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "x": "CLOSED", "S": "PENDING_ACCEPTANCE", "q": "01J9Z2K7Q2N8M4P6R8T0V2W4X6", "p": "0.55", "sz": "100", "qs": "ACTIVE", "vu": 1780000060000 }
FieldTypeDescription
estringEvent type — always requestForQuote.
istringDurable lifecycle-event UUID. Use it as an idempotency key when a transition is redelivered.
EnumberEvent timestamp (milliseconds).
rstringrfqId this delivery concerns.
xstringWhich customer-visible lifecycle transition this delivery reports (CLOSED / ACCEPTED / CONFIRMED / DECLINED / FINALIZED / FAILED). CLOSED privately discloses the selected quote to the requester.
SstringLifecycle state of the RFQ after this transition (same vocabulary as the public feed).
qstringquoteId this delivery concerns; the requester accepts by this id. Absent on RFQ-level deliveries.
pstringThe quote's single-sided bid per contract. Absent on RFQ-level deliveries.
szstringQuote quantity in contracts. Absent on RFQ-level deliveries.
qsstringQuote status (ACTIVE / WITHDRAWN / EXPIRED / WON / LOST). Absent on RFQ-level deliveries.
vunumberQuote close-time eligibility deadline (milliseconds). A selected quote had vu >= w; when the maker omitted validUntil, vu equals w. It is not checked again after selection. Absent on RFQ-level deliveries.

:::note Field keys x and q differ between the two streams On the public requestForQuote feed, x is the numeric hard-expiry timestamp and q is the requested contract quantity. On the authenticated deliveries, x is the string transition name and q is the quoteId. Parse per stream. :::

Redelivery and deduplication

Authenticated lifecycle delivery is at least once. A transition can therefore arrive more than once, with the same i. Persist or otherwise deduplicate on i; do not use E, r, or x alone as the idempotency key.

requestForQuote@session

Identical account-scoped deliveries to requestForQuote@account, provided for subscription symmetry with the order streams. It does not filter RFQ events to the session that opened or quoted the RFQ. Subscribe to one or the other, not both — they are mutually exclusive on a connection.

Connection notes

  • Same endpoint as all other Predictions streams: wss://ws.gemini.com.
  • Same subscribe message shape and connection parameters as the Introduction.
  • The maker quote actions ride the same connection as request/response methods — see Quote Methods and the general Message Format.

See also

  • Quote Methods — submit, withdraw, confirm.
  • Maker Integration — the full workflow tying streams and methods together.
  • Standard Stream Reference — order, position, and balance streams for the resulting trades.
OverviewQuote methods
On this page
  • requestForQuote
    • Message shape
    • Replay on reconnect
  • requestForQuote@account
    • Message shape
    • Redelivery and deduplication
  • requestForQuote@session
  • Connection notes
  • See also
JSON
JSON