> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rails.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Quotes Stream

> Top-of-book bid/ask prices with implied volatility per contract.

This stream is available on the `optionsQuotes` subscription. It provides top-of-book bid/ask prices with implied volatility for each contract, scoped by **underlying** and **expiration date**, like the [Contracts Stream](/latest/options/websocket-api/contracts-stream).

#### Snapshot vs. Delta

The `emitOptionsQuotes` request returns a snapshot via `optionsQuotes`. After the snapshot, `optionsQuotesDelta` messages stream top-of-book changes per contract.


## AsyncAPI

````yaml latest/options/asyncapi/options-ws.yaml quotesStream
id: quotesStream
title: Quotes Stream
description: >
  Available on the `optionsQuotes` subscription. Top-of-book bid/ask prices with
  implied volatility per contract, scoped by underlying and expiration date.
servers:
  - id: sandbox
    protocol: wss
    host: ws.sandbox.rails.xyz
    bindings: []
    variables: []
address: >-
  ?product=options&market={market}&expiration={expiration}&strike={strike}&type={type}&subscriptions=optionsQuotes
parameters:
  - id: market
    jsonSchema:
      type: string
      description: A specific market (e.g. `BTC-USDT`) or `ALL`.
      default: BTC-USDT
    description: A specific market (e.g. `BTC-USDT`) or `ALL`.
    type: string
    required: true
    deprecated: false
  - id: expiration
    jsonSchema:
      type: string
      description: >-
        Contract expiration, e.g. `24JUN26`. Requires `market`; omit to match
        every expiration.
      default: 24JUN26
    description: >-
      Contract expiration, e.g. `24JUN26`. Requires `market`; omit to match
      every expiration.
    type: string
    required: true
    deprecated: false
  - id: strike
    jsonSchema:
      type: string
      description: >-
        Strike price, e.g. `62000`. Requires `expiration`; omit to match every
        strike.
      default: '62000'
    description: >-
      Strike price, e.g. `62000`. Requires `expiration`; omit to match every
      strike.
    type: string
    required: true
    deprecated: false
  - id: type
    jsonSchema:
      type: string
      description: '`C` (call) or `P` (put). Requires `strike`; omit to match both.'
      default: C
    description: '`C` (call) or `P` (put). Requires `strike`; omit to match both.'
    type: string
    required: true
    deprecated: false
bindings: []
operations:
  - &ref_2
    id: emitOptionsQuotes
    title: Emit options quotes
    description: Request top-of-book quotes for an underlying and expiration date.
    type: receive
    messages:
      - &ref_5
        id: emitOptionsQuotesRequest
        contentType: application/json
        payload:
          - name: Emit Options Quotes
            type: object
            properties:
              - name: message
                type: string
                description: Always `emitOptionsQuotes`.
                required: true
              - name: content
                type: object
                required: true
                properties:
                  - name: clientRequestId
                    type: string
                    description: Client-generated UUID for correlation
                    required: false
                  - name: underlying
                    type: string
                    description: >-
                      Underlying asset (bare symbol, not paired with a quote
                      currency), e.g. `BTC`
                    required: true
                  - name: expirationDate
                    type: string
                    description: Expiration date, `YYYY-MM-DD`
                    required: true
                  - name: pageSize
                    type: integer
                    description: Page size for paginated results
                    required: false
                  - name: pageToken
                    type: string
                    description: Cursor for the next page
                    required: false
        headers: []
        jsonPayloadSchema:
          type: object
          properties:
            message:
              type: string
              description: Always `emitOptionsQuotes`.
              x-parser-schema-id: <anonymous-schema-268>
            content:
              type: object
              properties:
                clientRequestId:
                  type: string
                  format: uuid
                  description: Client-generated UUID for correlation
                  x-parser-schema-id: <anonymous-schema-270>
                underlying:
                  type: string
                  description: >-
                    Underlying asset (bare symbol, not paired with a quote
                    currency), e.g. `BTC`
                  x-parser-schema-id: <anonymous-schema-271>
                expirationDate:
                  type: string
                  description: Expiration date, `YYYY-MM-DD`
                  x-parser-schema-id: <anonymous-schema-272>
                pageSize:
                  type: integer
                  description: Page size for paginated results
                  x-parser-schema-id: <anonymous-schema-273>
                pageToken:
                  type: string
                  description: Cursor for the next page
                  x-parser-schema-id: <anonymous-schema-274>
              required:
                - underlying
                - expirationDate
              x-parser-schema-id: <anonymous-schema-269>
          required:
            - message
            - content
          x-parser-schema-id: <anonymous-schema-267>
        title: Emit Options Quotes
        example: |-
          {
            "message": "emitOptionsQuotes",
            "content": {
              "clientRequestId": "4cc68b60-ed2d-42aa-a21e-cb5486f8fd1a",
              "underlying": "BTC",
              "expirationDate": "2026-06-19"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: emitOptionsQuotesRequest
    bindings: []
    extensions: &ref_0
      - id: x-parser-unique-object-id
        value: quotesStream
  - &ref_3
    id: optionsQuotesSnapshot
    title: Options quotes snapshot
    description: Response to `emitOptionsQuotes`.
    type: send
    messages:
      - &ref_6
        id: optionsQuotesResponse
        contentType: application/json
        payload:
          - name: Quotes Snapshot
            description: Response to `emitOptionsQuotes`.
            type: object
            properties:
              - name: resultType
                type: string
                description: Always `optionsQuotes`.
                required: true
              - name: data
                type: object
                required: true
                properties:
                  - name: quotes
                    type: array
                    description: Top-of-book per contract
                    required: true
                    properties:
                      - name: contract
                        type: string
                        description: Contract name
                        required: true
                      - name: bestBid
                        type: string
                        description: Best bid price; omitted if the bid side is empty
                        required: false
                      - name: bestBidQty
                        type: string
                        description: Best bid size
                        required: false
                      - name: bestBidIV
                        type: string
                        description: Implied volatility at the best bid
                        required: false
                      - name: bestAsk
                        type: string
                        description: Best ask price; omitted if the ask side is empty
                        required: false
                      - name: bestAskQty
                        type: string
                        description: Best ask size
                        required: false
                      - name: bestAskIV
                        type: string
                        description: Implied volatility at the best ask
                        required: false
                      - name: ts
                        type: integer
                        description: Timestamp (ms since epoch)
                        required: true
                  - name: statusCode
                    type: integer
                    description: Always `200`.
                    required: true
                  - name: clientRequestId
                    type: string
                    description: Client-generated UUID for correlation
                    required: false
        headers: []
        jsonPayloadSchema:
          type: object
          properties:
            resultType:
              type: string
              description: Always `optionsQuotes`.
              x-parser-schema-id: <anonymous-schema-276>
            data:
              type: object
              properties:
                quotes:
                  type: array
                  description: Top-of-book per contract
                  items: &ref_1
                    type: object
                    properties:
                      contract:
                        type: string
                        description: Contract name
                        x-parser-schema-id: <anonymous-schema-279>
                      bestBid:
                        type: string
                        description: Best bid price; omitted if the bid side is empty
                        x-parser-schema-id: <anonymous-schema-280>
                      bestBidQty:
                        type: string
                        description: Best bid size
                        x-parser-schema-id: <anonymous-schema-281>
                      bestBidIV:
                        type: string
                        description: Implied volatility at the best bid
                        x-parser-schema-id: <anonymous-schema-282>
                      bestAsk:
                        type: string
                        description: Best ask price; omitted if the ask side is empty
                        x-parser-schema-id: <anonymous-schema-283>
                      bestAskQty:
                        type: string
                        description: Best ask size
                        x-parser-schema-id: <anonymous-schema-284>
                      bestAskIV:
                        type: string
                        description: Implied volatility at the best ask
                        x-parser-schema-id: <anonymous-schema-285>
                      ts:
                        type: integer
                        description: Timestamp (ms since epoch)
                        x-parser-schema-id: <anonymous-schema-286>
                    required:
                      - contract
                      - ts
                    x-parser-schema-id: Quote
                  x-parser-schema-id: <anonymous-schema-278>
                statusCode:
                  type: integer
                  description: Always `200`.
                  x-parser-schema-id: <anonymous-schema-287>
                clientRequestId:
                  type: string
                  description: Client-generated UUID for correlation
                  x-parser-schema-id: <anonymous-schema-288>
              required:
                - quotes
                - statusCode
              x-parser-schema-id: <anonymous-schema-277>
          required:
            - resultType
            - data
          x-parser-schema-id: <anonymous-schema-275>
        title: Quotes Snapshot
        description: Response to `emitOptionsQuotes`.
        example: |-
          {
            "resultType": "optionsQuotes",
            "data": {
              "quotes": [
                {
                  "contract": "BTC-24JUN26-62000-C",
                  "bestBid": "1840.00",
                  "bestBidQty": "5",
                  "bestBidIV": "0.54",
                  "bestAsk": "1861.00",
                  "bestAskQty": "4",
                  "bestAskIV": "0.56",
                  "ts": 1767762810250
                }
              ],
              "statusCode": 200,
              "clientRequestId": "4cc68b60-ed2d-42aa-a21e-cb5486f8fd1a"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: optionsQuotesResponse
    bindings: []
    extensions: *ref_0
  - &ref_4
    id: optionsQuotesUpdate
    title: Options quotes update
    description: Pushed whenever the top-of-book changes for a contract.
    type: send
    messages:
      - &ref_7
        id: optionsQuotesDelta
        contentType: application/json
        payload:
          - name: Quote Delta
            description: Pushed whenever the top-of-book changes for a contract.
            type: object
            properties:
              - name: resultType
                type: string
                description: Always `optionsQuotesDelta`.
                required: true
              - name: data
                type: object
                required: true
                properties:
                  - name: contract
                    type: string
                    description: Contract name
                    required: true
                  - name: bestBid
                    type: string
                    description: Best bid price; omitted if the bid side is empty
                    required: false
                  - name: bestBidQty
                    type: string
                    description: Best bid size
                    required: false
                  - name: bestBidIV
                    type: string
                    description: Implied volatility at the best bid
                    required: false
                  - name: bestAsk
                    type: string
                    description: Best ask price; omitted if the ask side is empty
                    required: false
                  - name: bestAskQty
                    type: string
                    description: Best ask size
                    required: false
                  - name: bestAskIV
                    type: string
                    description: Implied volatility at the best ask
                    required: false
                  - name: ts
                    type: integer
                    description: Timestamp (ms since epoch)
                    required: true
        headers: []
        jsonPayloadSchema:
          type: object
          properties:
            resultType:
              type: string
              description: Always `optionsQuotesDelta`.
              x-parser-schema-id: <anonymous-schema-290>
            data: *ref_1
          required:
            - resultType
            - data
          x-parser-schema-id: <anonymous-schema-289>
        title: Quote Delta
        description: Pushed whenever the top-of-book changes for a contract.
        example: |-
          {
            "resultType": "optionsQuotesDelta",
            "data": {
              "contract": "BTC-24JUN26-62000-C",
              "bestBid": "1841.00",
              "bestBidQty": "6",
              "bestBidIV": "0.541",
              "bestAsk": "1860.00",
              "bestAskQty": "3",
              "bestAskIV": "0.559",
              "ts": 1767762820000
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: optionsQuotesDelta
    bindings: []
    extensions: *ref_0
sendOperations:
  - *ref_2
receiveOperations:
  - *ref_3
  - *ref_4
sendMessages:
  - *ref_5
receiveMessages:
  - *ref_6
  - *ref_7
extensions:
  - id: x-parser-unique-object-id
    value: quotesStream
securitySchemes:
  - id: wsAuth
    name: Sec-WebSocket-Protocol
    type: httpApiKey
    description: Supply as `authorization#<JWT>` during the WebSocket handshake.
    in: header
    extensions: []

````