# VIX Term Structure API
> The shape of the equity volatility curve — the single most-watched regime signal in the options world — computed live from Yahoo Finance, no key, nothing stored. A VIX level tells you how scared the market is right now; the term structure tells you whether that fear is short-term panic or a calm, persistent state, and which way it is rolling. This API reads the S&P 500 implied-volatility curve across four tenors — the 9-day VIX, the headline 30-day VIX, the 3-month VIX and the 6-month VIX — and turns it into a regime. When the curve slopes up (VIX < VIX3M < VIX6M) the market is in contango: calm, with near-term vol cheaper than far, the state short-vol strategies harvest. When it inverts to backwardation (VIX above VIX3M) the front end is bid above the back: acute stress, fear spiking, historically near capitulation. The structure endpoint returns the live curve, the contango ratio (VIX / VIX3M), the short-end ratio (VIX9D / VIX), the roll yield a short-vol position would earn, the slope classification and a regime read, with VVIX (the vol of the VIX) for context. The history endpoint returns the daily time series of the contango ratio and flags every backwardation day. The percentile endpoint places today's contango ratio in its one-year range. This is the volatility term-structure / contango-backwardation cut — distinct from the cross-asset VIX-family level board, the crypto DVOL index and the realised-volatility APIs. It is the shape of fear, not its level.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/vixterm-api/..."
```

## Pricing
- **Free** (Free) — 680 calls/Mo, 2 req/s
- **Starter** ($12/Mo) — 15,600 calls/Mo, 6 req/s
- **Pro** ($36/Mo) — 84,500 calls/Mo, 16 req/s
- **Mega** ($82/Mo) — 470,000 calls/Mo, 40 req/s

## Endpoints

### Structure

#### `GET /v1/structure` — The live VIX term structure, contango ratio, roll yield, slope and regime

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/vixterm-api/v1/structure"
```

**Response:**
```json
{
    "data": {
        "note": "The S&P 500 implied-volatility term structure. contango_ratio = VIX / VIX3M: below 1 is contango (calm, upward curve), above 1 is backwardation (stress, inverted curve). short_end_ratio = VIX9D / VIX (near-term panic when > 1). roll_yield_pct is what a short-vol position earns from the curve rolling down (positive in contango). VVIX is the volatility of the VIX. Read fresh per call, lightly cached.",
        "vvix": 100.63,
        "curve": [
            {
                "days": 9,
                "label": "9-Day VIX",
                "level": 20.66,
                "tenor": "vix9d"
            },
            {
                "days": 30,
                "label": "VIX (30-Day)",
                "level": 18.87,
                "tenor": "vix"
            },
            {
                "days": 91,
                "label": "3-Month VIX",
                "level": 21.42,
                "tenor": "vix3m"
            },
            {
                "days": 182,
                "label": "6-Month VIX",
                "level": 23.14,
                "tenor": "vix6m"
            }
        ],
        "slope": "contango",
        "regime": "contango — normal, calm regime",
        "source": "Yahoo Finance (^VIX9D, ^VIX, ^VIX3M, ^VIX6M, ^VVIX)",
        "contango_ratio": 0.881,
        "roll_yield_pct": 13.51,
        "short_end_ratio": 1.0949
    },
    "meta": {
        "timestamp": "2026-06-12T10:34:36.570Z",
        "request_id": "a91923d9-64f6-45
…(truncated, see openapi.json for full schema)
```

### History

#### `GET /v1/history` — Daily VIX/VIX3M contango-ratio series with backwardation days flagged

**Parameters:**
- `days` (query, optional, string) — Days of history (30-1260) Example: `252`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/vixterm-api/v1/history?days=252"
```

**Response:**
```json
{
    "data": {
        "days": 251,
        "note": "Daily time series of the VIX / VIX3M contango ratio. backwardation_days counts days the ratio exceeded 1 (the curve inverted — stress). Read fresh per call, lightly cached.",
        "source": "Yahoo Finance (^VIX, ^VIX3M)",
        "current": {
            "vix": 19.44,
            "date": "2026-06-11",
            "vix3m": 21.42,
            "contango_ratio": 0.9076
        },
        "history": [
            {
                "vix": 18.02,
                "date": "2025-06-12",
                "vix3m": 20.65,
                "backwardation": false,
                "contango_ratio": 0.8726
            },
            {
                "vix": 20.82,
                "date": "2025-06-13",
                "vix3m": 22.62,
                "backwardation": false,
                "contango_ratio": 0.9204
            },
            {
                "vix": 19.11,
                "date": "2025-06-16",
                "vix3m": 21.23,
                "backwardation": false,
                "contango_ratio": 0.9001
            },
            {
                "vix": 21.6,
                "date": "2025-06-17",
                "vix3m": 22.91,
                "backwardation": false,
                "contango_ratio": 0.9428
            },
            {
                "vix": 20.14,
                "date": "2025-06-18",
                "vix3m": 21.97,
                "backwardation": false,
                "contango_ratio": 0.9167
       
…(truncated, see openapi.json for full schema)
```

### Percentile

#### `GET /v1/percentile` — Where today's contango ratio sits in its one-year range

**Parameters:**
- `days` (query, optional, string) — Lookback window (60-1260) Example: `252`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/vixterm-api/v1/percentile?days=252"
```

**Response:**
```json
{
    "data": {
        "note": "Where today's VIX/VIX3M contango ratio sits within its 251-day range (percentile). A low percentile = unusually steep contango (calm); a ratio above 1 = the curve has inverted (stress). Read fresh per call, lightly cached.",
        "read": "contango within its normal range",
        "slope": "contango",
        "source": "Yahoo Finance (^VIX, ^VIX3M)",
        "avg_ratio": 0.8767,
        "max_ratio": 1.07,
        "min_ratio": 0.758,
        "percentile": 74.5,
        "window_days": 251,
        "contango_ratio": 0.9076
    },
    "meta": {
        "timestamp": "2026-06-12T10:34:36.870Z",
        "request_id": "4b7623ef-9722-4883-8c4d-1113f28afe42"
    },
    "status": "ok",
    "message": "Contango percentile retrieved successfully",
    "success": true
}
```

### Meta

#### `GET /v1/meta` — Service metadata

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/vixterm-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "structure and meta take no parameters. history and percentile take days (history 30-1260 default 252; percentile 60-1260 default 252). contango_ratio = VIX/VIX3M (< 1 contango/calm, > 1 backwardation/stress). A 10-minute protective cache fronts the shared Yahoo upstream.",
        "source": "Yahoo Finance VIX-family (^VIX9D, ^VIX, ^VIX3M, ^VIX6M, ^VVIX), live",
        "tenors": [
            {
                "key": "vix9d",
                "days": 9
            },
            {
                "key": "vix",
                "days": 30
            },
            {
                "key": "vix3m",
                "days": 91
            },
            {
                "key": "vix6m",
                "days": 182
            }
        ],
        "service": "vixterm-api",
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/history": "Daily VIX/VIX3M contango-ratio series with backwardation days flagged (days=252).",
            "GET /v1/structure": "The live VIX term structure, contango ratio, roll yield, slope and regime.",
            "GET /v1/percentile": "Where today's contango ratio sits in its one-year range (days=252)."
        },
        "description": "VIX term structure — the shape of the equity volatility curve, the most-watched options-market regime signal, live from Yahoo Finance (no key, nothing stored). structure returns the S&P 500 implied-vol curve across the 9-day, 30-day, 3-month and 6-mont
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/vixterm-api
OpenAPI spec: https://www.oanor.com/api/vixterm-api/openapi.json
