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)

Quote Methods

The maker quote actions are WebSocket request/response methods on the same authenticated connection that carries your streams. Requests and responses use the standard envelope documented in Message Format:

Code
{ "id": 1, "method": "rfq.submit_quote", "params": { ... } }

All three methods require an authenticated connection. The account identity on every call is the authenticated account — there is no account parameter.

Each method also requires a specific trading capability on your session: rfq.submit_quote and rfq.confirm_quote require place_orders, while rfq.withdraw_quote requires cancel_orders. A call from a session missing the required capability is rejected with -1004 (403). A key implication: a session scoped to place_orders but not cancel_orders can submit and confirm, but its rfq.withdraw_quote calls will fail with -1004.

rfq.submit_quote

Submit a quote on an open combo request-for-quote auction, discovered on the requestForQuote stream.

Quotes are immutable and limited to one per account per RFQ — they cannot be revised, and withdrawing does not free the slot. The quoting window is sealed: submission and withdrawal are not delivered to the requester or other makers while the auction is open. After close, the requester receives only the selected quote, keyed by quoteId and never attributed to your account; losing quotes remain undisclosed.

Parameters

NameTypeRequiredDescription
rfqIdstringYesThe request-for-quote to quote on, as broadcast on the requestForQuote stream.
pricestringYesSingle-sided bid per contract. Must be strictly between 0 and 1 and lie on the venue price tick; the default tick is 0.001.
quantitystringYesMaximum quantity this quote covers, in whole contracts. It must cover the complete request for the quote to be eligible at close.
validUntilintegerNoClose-time eligibility deadline as a Unix timestamp (ms). If supplied, it must be in the future. The quote remains eligible when validUntil >= w; a value before w expires it at close. If omitted, the service sets it to w. It is not checked after winner selection.

Example

Code
{ "id": 1, "method": "rfq.submit_quote", "params": { "rfqId": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "price": "0.55", "quantity": "1000", "validUntil": 1780000060000 } }

Response:

Code
{ "id": 1, "status": 200, "result": { "rfqId": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "quoteId": "01J9Z2K7Q2N8M4P6R8T0V2W4X6" } }

Keep the returned quoteId: acceptances on the requestForQuote@account stream and the withdraw/confirm methods are keyed by it.

At close, quote validity is evaluated against w, not the later time at which close processing happens. Eligible quotes are ranked by lowest price and then earliest submission. The venue checks maker collateral freshly in that order and falls through to the next candidate when necessary. A requester limit price, when present, is enforced during selection but is not exposed on the maker discovery stream.

Errors

CodeStatusMeaning
-1002401Unauthorized — authentication required.
-1013400Invalid parameters — check rfqId, price, quantity, or validUntil.
-2010400Quote rejected — RFQ not found or no longer open, price off the tick grid, or a quote from this account already exists.

rfq.withdraw_quote

Withdraw your own quote while the auction is still open and strictly before w. Withdrawal is final for that RFQ: a withdrawn quote is excluded from winner selection, cannot be reinstated, and does not free the one-quote-per-account slot.

The withdrawal is not delivered to the requester or other makers.

Parameters

NameTypeRequiredDescription
rfqIdstringYesThe request-for-quote the quote was submitted on.
quoteIdstringYesThe quote to withdraw, as returned by rfq.submit_quote.

Example

Code
{ "id": 2, "method": "rfq.withdraw_quote", "params": { "rfqId": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "quoteId": "01J9Z2K7Q2N8M4P6R8T0V2W4X6" } }

Response:

Code
{ "id": 2, "status": 200, "result": { "rfqId": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "quoteId": "01J9Z2K7Q2N8M4P6R8T0V2W4X6" } }

Errors

CodeStatusMeaning
-1002401Unauthorized — authentication required.
-1013400Invalid parameters — check rfqId and quoteId.
-2010400Withdraw rejected — RFQ or quote not found, not owned by this account, or the auction already closed.

rfq.confirm_quote

The winning maker's last-look. When the requester accepts your quote, an ACCEPTED delivery arrives on the requestForQuote@account stream. The 1-second deadline begins when the RFQ enters CONFIRMING, so respond immediately:

  • confirm: true — authorize execution and proceed to settlement.
  • confirm: false — decline and fail the RFQ.

An omitted confirm is rejected; it is never treated as an implicit decline.

Both confirmation and explicit decline must complete strictly before the deadline. If neither does, the RFQ fails automatically.

Parameters

NameTypeRequiredDescription
rfqIdstringYesThe request-for-quote awaiting your confirmation.
quoteIdstringYesYour winning quote, as delivered on the requestForQuote@account stream.
confirmbooleanYestrue confirms the trade and proceeds to settlement; false declines and fails the request-for-quote.

Example

Code
{ "id": 3, "method": "rfq.confirm_quote", "params": { "rfqId": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "quoteId": "01J9Z2K7Q2N8M4P6R8T0V2W4X6", "confirm": true } }

Response:

Code
{ "id": 3, "status": 200, "result": { "rfqId": "01J9Z3K7Q2N8M4P6R8T0V2W4X6", "quoteId": "01J9Z2K7Q2N8M4P6R8T0V2W4X6", "confirmed": true } }

Errors

CodeStatusMeaning
-1002401Unauthorized — authentication required.
-1013400Invalid parameters — check rfqId, quoteId, and confirm.
-2010400Confirm rejected — RFQ not awaiting this account's confirmation, or the quote is not the recorded winner.

Shared error behavior

  • -1004 (403) — missing required capability (place_orders for submit/confirm, cancel_orders for withdraw).
  • -1003 (429) — rate limited. Standard request-weight limits apply; see the Introduction.
  • -1101 (503) — the combo RFQ service is temporarily unavailable. Safe to retry with backoff.
  • -1000 (500) — internal error.

See also

  • WebSocket Streams — the discovery and delivery streams these methods pair with.
  • Maker Integration — the full workflow.
  • Message Format — request/response envelope and general error codes.
Last modified on July 21, 2026
WebSocket StreamsMaker Integration
On this page
  • rfq.submit_quote
    • Parameters
    • Example
    • Errors
  • rfq.withdraw_quote
    • Parameters
    • Example
    • Errors
  • rfq.confirm_quote
    • Parameters
    • Example
    • Errors
  • Shared error behavior
  • See also
JSON
JSON
JSON
JSON
JSON
JSON
JSON