---
title: "Expected-move cones per symbol"
method: GET
path: "/v1/vol/cones"
tags: ["Tempest"]
---

# Expected-move cones per symbol

`GET /v1/vol/cones`

## Request

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

Tempest Cones: the move the options market prices for each horizon
(`close`, `1d`, `week`, `opex`, `30d`), as 1-sigma percent and price bands
around spot (from implied variance), plus the level set drawn on the
chart. A horizon that does not exist at that moment (the `close`
horizon after hours) is null.
**Two different questions.** `horizons[]` is priced from the current
spot: how much further options price the move from *now* to each
settle. It moves with price, so it is not a budget to measure a move
against. `levels[]` is priced at a past close and does not move
intraday: read how far a move has gone against `hi1` / `lo1` (1-sigma)
and `hi2` / `lo2` (2-sigma).

**Levels** (`levels[]`): `day` (the prior close, to today's close),
`week` (last week's final close, to this week's last close) and `month`
(the last monthly options expiration's close, to the next monthly
expiration's close). Each has `name`, `label`, `anchor`, `priced_at`,
`until`, `em1_pct` and `hi1`/`lo1`/`hi2`/`lo2`. A level is absent when
its anchor close has no reading.

**Per horizon** (`horizons[]`): `name`, `minutes` to the settle,
`em1_pct` (1-sigma, % of spot), `em1` / `em2` (1- and 2-sigma in price),
`realized_em_pct` (20-day realized vol over the same span). Optional,
null when not available, and absent on older readings:
- `up1_pct`, `dn1_pct`, `up2_pct`, `dn2_pct`: the move to each side in %
  of spot as the options' skew prices it (put skew makes the downside
  wider). Null: read `em1_pct` both ways.
- `tail_src`: how the 2-sigma sides were read: `quantile` (from the
  fitted smile, within the quoted strikes) or `wing` (twice the 1-sigma
  side, which understates a steep tail).
- `skew_expiry`: the expiration whose smile set that shape.
- `events[]`: scheduled events inside the horizon (after `asOf`, at or
  before the settle), each `{kind, label, at, timing, jump_pct,
  var_share}`: `kind` is `earnings`, `fomc`, `cpi` or `nfp`; `at` is the
  ISO-8601 instant it is modelled at; earnings add `timing` (`bmo` /
  `amc`), `jump_pct` (the report's own implied move, %) and `var_share`
  (the share of the horizon's priced variance that is the report, 0-1).
- `event_adjusted`: true when this horizon's move includes an earnings
  report.
Response: `data.symbols[]` has `symbol`, `asOf`, `sessionDate`, `stale` and `cones`.
Symbols Tempest does not cover are listed in `data.missing`. **Cost:** 1 credit per call (up to 10 symbols).

## Query parameters

- `symbols` string, required

## Response `200`

OK.

- VolSymbolsResponse
  - `data` object, required
    - `missing` VolMissing[], required
      - `reason` 'not_covered' | 'no_history', required
      - `symbol` string, required
    - `symbols` VolSymbol[], required
      - `asOf` string, date-time, required
      - `sessionDate` string, date, required
      - `stale` boolean, required: In session, true when the reading is more than 20 minutes old.
      - `symbol` string, 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)
