# Expected-move cones per symbol

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

API: Heatseeker.

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

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

## Example request

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

## Responses

### 200

OK.

Shape (placeholder values):

```json
{
  "data": {
    "symbols": [
      {
        "symbol": "string",
        "asOf": "string",
        "sessionDate": "string",
        "stale": false
      }
    ],
    "missing": [
      {
        "symbol": "string",
        "reason": "not_covered"
      }
    ]
  },
  "meta": {
    "module": "string",
    "asOf": "string",
    "sessionDate": "string",
    "marketState": "pre_open",
    "frozen": false,
    "publishedAt": "string",
    "cached": false,
    "attribution": {
      "text": "Powered by Skylit",
      "url": "string",
      "required": false,
      "license": "personal",
      "shareable": false,
      "shareClass": "derived",
      "terms": "string"
    }
  }
}
```

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

### 504

The request did not finish in time (`gateway_timeout`). Refunded;
retry, or narrow the request.
