Gemini WebSocket API
Version 0.10.7
Machine-readable contract for the production Gemini WebSocket API at `wss://ws.gemini.com`. This specification models the shared JSON request/response envelope, market data streams, authenticated order/balance/position streams (including terminal Prediction Markets settlement details), WebSocket order management methods, and Prediction Markets combo RFQ streams/methods that are documented in the Gemini API docs. The combo RFQ streams and methods are available in production for beta testing. Quoting requires an eligible account with the required capabilities. Symbols may be spot/derivatives symbols such as `btcusd` or prediction market instrument symbols such as `GEMI-BTC05M2606011000-UP`, depending on the product surface.
Channels
Messages
Servers
AsyncAPI Specification
asyncapi: 3.0.0
info:
title: Gemini WebSocket API
version: 0.10.7
description: |
Machine-readable contract for the production Gemini WebSocket API at
`wss://ws.gemini.com`.
This specification models the shared JSON request/response envelope, market
data streams, authenticated order/balance/position streams (including terminal
Prediction Markets settlement details), WebSocket order management methods,
and Prediction Markets combo RFQ streams/methods that
are documented in the Gemini API docs.
The combo RFQ streams and methods are available in production for beta testing.
Quoting requires an eligible account with the required capabilities.
Symbols may be spot/derivatives symbols such as `btcusd` or prediction
market instrument symbols such as `GEMI-BTC05M2606011000-UP`, depending on
the product surface.
contact:
name: Gemini API Support
defaultContentType: application/json
x-gemini-coverage:
legend:
machine-readable: Request, response, or event payload fields are modeled in this spec.
partial: The documented request or event is modeled, but at least one result payload is intentionally broad because the docs do not enumerate its fields.
docs-only: The surface is documented for humans but not modeled in this spec.
streams:
- name: "{symbol}@bookTicker"
status: machine-readable
auth: public
docs: /websocket/streams#book-ticker
- name: "{symbol}@depth5"
status: machine-readable
auth: public
docs: /websocket/streams#l2-partial-depth-streams
- name: "{symbol}@depth10"
status: machine-readable
auth: public
docs: /websocket/streams#l2-partial-depth-streams
- name: "{symbol}@depth20"
status: machine-readable
auth: public
docs: /websocket/streams#l2-partial-depth-streams
- name: "{symbol}@depth5@100ms"
status: machine-readable
auth: public
docs: /websocket/streams#l2-partial-depth-streams
- name: "{symbol}@depth10@100ms"
status: machine-readable
auth: public
docs: /websocket/streams#l2-partial-depth-streams
- name: "{symbol}@depth20@100ms"
status: machine-readable
auth: public
docs: /websocket/streams#l2-partial-depth-streams
- name: "{symbol}@depth"
status: machine-readable
auth: public
docs: /websocket/streams#l2-differential-depth-streams
- name: "{symbol}@depth@100ms"
status: machine-readable
auth: public
docs: /websocket/streams#l2-differential-depth-streams
- name: "{symbol}@trade"
status: machine-readable
auth: public
docs: /websocket/streams#trade-stream
- name: orders@account
status: machine-readable
auth: authenticated
docs: /websocket/streams#order-events
- name: orders@session
status: machine-readable
auth: authenticated
docs: /websocket/streams#order-events
- name: balances@account
status: machine-readable
auth: authenticated
docs: /websocket/streams#balance-updates
- name: balances@account@1s
status: machine-readable
auth: authenticated
docs: /websocket/streams#balance-updates
- name: positions@account
status: machine-readable
auth: authenticated
docs: /prediction-markets/websocket/streams#position-updates
- name: positions@account@1s
status: machine-readable
auth: authenticated
docs: /prediction-markets/websocket/streams#position-updates
- name: contractStatus
status: machine-readable
auth: public
docs: /websocket/streams#contract-status
- name: requestForQuote
status: machine-readable
auth: public
docs: /prediction-markets/combos-rfq/websocket-streams#requestforquote
notes: Combo RFQ WebSocket surface is available in production for beta testing; quoting requires an eligible account with the required capabilities.
- name: requestForQuote@account
status: machine-readable
auth: authenticated
docs: /prediction-markets/combos-rfq/websocket-streams#requestforquoteaccount
notes: Combo RFQ WebSocket surface is available in production for beta testing; quoting requires an eligible account with the required capabilities.
- name: requestForQuote@session
status: machine-readable
auth: authenticated
docs: /prediction-markets/combos-rfq/websocket-streams#requestforquotesession
notes: Combo RFQ WebSocket surface is available in production for beta testing; quoting requires an eligible account with the required capabilities.
methods:
- name: conninfo
status: partial
auth: public
docs: /websocket/playground#method-conninfo
notes: Request envelope is modeled; result fields are not enumerated in the docs.
- name: ping
status: partial
auth: public
docs: /websocket/playground#method-ping
notes: Request envelope is modeled; result fields are not enumerated in the docs.
- name: time
status: partial
auth: public
docs: /websocket/playground#method-time
notes: Request envelope is modeled; result fields are not enumerated in the docs.
- name: SUBSCRIBE
status: machine-readable
auth: conditional
docs: /prediction-markets/websocket/playground#method-subscribe
- name: subscribe
status: machine-readable
auth: conditional
docs: /trading/websocket/playground#method-subscribe
- name: UNSUBSCRIBE
status: machine-readable
auth: conditional
docs: /prediction-markets/websocket/playground#method-unsubscribe
- name: unsubscribe
status: machine-readable
auth: conditional
docs: /trading/websocket/playground#method-unsubscribe
- name: LIST_SUBSCRIPTIONS
status: machine-readable
auth: conditional
docs: /prediction-markets/websocket/playground#method-list_subscriptions
- name: list_subscriptions
status: machine-readable
auth: conditional
docs: /trading/websocket/playground#method-list_subscriptions
- name: depth
status: machine-readable
auth: public
docs: /websocket/playground#method-depth
- name: order.place
status: partial
auth: authenticated
docs: /websocket/playground#method-order.place
notes: Request payload is modeled; rely on `orderUpdate` events for authoritative lifecycle state.
- name: order.cancel
status: partial
auth: authenticated
docs: /websocket/playground#method-order.cancel
notes: Request payload is modeled; rely on `orderUpdate` events for authoritative lifecycle state.
- name: order.cancel_all
status: partial
auth: authenticated
docs: /websocket/playground#method-order.cancel_all
notes: Request payload is modeled; result fields are not enumerated in the docs.
- name: order.cancel_session
status: partial
auth: authenticated
docs: /websocket/playground#method-order.cancel_session
notes: Request payload is modeled; result fields are not enumerated in the docs.
- name: rfq.submit_quote
status: machine-readable
auth: authenticated
docs: /prediction-markets/combos-rfq/quote-methods#rfqsubmit_quote
notes: Combo RFQ WebSocket surface is available in production for beta testing; quoting requires an eligible account with the required capabilities.
- name: rfq.withdraw_quote
status: machine-readable
auth: authenticated
docs: /prediction-markets/combos-rfq/quote-methods#rfqwithdraw_quote
notes: Combo RFQ WebSocket surface is available in production for beta testing; quoting requires an eligible account with the required capabilities.
- name: rfq.confirm_quote
status: machine-readable
auth: authenticated
docs: /prediction-markets/combos-rfq/quote-methods#rfqconfirm_quote
notes: Combo RFQ WebSocket surface is available in production for beta testing; quoting requires an eligible account with the required capabilities.
x-gemini-authentication:
timing: websocket-upgrade
alternatives:
- scheme: geminiApiKeySignature
summary: HMAC-signed, account-scoped Gemini API key headers.
- scheme: geminiOAuthBearer
summary: OAuth 2.0 bearer token in the Authorization header.
notes:
- Authentication, when required, is supplied during the initial WebSocket upgrade; clients cannot authenticate or rotate credentials after the connection opens.
- Browser WebSocket clients cannot send custom upgrade headers for authenticated streams and methods; use a non-browser client or server-side proxy.
- Public streams and utility methods do not require authentication. Account/session streams, order methods, and combo RFQ quote methods require one of the listed authentication alternatives.
servers:
production:
host: ws.gemini.com
protocol: wss
pathname: /
description: Production WebSocket API.
sandbox:
host: ws.sandbox.gemini.com
protocol: wss
pathname: /
description: Sandbox environment.
channels:
connection:
address: /
title: WebSocket connection
description: |
JSON request/response control plane over a single WebSocket connection.
Authentication, when required, is supplied during the WebSocket upgrade.
messages:
conninfoRequest:
$ref: '#/components/messages/ConninfoRequest'
pingRequest:
$ref: '#/components/messages/PingRequest'
timeRequest:
$ref: '#/components/messages/TimeRequest'
subscribeRequest:
$ref: '#/components/messages/SubscribeRequest'
unsubscribeRequest:
$ref: '#/components/messages/UnsubscribeRequest'
listSubscriptionsRequest:
$ref: '#/components/messages/ListSubscriptionsRequest'
depthRequest:
$ref: '#/components/messages/DepthRequest'
orderPlaceRequest:
$ref: '#/components/messages/OrderPlaceRequest'
orderCancelRequest:
$ref: '#/components/messages/OrderCancelRequest'
orderCancelAllRequest:
$ref: '#/components/messages/OrderCancelAllRequest'
orderCancelSessionRequest:
$ref: '#/components/messages/OrderCancelSessionRequest'
rfqSubmitQuoteRequest:
$ref: '#/components/messages/RfqSubmitQuoteRequest'
rfqWithdrawQuoteRequest:
$ref: '#/components/messages/RfqWithdrawQuoteRequest'
rfqConfirmQuoteRequest:
$ref: '#/components/messages/RfqConfirmQuoteRequest'
genericSuccessResponse:
$ref: '#/components/messages/GenericSuccessResponse'
listSubscriptionsResponse:
$ref: '#/components/messages/ListSubscriptionsResponse'
depthResponse:
$ref: '#/components/messages/DepthResponse'
orderActionResponse:
$ref: '#/components/messages/OrderActionResponse'
rfqSubmitQuoteResponse:
$ref: '#/components/messages/RfqSubmitQuoteResponse'
rfqWithdrawQuoteResponse:
$ref: '#/components/messages/RfqWithdrawQuoteResponse'
rfqConfirmQuoteResponse:
$ref: '#/components/messages/RfqConfirmQuoteResponse'
errorResponse:
$ref: '#/components/messages/ErrorResponse'
bookTicker:
address: "{symbol}@bookTicker"
messages:
bookTicker:
$ref: '#/components/messages/BookTicker'
parameters:
symbol:
$ref: '#/components/parameters/symbol'
depth5:
address: "{symbol}@depth5"
messages:
orderBookSnapshot:
$ref: '#/components/messages/OrderBookSnapshot'
parameters:
symbol:
$ref: '#/components/parameters/symbol'
depth10:
address: "{symbol}@depth10"
messages:
orderBookSnapshot:
$ref: '#/components/messages/OrderBookSnapshot'
parameters:
symbol:
$ref: '#/components/parameters/symbol'
depth20:
address: "{symbol}@depth20"
messages:
orderBookSnapshot:
$ref: '#/components/messages/OrderBookSnapshot'
parameters:
symbol:
$ref: '#/components/parameters/symbol'
depth5Fast:
address: "{symbol}@depth5@100ms"
messages:
orderBookSnapshot:
$ref: '#/components/messages/OrderBookSnapshot'
parameters:
symbol:
$ref: '#/components/parameters/symbol'
depth10Fast:
address: "{symbol}@depth10@100ms"
messages:
orderBookSnapshot:
$ref: '#/components/messages/OrderBookSnapshot'
parameters:
symbol:
$ref: '#/components/parameters/symbol'
depth20Fast:
address: "{symbol}@depth20@100ms"
messages:
orderBookSnapshot:
$ref: '#/components/messages/OrderBookSnapshot'
parameters:
symbol:
$ref: '#/components/parameters/symbol'
depth:
address: "{symbol}@depth"
messages:
depthUpdate:
$ref: '#/components/messages/DepthUpdate'
parameters:
symbol:
$ref: '#/components/parameters/symbol'
depthFast:
address: "{symbol}@depth@100ms"
messages:
depthUpdate:
$ref: '#/components/messages/DepthUpdate'
parameters:
symbol:
$ref: '#/components/parameters/symbol'
trade:
address: "{symbol}@trade"
messages:
trade:
$ref: '#/components/messages/Trade'
parameters:
symbol:
$ref: '#/components/parameters/symbol'
ordersAccount:
address: orders@account
messages:
orderUpdate:
$ref: '#/components/messages/OrderUpdate'
ordersSession:
address: orders@session
messages:
orderUpdate:
$ref: '#/components/messages/OrderUpdate'
balancesAccount:
address: balances@account
messages:
balanceUpdate:
$ref: '#/components/messages/BalanceUpdate'
balancesAccountSnapshot:
address: balances@account@1s
messages:
balanceUpdate:
$ref: '#/components/messages/BalanceUpdate'
positionsAccount:
address: positions@account
messages:
positionReport:
$ref: '#/components/messages/PositionReport'
positionsAccountSnapshot:
address: positions@account@1s
messages:
positionReport:
$ref: '#/components/messages/PositionReport'
contractStatus:
address: contractStatus
messages:
contractStatus:
$ref: '#/components/messages/ContractStatus'
requestForQuote:
address: requestForQuote
messages:
requestForQuote:
$ref: '#/components/messages/RfqPublicEvent'
requestForQuoteAccount:
address: requestForQuote@account
messages:
requestForQuote:
$ref: '#/components/messages/RfqPrivateDelivery'
requestForQuoteSession:
address: requestForQuote@session
messages:
requestForQuote:
$ref: '#/components/messages/RfqPrivateDelivery'
operations:
sendRequests:
action: send
channel:
$ref: '#/channels/connection'
x-gemini-auth:
required: conditional
timing: websocket-upgrade
notes: Public utility methods, public stream subscriptions, and the depth request work without authentication. Order management, combo RFQ quote methods, and subscriptions to authenticated stream names require an already-authenticated WebSocket connection; see each coverage entry's `auth` value.
messages:
- $ref: '#/channels/connection/messages/conninfoRequest'
- $ref: '#/channels/connection/messages/pingRequest'
- $ref: '#/channels/connection/messages/timeRequest'
- $ref: '#/channels/connection/messages/subscribeRequest'
- $ref: '#/channels/connection/messages/unsubscribeRequest'
- $ref: '#/channels/connection/messages/listSubscriptionsRequest'
- $ref: '#/channels/connection/messages/depthRequest'
- $ref: '#/channels/connection/messages/orderPlaceRequest'
- $ref: '#/channels/connection/messages/orderCancelRequest'
- $ref: '#/channels/connection/messages/orderCancelAllRequest'
- $ref: '#/channels/connection/messages/orderCancelSessionRequest'
- $ref: '#/channels/connection/messages/rfqSubmitQuoteRequest'
- $ref: '#/channels/connection/messages/rfqWithdrawQuoteRequest'
- $ref: '#/channels/connection/messages/rfqConfirmQuoteRequest'
receiveResponses:
action: receive
channel:
$ref: '#/channels/connection'
x-gemini-auth:
required: conditional
timing: websocket-upgrade
notes: The response envelope is shared by public and authenticated methods. Authentication requirements are modeled on authenticated request messages and private stream receive operations.
messages:
- $ref: '#/channels/connection/messages/genericSuccessResponse'
- $ref: '#/channels/connection/messages/listSubscriptionsResponse'
- $ref: '#/channels/connection/messages/depthResponse'
- $ref: '#/channels/connection/messages/orderActionResponse'
- $ref: '#/channels/connection/messages/rfqSubmitQuoteResponse'
- $ref: '#/channels/connection/messages/rfqWithdrawQuoteResponse'
- $ref: '#/channels/connection/messages/rfqConfirmQuoteResponse'
- $ref: '#/channels/connection/messages/errorResponse'
receiveBookTicker:
action: receive
channel:
$ref: '#/channels/bookTicker'
messages:
- $ref: '#/channels/bookTicker/messages/bookTicker'
receivePartialDepth:
action: receive
channel:
$ref: '#/channels/depth10'
messages:
- $ref: '#/channels/depth10/messages/orderBookSnapshot'
receivePartialDepth5:
action: receive
channel:
$ref: '#/channels/depth5'
messages:
- $ref: '#/channels/depth5/messages/orderBookSnapshot'
receivePartialDepth20:
action: receive
channel:
$ref: '#/channels/depth20'
messages:
- $ref: '#/channels/depth20/messages/orderBookSnapshot'
receivePartialDepth5Fast:
action: receive
channel:
$ref: '#/channels/depth5Fast'
messages:
- $ref: '#/channels/depth5Fast/messages/orderBookSnapshot'
receivePartialDepth10Fast:
action: receive
channel:
$ref: '#/channels/depth10Fast'
messages:
- $ref: '#/channels/depth10Fast/messages/orderBookSnapshot'
receivePartialDepth20Fast:
action: receive
channel:
$ref: '#/channels/depth20Fast'
messages:
- $ref: '#/channels/depth20Fast/messages/orderBookSnapshot'
receiveDifferentialDepth:
action: receive
channel:
$ref: '#/channels/depthFast'
messages:
- $ref: '#/channels/depthFast/messages/depthUpdate'
receiveDifferentialDepthStandard:
action: receive
channel:
$ref: '#/channels/depth'
messages:
- $ref: '#/channels/depth/messages/depthUpdate'
receiveTrades:
action: receive
channel:
$ref: '#/channels/trade'
messages:
- $ref: '#/channels/trade/messages/trade'
receiveOrderUpdates:
action: receive
channel:
$ref: '#/channels/ordersAccount'
security:
- $ref: '#/components/securitySchemes/geminiApiKeySignature'
- $ref: '#/components/securitySchemes/geminiOAuthBearer'
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
messages:
- $ref: '#/channels/ordersAccount/messages/orderUpdate'
receiveSessionOrderUpdates:
action: receive
channel:
$ref: '#/channels/ordersSession'
security:
- $ref: '#/components/securitySchemes/geminiApiKeySignature'
- $ref: '#/components/securitySchemes/geminiOAuthBearer'
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
messages:
- $ref: '#/channels/ordersSession/messages/orderUpdate'
receiveBalanceUpdates:
action: receive
channel:
$ref: '#/channels/balancesAccount'
security:
- $ref: '#/components/securitySchemes/geminiApiKeySignature'
- $ref: '#/components/securitySchemes/geminiOAuthBearer'
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
messages:
- $ref: '#/channels/balancesAccount/messages/balanceUpdate'
receiveBalanceSnapshots:
action: receive
channel:
$ref: '#/channels/balancesAccountSnapshot'
security:
- $ref: '#/components/securitySchemes/geminiApiKeySignature'
- $ref: '#/components/securitySchemes/geminiOAuthBearer'
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
messages:
- $ref: '#/channels/balancesAccountSnapshot/messages/balanceUpdate'
receivePositionReports:
action: receive
channel:
$ref: '#/channels/positionsAccount'
security:
- $ref: '#/components/securitySchemes/geminiApiKeySignature'
- $ref: '#/components/securitySchemes/geminiOAuthBearer'
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
messages:
- $ref: '#/channels/positionsAccount/messages/positionReport'
receivePositionReportSnapshots:
action: receive
channel:
$ref: '#/channels/positionsAccountSnapshot'
security:
- $ref: '#/components/securitySchemes/geminiApiKeySignature'
- $ref: '#/components/securitySchemes/geminiOAuthBearer'
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
messages:
- $ref: '#/channels/positionsAccountSnapshot/messages/positionReport'
receiveContractStatus:
action: receive
channel:
$ref: '#/channels/contractStatus'
messages:
- $ref: '#/channels/contractStatus/messages/contractStatus'
receiveRfqPublicEvents:
action: receive
channel:
$ref: '#/channels/requestForQuote'
messages:
- $ref: '#/channels/requestForQuote/messages/requestForQuote'
receiveRfqPrivateDeliveries:
action: receive
channel:
$ref: '#/channels/requestForQuoteAccount'
security:
- $ref: '#/components/securitySchemes/geminiApiKeySignature'
- $ref: '#/components/securitySchemes/geminiOAuthBearer'
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
capabilities: [view_orders]
messages:
- $ref: '#/channels/requestForQuoteAccount/messages/requestForQuote'
receiveRfqSessionDeliveries:
action: receive
channel:
$ref: '#/channels/requestForQuoteSession'
security:
- $ref: '#/components/securitySchemes/geminiApiKeySignature'
- $ref: '#/components/securitySchemes/geminiOAuthBearer'
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
capabilities: [view_orders]
messages:
- $ref: '#/channels/requestForQuoteSession/messages/requestForQuote'
components:
securitySchemes:
geminiApiKeySignature:
type: httpApiKey
name: X-GEMINI-APIKEY
in: header
description: |
Account-scoped Gemini API key supplied during the WebSocket upgrade.
This scheme represents the full Gemini HMAC-signed header set. A valid
handshake also includes `X-GEMINI-NONCE`, `X-GEMINI-PAYLOAD`, and
`X-GEMINI-SIGNATURE`; `X-GEMINI-PAYLOAD` is `base64(string(nonce))`,
and `X-GEMINI-SIGNATURE` is `hex(hmac_sha384(payload, api_secret))`.
Only account-scoped keys with time-based nonces are accepted; master or
group keys are rejected with HTTP 401.
x-gemini-required-headers:
- X-GEMINI-APIKEY
- X-GEMINI-NONCE
- X-GEMINI-PAYLOAD
- X-GEMINI-SIGNATURE
x-gemini-key-scope: account
x-gemini-nonce: time-based
x-gemini-signature-algorithm: HMAC-SHA384
geminiOAuthBearer:
type: http
scheme: bearer
bearerFormat: Gemini OAuth 2.0 access token
description: |
OAuth 2.0 access token supplied as `Authorization: Bearer <access_token>`
during the WebSocket upgrade. The token must include scopes/capabilities
for the private streams or methods used on the connection.
parameters:
symbol:
description: |
Exchange symbol. For trading markets this may be a symbol like `btcusd`.
For prediction markets this is an instrument symbol such as
`GEMI-BTC05M2606011000-UP`.
messages:
ConninfoRequest:
name: ConninfoRequest
title: conninfo request
payload:
$ref: '#/components/schemas/ConninfoRequest'
PingRequest:
name: PingRequest
title: ping request
payload:
$ref: '#/components/schemas/PingRequest'
TimeRequest:
name: TimeRequest
title: time request
payload:
$ref: '#/components/schemas/TimeRequest'
SubscribeRequest:
name: SubscribeRequest
title: subscribe request
payload:
$ref: '#/components/schemas/SubscribeRequest'
UnsubscribeRequest:
name: UnsubscribeRequest
title: unsubscribe request
payload:
$ref: '#/components/schemas/UnsubscribeRequest'
ListSubscriptionsRequest:
name: ListSubscriptionsRequest
title: list subscriptions request
payload:
$ref: '#/components/schemas/ListSubscriptionsRequest'
DepthRequest:
name: DepthRequest
title: depth request
payload:
$ref: '#/components/schemas/DepthRequest'
OrderPlaceRequest:
name: OrderPlaceRequest
title: order.place request
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
roles: [Trader]
payload:
$ref: '#/components/schemas/OrderPlaceRequest'
OrderCancelRequest:
name: OrderCancelRequest
title: order.cancel request
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
roles: [Trader]
payload:
$ref: '#/components/schemas/OrderCancelRequest'
OrderCancelAllRequest:
name: OrderCancelAllRequest
title: order.cancel_all request
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
roles: [Trader]
payload:
$ref: '#/components/schemas/OrderCancelAllRequest'
OrderCancelSessionRequest:
name: OrderCancelSessionRequest
title: order.cancel_session request
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
roles: [Trader]
payload:
$ref: '#/components/schemas/OrderCancelSessionRequest'
RfqSubmitQuoteRequest:
name: RfqSubmitQuoteRequest
title: rfq.submit_quote request
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
capabilities: [place_orders]
payload:
$ref: '#/components/schemas/RfqSubmitQuoteRequest'
RfqWithdrawQuoteRequest:
name: RfqWithdrawQuoteRequest
title: rfq.withdraw_quote request
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
capabilities: [cancel_orders]
payload:
$ref: '#/components/schemas/RfqWithdrawQuoteRequest'
RfqConfirmQuoteRequest:
name: RfqConfirmQuoteRequest
title: rfq.confirm_quote request
x-gemini-auth:
required: true
timing: websocket-upgrade
alternatives: [geminiApiKeySignature, geminiOAuthBearer]
capabilities: [place_orders]
payload:
$ref: '#/components/schemas/RfqConfirmQuoteRequest'
GenericSuccessResponse:
name: GenericSuccessResponse
title: generic success response
payload:
$ref: '#/components/schemas/GenericSuccessResponse'
ListSubscriptionsResponse:
name: ListSubscriptionsResponse
title: list subscriptions response
payload:
$ref: '#/components/schemas/ListSubscriptionsResponse'
DepthResponse:
name: DepthResponse
title: depth response
payload:
$ref: '#/components/schemas/DepthResponse'
OrderActionResponse:
name: OrderActionResponse
title: order action response
payload:
$ref: '#/components/schemas/OrderActionResponse'
RfqSubmitQuoteResponse:
name: RfqSubmitQuoteResponse
title: rfq.submit_quote response
payload:
$ref: '#/components/schemas/RfqSubmitQuoteResponse'
RfqWithdrawQuoteResponse:
name: RfqWithdrawQuoteResponse
title: rfq.withdraw_quote response
payload:
$ref: '#/components/schemas/RfqWithdrawQuoteResponse'
RfqConfirmQuoteResponse:
name: RfqConfirmQuoteResponse
title: rfq.confirm_quote response
payload:
$ref: '#/components/schemas/RfqConfirmQuoteResponse'
ErrorResponse:
name: ErrorResponse
title: error response
payload:
$ref: '#/components/schemas/ErrorResponse'
BookTicker:
name: BookTicker
title: book ticker
payload:
$ref: '#/components/schemas/BookTicker'
OrderBookSnapshot:
name: OrderBookSnapshot
title: order book snapshot
payload:
$ref: '#/components/schemas/OrderBookSnapshot'
DepthUpdate:
name: DepthUpdate
title: L2 differential depth update
payload:
$ref: '#/components/schemas/DepthUpdate'
Trade:
name: Trade
title: trade
payload:
$ref: '#/components/schemas/Trade'
OrderUpdate:
name: OrderUpdate
title: order update
payload:
$ref: '#/components/schemas/OrderUpdate'
BalanceUpdate:
name: BalanceUpdate
title: balance update
payload:
$ref: '#/components/schemas/BalanceUpdate'
PositionReport:
name: PositionReport
title: position report
payload:
$ref: '#/components/schemas/PositionReport'
ContractStatus:
name: ContractStatus
title: contract status
payload:
$ref: '#/components/schemas/ContractStatus'
RfqPublicEvent:
name: RfqPublicEvent
title: public request-for-quote event
payload:
$ref: '#/components/schemas/RfqPublicEvent'
RfqPrivateDelivery:
name: RfqPrivateDelivery
title: private request-for-quote delivery
payload:
$ref: '#/components/schemas/RfqPrivateDelivery'
schemas:
CorrelationId:
description: Client-chosen id, echoed on the matching response.
oneOf:
- type: string
- type: integer
NanosecondTimestamp:
type: integer
format: int64
description: |
Unix timestamp in nanoseconds. Values exceed JavaScript's safe integer
range; JavaScript clients that need exact values should parse
losslessly.
MillisecondTimestamp:
type: integer
format: int64
description: Unix timestamp in milliseconds.
DecimalString:
type: string
description: Decimal value encoded as a string.
PriceLevel:
type: array
description: |
`[price, quantity]` tuple; both values are decimal strings. A quantity
of zero removes that price level in differential depth updates.
items:
type: string
minItems: 2
maxItems: 2
RequestBase:
type: object
required: [id, method]
properties:
id:
$ref: '#/components/schemas/CorrelationId'
method:
type: string
additionalProperties: true
ConninfoRequest:
allOf:
- $ref: '#/components/schemas/RequestBase'
- type: object
required: [method]
properties:
method:
type: string
const: conninfo
params:
type: object
additionalProperties: true
PingRequest:
allOf:
- $ref: '#/components/schemas/RequestBase'
- type: object
required: [method]
properties:
method:
type: string
const: ping
params:
type: object
additionalProperties: true
TimeRequest:
allOf:
- $ref: '#/components/schemas/RequestBase'
- type: object
required: [method]
properties:
method:
type: string
const: time
params:
type: object
ad
# --- truncated at 32 KB (53 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/gemini-trust/refs/heads/main/asyncapi/gemini-trust-websocket-asyncapi.yml
Work with this as data
Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
curl "https://apis.io/api/v1/asyncapis/gemini-trust-websocket-asyncapi"
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.