# Live Tempest updates (Server-Sent Events)

`GET https://api.skylit.ai/v1/vol/stream`

API: Heatseeker.

Pushes a symbol's full module state each time Tempest recomputes it:
about every minute for the most active names and every ~10 minutes for
the rest during regular hours; nothing outside them (the close state
stays frozen). Events: `connected`, `vol` (id = asOf in epoch ms; data
is a `data.symbols[]` element of `/v1/vol/snapshot`), `market` (with
`market=true`), `credits`, `closed`, `reconnect` (after an hour).
Resume with `Last-Event-ID` (or `lastEventId`): the initial burst skips
symbols whose asOf is older than it; a frame at exactly that id may
repeat. Up to 10 symbols per stream and 5 streams per account. Each
server also holds a bounded number of open streams across all
customers; at capacity → `503` `stream_capacity` with `Retry-After: 5`
(retry; you may land on another server). Access is re-checked every
minute: a stream closes with `closed` `{"reason":"access_withdrawn"}`
once the account is no longer enabled.
**Cost:** 1 credit to connect and 1 per minute open.

## Authentication

Send your Skylit API key as a bearer token: `Authorization: Bearer <key>`. No other header is accepted.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `symbols` | query | string | yes | Comma-separated Tempest symbols (up to 10). Tempest keys the S&P complex on the option root `SPXW` and Nasdaq-100 on `NDXP`; see `/v1/vol/symbols`. |
| `modules` | query | string | no | Comma-separated subset of iv, term, cones, sigma, surface, tilt, events (default all). |
| `market` | query | boolean | no | Also push the market volatility complex. (default `false`) |
| `lastEventId` | query | integer | no | Resume point when the client cannot send `Last-Event-ID`. |

## Example request

```bash
curl -N "https://api.skylit.ai/v1/vol/stream?symbols=NVDA,SPY" \
  -H "Authorization: Bearer $SKYLIT_API_KEY" \
  -H "Accept: text/event-stream"
```

## Responses

### 200

An SSE stream (`text/event-stream`).

`text/event-stream`

### 400

Request validation failed.

### 401

Missing API key (`unauthorized`), sent by the gateway.

### 402

Out of credits (`insufficient_credits`).

### 403

As `Forbidden`, or `not_entitled`: Tempest data is not enabled for this
account (it is in preview). Refunded.

### 404

Unknown symbol, no data available, or none of the requested
`expirations` exist for the symbol (`code: expiration_not_found`).

### 429

Per-minute rate limit exceeded.

Headers: `Retry-After`.

### 503

Tempest data is loading (`warming_up`, with `Retry-After`) or not configured (`unavailable`). Refunded.
