# WSS /v2/stream

**Websocket streaming**

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

- **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.

## Body parameters

| Name | In | Type | Required | Description |
|------|----|----|----------|-------------|
| `tickers` | frame | string[] | yes | Symbols to subscribe on a subscribe frame. Up to 200 per frame; send more frames to add more, capped by your plan. Example: `AAPL, NVDA`. |
| `fields` | frame | string[] | 'all' | 'default' | no | Columns in each update. Omit for the default minute set; "all" sends every live column; an array selects specific columns (unknown ones are dropped and listed in the ack). Example: `default`. |

## 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.

---

Interactive sandbox + parameter editor: https://tickerbot.io/docs/endpoints/tickers/streaming
