# Call-vs-put premium imbalance (Tilt) per symbol

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

API: Heatseeker.

Tempest Tilt: the one-strike-OTM call vs put premium imbalance at the
headline expiry as raw and forward-adjusted ratios, which side is cheap,
its z-score and percentile over the year, each contract's strike, spread
and distance from its running premium low (percent), and a row per nearby
expiry. Contract prices (mids, the premium low itself), open interest and
volume are not served. `liquid` is false on chains too thin to read.
Response: `data.symbols[]` has `symbol`, `asOf`, `sessionDate`, `stale` and `tilt`.
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/tilt?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
  }
}
```

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