---
title: "Daily Tempest history per symbol"
method: GET
path: "/v1/vol/history"
tags: ["Tempest"]
---

# Daily Tempest history per symbol

`GET /v1/vol/history`

## Request

- Base URL: `https://api.skylit.ai`
- URL: `https://api.skylit.ai/v1/vol/history`
- Auth: HTTP bearer

One row per stored session, at that session's close (15:59 ET): OHLC,
SVX per tenor and weekend-adjusted, ATM vol, term slope,
30-day risk reversal / butterfly / ATM vol / skew slope, tilt, chain
depth (`n_used`), `calc_v`. Columnar: `dates[]` plus one array per
field in `columns`. Every value was knowable at that session's close;
features from session D predict D+1 onward. History starts where
Tempest's backfill does (up to about two years); `/v1/vol/symbols`
shows each symbol's last stored session.

**Expected move at each close.** Every row also carries the
one-standard-deviation (1-sigma) move options priced at that session's
close for the span to the next session's close, so each past day's
priced range can be replayed:

| Column | Meaning |
|---|---|
| `em_1d_pct` | The 1-sigma move, in % of that session's close |
| `em_1d` | The same move in $ (`close * em_1d_pct / 100`) |
| `range_1d_low` | `close - em_1d` |
| `range_1d_high` | `close + em_1d` |
| `em_1d_event` | `1` when an earnings report falls inside the span and its priced move is counted in full, else `0` |

It is the same next-day move as the Tempest cone at that close: the
nearest expiry's priced variance, split by trading time, so a Friday
close prices the weekend. The band is symmetric (no skew). The values
are `null` where a session has no reading, and for `VIX`.

**Cost:** per symbol-day: 1 credit per 10 symbol-weekdays in the
requested window, rounded up, minimum 1 (1 symbol x the default month
is 3; 10 symbols x one year is 261). Computed from the request, so
known before the call; holidays are not discounted.

## Query parameters

- `symbols` string, required
- `from` string, date
- `to` string, date
- `fields` string

## Response `200`

OK.

- VolHistoryResponse
  - `data` object, required
    - `from` string, date, required
    - `missing` VolMissing[], required
      - `reason` 'not_covered' | 'no_history', required
      - `symbol` string, required
    - `symbols` object[], required
      - `columns` object, required
      - `dates` string[], required
      - `symbol` string, required
    - `to` string, date, required
  - `meta` VolMeta, required
    - `asOf` string, date-time: When Tempest computed the newest value in this response.
    - `attribution` Attribution: Whether and how this response's data may be published. See `/legal/api#sharing`. An Agent or MCP client should never publish data where `shareable` is false, regardless of `shareClass`. `required`, `license`, `shareable` and `shareClass` are always sent on `/v1/options/*` and absent from the short form.
      - `license` 'personal' | 'commercial' | 'connected_app'
      - `required` boolean
      - `shareClass` 'derived' | 'derived_levels_only' | 'raw': "raw" (e.g. option quotes, greeks) must never be auto-published.
      - `shareable` boolean
      - `terms` string, uri
      - `text` string, required
      - `url` string, uri, required
    - `cached` boolean, required
    - `frozen` boolean, required: True while Tempest serves the previous close (outside regular hours).
    - `marketState` 'pre_open' | 'open' | 'post_close' | 'closed', required: US equity session at request time.
    - `module` string, required: Which endpoint answered (iv, cones, screener, ...).
    - `publishedAt` string, date-time: When Tempest last published to the API.
    - `sessionDate` string, date: The trading session (ET) that asOf belongs to. The close state is stamped 15:59 ET and always belongs to its own session.

## Other responses

- `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.
- `503`: Tempest data is loading (`warming_up`, with `Retry-After`) or not configured (`unavailable`). Refunded.
- `504`: The request did not finish in time (`gateway_timeout`). Refunded; retry, or narrow the request.

---

[API](https://skmtc.dev/skylit/apis/skylit-public-api.md) · [All operations](https://skmtc.dev/skylit/apis/skylit-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/skylit/apis/skylit-public-api/revisions/890b0ea4e6f5?raw)
