Docs
GET /v2/options/{symbol}/vol/term

Implied-volatility term structure for one underlying

vol_getTerm

At-the-money implied volatility for every expiry of one underlying, from ITMatrixHQ's own greeks engine. Use it to read the volatility term structure at a glance.

Path parameters

symbol string required

Registered underlying, e.g. SPY

Details

Each row is one expiry: dte, the at-the-money strike atm_strike (the strike nearest spot where both the call and the put solved), atm_iv (the mean of that call's and put's IV) and n_contracts (how many of the expiry's contracts solved). as_of_ms identifies the solve the answer comes from.

Units

  • atm_iv is annualized, as a fraction (0.119 = 11.9%).
  • atm_strike is in integer thousandths of a dollar (764000 = $764.00).
  • dte is calendar days from the current ET session to expiry.
  • spot is dollars; as_of_ms is epoch milliseconds.

Freshness

Updated with every new solve during market hours; outside them, the last solve is served.

Limits

No per-operation limit applies to requests with an API key.

Empty results

An underlying the engine does not cover yet returns 200 with as_of_ms: null, expiries: [] and a meta.note: a fact about coverage, not a zero. An unregistered symbol is 404 not_found.

Example

http
GET /v2/options/SPY/vol/term
json
{
  "data": {
    "symbol": "SPY",
    "as_of_ms": 1790256746156,
    "spot": 764.09,
    "expiries": [
      {
        "expiry": "2026-09-25",
        "dte": 0,
        "atm_strike": 764000,
        "atm_iv": 0.1189,
        "n_contracts": 268
      }
    ]
  }
}

Response

Prices are dollars, timestamps epoch milliseconds, strikes integer thousandths of a dollar; null means unknown. Units →

200application/json

{symbol, as_of_ms, spot, expiries} in data; empty expiries with a meta.note when the underlying is not covered

object

A successful response: the payload consumers parse plus response metadata. data shapes are the platform types — never reshaped by the envelope.

data object required
as_of_ms integer · int64 nullable epoch ms

Null until a frame has been observed for this underlying.

expiries array<VolTermExpiry> required
atm_iv number · double nullable

Mean of the call and put IV at atm_strike.

atm_strike integer · int64 nullable 1/1000 $

The ATM strike (integer thousandths), or null when no strike in this expiry has both rights solved.

dte integer · int64 required

Calendar days from the current ET session to expiry.

expiry string required ISO date

YYYY-MM-DD.

n_contracts integer required

Contracts in this expiry whose IV solved.

spot number · double nullable
symbol string required
meta object required

Response metadata.

caps object nullable

meta.caps — the entitlement caps that shaped this response. applied lists the caps that actually changed it (for example range_clamped).

applied array<string> required

Which caps actually shaped this response (e.g. range_clamped). Empty = nothing was clamped.

darkpool boolean nullable

Whether this account can use Off-Exchange in the site.

flow boolean nullable

Whether the OPRA option-flow capability (flow) is granted to this principal in the app: site Pro plus a CBOE non-professional attestation (never on an itm_ key). Emitted explicitly — true and false — by the account endpoints, so the app reads the grant instead of inferring it from tier and attestation; absent on routes that do not report it.

gexDepth string nullable

GEX data depth when the route reports it. Camel-cased to match the browser capability bundle; absent on unrelated routes.

tier string required

The tier the request was served under.

cursor string nullable

Opaque continuation cursor (pass back as ?cursor=); absent when there is nothing more to read.

plane string nullable

Which serving tier answered the read (meta.plane). Informational provenance: treat it as an opaque label, because new values may appear.

Errors

Every error is the JSON error envelope; branch on error.code.

StatusMeaning
400

invalid_params

401

unauthenticated

403

not_entitled_tier — the symbol's own entitlement class

404

not_found — symbol is not registered