Hold a socket open and get each subscribed ticker's freshly-computed row the moment the minute data-refresh turns it over. An update frame carries the same record as GET /v2/tickers/{ticker}. Per-minute during US market hours (4 AM–8 PM ET), equities and ETFs; the feed is quiet when the market is closed.
Caps are per ACCOUNT, not per API key. Concurrent distinct tickers are pooled across every live connection your account holds, so issuing additional API keys does not grant additional capacity. Two connections subscribed to the same symbol cost one slot. Unsubscribing or disconnecting frees slots immediately — it's a live gauge, not a quota.
Authenticate with Authorization: Bearer at the handshake, or send an auth frame as the first message. Check current consumption with GET /v2/stream/usage.
Plan access
Paid plans (Hobby and above). Hobby 10 · Pro 100 · Scale 1,000 · Enterprise unlimited.
Auth
API key. Send Authorization: Bearer at the handshake, or a first-message auth frame.
Cadence
One update per subscribed ticker per minute turnover. Not a raw trade tape.
Server messages
authed
Key accepted. Carries your resolved plan.
subscribed
Acks a subscribe. Returns count (distinct tickers on the account), plus rejected (over cap) and dropped_fields when present.
update
One ticker's new row: { ticker, as_of, data }. One per subscribed ticker per minute turnover.
unsubscribed
Acks an unsubscribe frame.
pong
Reply to a ping frame.
Error frames
auth_required
First message was not a valid auth frame and no Bearer header was sent. The socket closes.
unauthenticated
Malformed, unknown, or revoked API key.
bad_request
tickers missing or empty, or more than 200 symbols in one subscribe frame.
subscription_limit
You are subscribed to N of M tickers on your plan. Unsubscribe some or upgrade to add more. Over-cap tickers come back in the subscribed ack's rejected list.
too_many_connections
Max 5 concurrent stream connections per account, pooled across every API key on the account. An abuse guard, not a plan limit.