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: '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.