Alpaca Market Data Streaming API

Real-time market data over WebSocket. Stocks stream at wss://stream.data.alpaca.markets/v2/{feed} (iex, sip, delayed_sip, test) and crypto at wss://stream.data.alpaca.markets/v1beta3/crypto/us. Authenticate with an auth message, then subscribe to trades, quotes, bars, dailyBars, updatedBars, statuses, lulds, and (crypto) orderbooks per symbol or with a wildcard. This is a documented public wss:// API.

AsyncAPI Specification

alpaca-markets-asyncapi.yml Raw ↑
asyncapi: '2.6.0'
id: 'urn:markets:alpaca:market-data:websocket'
info:
  title: Alpaca Market Data Streaming (WebSocket)
  version: '1.0.0'
  description: |
    AsyncAPI 2.6 description of Alpaca's **real-time market data WebSocket API**.

    Unlike many providers, Alpaca publishes a genuine, documented public
    WebSocket (`wss://`) surface for streaming market data. Clients open a
    WebSocket connection to a feed-specific endpoint, send an `auth` control
    message, then send `subscribe` messages to select channels per symbol (or
    with a `*` wildcard). The server pushes a continuous stream of market data
    messages until the client unsubscribes or disconnects.

    Endpoints (documented at
    https://docs.alpaca.markets/docs/streaming-market-data and
    https://docs.alpaca.markets/docs/real-time-crypto-pricing-data):

    - Stocks: `wss://stream.data.alpaca.markets/v2/{feed}` where `{feed}` is one
      of `iex`, `sip`, `delayed_sip`, or `test`. The `test` feed streams fake
      symbols (for example `FAKEPACA`) 24/7 for development. On the free Basic
      plan the real-time stock feed is `iex`; the full-market `sip` feed
      requires Algo Trader Plus.
    - Crypto: `wss://stream.data.alpaca.markets/v1beta3/crypto/us`. The
      v1beta3 crypto feed distributes data from Alpaca and Kraken and adds an
      `orderbooks` channel (Level 2 book snapshots and updates).
    - Options: `wss://stream.data.alpaca.markets/v1beta1/{feed}`
      (`indicative` or `opra`).
    - Sandbox mirror: `wss://stream.data.sandbox.alpaca.markets/...`.

    Messages are exchanged as JSON arrays of message objects (msgpack is also
    supported). Each message object carries a `T` field identifying its type:
    control messages (`success`, `error`, `subscription`) and data messages
    (`t` trade, `q` quote, `b` minute bar, `d` daily bar, `u` updated bar,
    `s` trading status, `l` LULD, `c` correction, `x` cancel error, and
    `o` crypto orderbook).

    A separate Trading API account/order WebSocket exists at
    `wss://{paper-}api.alpaca.markets/stream` (listen then receive
    `trade_updates`); it is noted in the review but not modeled in this
    document, which focuses on the market-data stream.
  contact:
    name: API Evangelist
    email: kin@apievangelist.com
    url: https://apievangelist.com
  license:
    name: API documentation - Alpaca Terms of Service
    url: https://alpaca.markets/terms
  x-transport-notes:
    transport: WebSocket
    protocol: wss
    direction: bidirectional (client sends control messages, server pushes data)
    mediaType: application/json (msgpack also supported)
    stocksEndpoint: 'wss://stream.data.alpaca.markets/v2/{feed}'
    cryptoEndpoint: 'wss://stream.data.alpaca.markets/v1beta3/crypto/us'
    optionsEndpoint: 'wss://stream.data.alpaca.markets/v1beta1/{feed}'
    sandboxEndpoint: 'wss://stream.data.sandbox.alpaca.markets'
    source: https://docs.alpaca.markets/docs/streaming-market-data
defaultContentType: application/json
servers:
  stocks:
    url: stream.data.alpaca.markets/v2/{feed}
    protocol: wss
    description: |
      Real-time US equities WebSocket. `{feed}` selects the data source:
      `iex` (free Basic), `sip` (full market, Algo Trader Plus),
      `delayed_sip` (15-minute delayed SIP), or `test` (fake symbols, 24/7).
    variables:
      feed:
        enum:
          - iex
          - sip
          - delayed_sip
          - test
        default: iex
        description: The stock data feed.
    security:
      - apiKeyAuth: []
  crypto:
    url: stream.data.alpaca.markets/v1beta3/crypto/us
    protocol: wss
    description: |
      Real-time crypto WebSocket (v1beta3), distributing Alpaca and Kraken
      data. Adds the `orderbooks` channel for Level 2 market depth.
    security:
      - apiKeyAuth: []
channels:
  /v2/{feed}:
    description: |
      Stock market data stream. After connecting, the server sends a
      `[{"T":"success","msg":"connected"}]` control message. The client then
      sends an `auth` message, receives
      `[{"T":"success","msg":"authenticated"}]`, and sends `subscribe`
      messages. The server thereafter pushes arrays of data messages (trades,
      quotes, bars, etc.) for the subscribed symbols.
    parameters:
      feed:
        description: The stock data feed (iex, sip, delayed_sip, test).
        schema:
          type: string
    publish:
      operationId: sendStockControlMessage
      summary: Send a control message (auth, subscribe, unsubscribe).
      description: |
        Client-to-server control frames. The first frame after connecting must
        be `auth`; subsequent frames add or remove channel subscriptions.
      message:
        oneOf:
          - $ref: '#/components/messages/AuthMessage'
          - $ref: '#/components/messages/SubscribeMessage'
          - $ref: '#/components/messages/UnsubscribeMessage'
    subscribe:
      operationId: receiveStockDataMessages
      summary: Receive streamed market data and control acknowledgements.
      description: |
        Server-to-client frames. Each frame is a JSON array of one or more
        message objects; each object's `T` field identifies its type.
      message:
        oneOf:
          - $ref: '#/components/messages/SuccessMessage'
          - $ref: '#/components/messages/ErrorMessage'
          - $ref: '#/components/messages/SubscriptionMessage'
          - $ref: '#/components/messages/TradeMessage'
          - $ref: '#/components/messages/QuoteMessage'
          - $ref: '#/components/messages/BarMessage'
          - $ref: '#/components/messages/TradingStatusMessage'
  /v1beta3/crypto/us:
    description: |
      Crypto market data stream. Same auth/subscribe handshake as the stock
      stream, plus an `orderbooks` channel carrying Level 2 book snapshots
      (first message per symbol) and incremental updates.
    publish:
      operationId: sendCryptoControlMessage
      summary: Send a crypto control message (auth, subscribe, unsubscribe).
      description: Client-to-server control frames for the crypto stream.
      message:
        oneOf:
          - $ref: '#/components/messages/AuthMessage'
          - $ref: '#/components/messages/SubscribeMessage'
          - $ref: '#/components/messages/UnsubscribeMessage'
    subscribe:
      operationId: receiveCryptoDataMessages
      summary: Receive streamed crypto market data.
      description: Server-to-client frames including trades, quotes, bars, and orderbooks.
      message:
        oneOf:
          - $ref: '#/components/messages/SuccessMessage'
          - $ref: '#/components/messages/ErrorMessage'
          - $ref: '#/components/messages/SubscriptionMessage'
          - $ref: '#/components/messages/TradeMessage'
          - $ref: '#/components/messages/QuoteMessage'
          - $ref: '#/components/messages/BarMessage'
          - $ref: '#/components/messages/OrderbookMessage'
components:
  securitySchemes:
    apiKeyAuth:
      type: userPassword
      description: |
        Alpaca API key ID and secret, supplied in the WebSocket `auth`
        control message body as `{"action":"auth","key":"<KEY_ID>","secret":"<SECRET>"}`.
        For OAuth-based apps, send `"key":"oauth"` and `"secret":"<ACCESS_TOKEN>"`.
  messages:
    AuthMessage:
      name: AuthMessage
      title: Authenticate
      summary: First client message; authenticates the connection.
      contentType: application/json
      payload:
        type: object
        required:
          - action
          - key
          - secret
        properties:
          action:
            type: string
            enum:
              - auth
          key:
            type: string
            description: API key ID (or the literal "oauth" for OAuth access tokens).
          secret:
            type: string
            description: API secret key (or the OAuth access token).
      examples:
        - name: auth
          payload:
            action: auth
            key: PK00000000000000000
            secret: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    SubscribeMessage:
      name: SubscribeMessage
      title: Subscribe
      summary: Subscribe to one or more channels per symbol or with a wildcard.
      contentType: application/json
      payload:
        type: object
        required:
          - action
        properties:
          action:
            type: string
            enum:
              - subscribe
          trades:
            type: array
            items:
              type: string
            description: Symbols to receive trades for. Use ["*"] for all symbols.
          quotes:
            type: array
            items:
              type: string
            description: Symbols to receive quotes for.
          bars:
            type: array
            items:
              type: string
            description: Symbols to receive minute bars for.
          dailyBars:
            type: array
            items:
              type: string
            description: Symbols to receive daily bars for.
          updatedBars:
            type: array
            items:
              type: string
            description: Symbols to receive updated (late/corrected) bars for.
          statuses:
            type: array
            items:
              type: string
            description: Symbols to receive trading status events for.
          orderbooks:
            type: array
            items:
              type: string
            description: Crypto pairs to receive Level 2 orderbook data for (crypto stream only).
      examples:
        - name: subscribeStocks
          summary: Subscribe to AAPL trades and quotes, all-symbol bars
          payload:
            action: subscribe
            trades:
              - AAPL
            quotes:
              - AAPL
              - TSLA
            bars:
              - '*'
        - name: subscribeCryptoOrderbook
          summary: Subscribe to BTC/USD orderbook
          payload:
            action: subscribe
            orderbooks:
              - BTC/USD
    UnsubscribeMessage:
      name: UnsubscribeMessage
      title: Unsubscribe
      summary: Remove channel subscriptions.
      contentType: application/json
      payload:
        type: object
        required:
          - action
        properties:
          action:
            type: string
            enum:
              - unsubscribe
          trades:
            type: array
            items:
              type: string
          quotes:
            type: array
            items:
              type: string
          bars:
            type: array
            items:
              type: string
    SuccessMessage:
      name: SuccessMessage
      title: Success control frame
      summary: Server acknowledgement (connected / authenticated).
      contentType: application/json
      payload:
        type: object
        properties:
          T:
            type: string
            enum:
              - success
          msg:
            type: string
            description: For example "connected" or "authenticated".
      examples:
        - name: authenticated
          payload:
            T: success
            msg: authenticated
    ErrorMessage:
      name: ErrorMessage
      title: Error control frame
      summary: Server error (bad auth, invalid subscription, connection limit, etc.).
      contentType: application/json
      payload:
        type: object
        properties:
          T:
            type: string
            enum:
              - error
          code:
            type: integer
            description: Alpaca stream error code (for example 402 not authenticated, 406 connection limit exceeded).
          msg:
            type: string
            description: Human-readable error message.
      examples:
        - name: notAuthenticated
          payload:
            T: error
            code: 402
            msg: auth failed
    SubscriptionMessage:
      name: SubscriptionMessage
      title: Subscription control frame
      summary: Server echo of the current active subscriptions after a subscribe/unsubscribe.
      contentType: application/json
      payload:
        type: object
        properties:
          T:
            type: string
            enum:
              - subscription
          trades:
            type: array
            items:
              type: string
          quotes:
            type: array
            items:
              type: string
          bars:
            type: array
            items:
              type: string
      examples:
        - name: current
          payload:
            T: subscription
            trades:
              - AAPL
            quotes:
              - AAPL
              - TSLA
            bars:
              - '*'
    TradeMessage:
      name: TradeMessage
      title: Trade (T=t)
      summary: A single executed trade.
      contentType: application/json
      payload:
        type: object
        properties:
          T:
            type: string
            enum:
              - t
          S:
            type: string
            description: Symbol.
          i:
            type: integer
            description: Trade ID.
          p:
            type: number
            description: Trade price.
          s:
            type: integer
            description: Trade size.
          t:
            type: string
            format: date-time
            description: RFC-3339 timestamp with nanoseconds.
          x:
            type: string
            description: Exchange code.
          c:
            type: array
            items:
              type: string
            description: Trade condition flags.
          z:
            type: string
            description: Tape (A, B, or C) for stocks.
      examples:
        - name: trade
          payload:
            T: t
            S: AAPL
            i: 12345
            p: 195.62
            s: 100
            t: '2026-07-11T14:30:00.123456789Z'
            x: V
            c:
              - '@'
            z: C
    QuoteMessage:
      name: QuoteMessage
      title: Quote (T=q)
      summary: A national best bid/offer (or crypto) quote.
      contentType: application/json
      payload:
        type: object
        properties:
          T:
            type: string
            enum:
              - q
          S:
            type: string
            description: Symbol.
          bp:
            type: number
            description: Bid price.
          bs:
            type: integer
            description: Bid size.
          ap:
            type: number
            description: Ask price.
          as:
            type: integer
            description: Ask size.
          t:
            type: string
            format: date-time
            description: RFC-3339 timestamp.
      examples:
        - name: quote
          payload:
            T: q
            S: AAPL
            bp: 195.6
            bs: 3
            ap: 195.63
            as: 2
            t: '2026-07-11T14:30:00.123456789Z'
    BarMessage:
      name: BarMessage
      title: Bar (T=b/d/u)
      summary: An OHLCV aggregate bar (minute, daily, or updated).
      contentType: application/json
      payload:
        type: object
        properties:
          T:
            type: string
            enum:
              - b
              - d
              - u
            description: b minute bar, d daily bar, u updated bar.
          S:
            type: string
            description: Symbol.
          o:
            type: number
            description: Open price.
          h:
            type: number
            description: High price.
          l:
            type: number
            description: Low price.
          c:
            type: number
            description: Close price.
          v:
            type: integer
            description: Volume.
          t:
            type: string
            format: date-time
            description: Bar timestamp.
      examples:
        - name: minuteBar
          payload:
            T: b
            S: AAPL
            o: 195.5
            h: 195.7
            l: 195.4
            c: 195.62
            v: 12500
            t: '2026-07-11T14:30:00Z'
    TradingStatusMessage:
      name: TradingStatusMessage
      title: Trading status (T=s)
      summary: A trading halt/resume or LULD status change for a symbol.
      contentType: application/json
      payload:
        type: object
        properties:
          T:
            type: string
            enum:
              - s
          S:
            type: string
            description: Symbol.
          sc:
            type: string
            description: Status code.
          sm:
            type: string
            description: Status message.
          t:
            type: string
            format: date-time
            description: Timestamp.
    OrderbookMessage:
      name: OrderbookMessage
      title: Crypto orderbook (T=o)
      summary: A Level 2 orderbook snapshot or update (crypto stream only).
      contentType: application/json
      payload:
        type: object
        properties:
          T:
            type: string
            enum:
              - o
          S:
            type: string
            description: Crypto pair, for example BTC/USD.
          t:
            type: string
            format: date-time
            description: Timestamp.
          b:
            type: array
            description: Bid levels. First message per symbol is a full snapshot; subsequent messages are updates.
            items:
              type: object
              properties:
                p:
                  type: number
                  description: Price level.
                s:
                  type: number
                  description: Size at the level (0 removes the level).
          a:
            type: array
            description: Ask levels.
            items:
              type: object
              properties:
                p:
                  type: number
                  description: Price level.
                s:
                  type: number
                  description: Size at the level (0 removes the level).
          r:
            type: boolean
            description: Reset flag - true when this message is a full snapshot.
      examples:
        - name: orderbookSnapshot
          payload:
            T: o
            S: BTC/USD
            t: '2026-07-11T14:30:00.123456789Z'
            b:
              - p: 61000.5
                s: 0.25
            a:
              - p: 61002.0
                s: 0.4
            r: true
Where this information came from

This is an independent, third-party profile of Alpaca Market Data Streaming API, published by API Evangelist. We do not operate, host, resell, or support these APIs, and we are not affiliated with or endorsed by the company unless stated above. Everything here is built from publicly available information — the company's own site, developer portal, documentation, public repositories, and the specifications it publishes for public use. Nothing is obtained by breaching a system, defeating an access control, or using credentials.

The Kin Score and Agent Readiness rating are independently calculated assessments of a company's public API artifacts, scored against a published rubric. They are not certifications, endorsements, security assessments, or audits.

Corrections, re-scores, and removal are free — no partnership or purchase required, and you do not need to justify the request. A removed company is recorded as unrated, never scored zero for having asked. Acknowledgement within one business day; removal within two.

info@apievangelist.com · Read the full data-sourcing policy →
On a security or compliance team? Put security in the subject line and you will get a person, not a form — we will tell you exactly which public URLs this profile was built from.