Docs
GET /v2/options/{contract}/greeks

Implied volatility and greeks for one option contract

vol_getContractGreeks

The newest implied-volatility and greeks solve for one option contract, plus a one-minute history of it. Use it to track a single contract's IV, delta and gamma through the session.

Path parameters

contract string required

Option contract: O: + OSI symbol, e.g. O:SPY260925C00765000

Query parameters

session string ISO date

Keep only the series samples of one exchange session, ISO YYYY-MM-DD. Omit it for every retained sample.

Details

The contract is O: plus its OSI symbol, e.g. O:SPY260925C00765000. latest holds ts_ms, iv, delta, gamma, mark (the option price the solve used) and mark_source; bid, ask and spread are filled only while a live quote is held for the contract, and null otherwise. series is the same solve sampled once a minute (ts_ms = the minute), up to the last 390 minutes, optionally restricted to one session.

Units

  • iv is annualized, as a fraction (0.1286 = 12.86%).
  • mark, bid, ask and spread are dollars per share.
  • strike is in integer thousandths of a dollar; ts_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

A well-formed contract on a registered underlying that has not been solved returns 200 with latest: null, series: [] and a meta.note. An unregistered underlying is 404 not_found.

Example

http
GET /v2/options/O:SPY260925C00765000/greeks
json
{
  "data": {
    "contract": {
      "underlying": "SPY",
      "expiry": "2026-09-25",
      "right": "call",
      "strike": 765000
    },
    "latest": {
      "ts_ms": 1790256746156,
      "iv": 0.1286,
      "delta": 0.466,
      "gamma": 0.0455,
      "mark": 4.735,
      "mark_source": "options_trades",
      "bid": null,
      "ask": null,
      "spread": null
    },
    "series": [
      {
        "ts_ms": 1790233380000,
        "iv": 0.1286,
        "delta": 0.611,
        "gamma": 0.0436,
        "mark": 4.735
      }
    ]
  }
}

Response

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

200application/json

{contract, latest, series} in data; latest: null and empty series with a meta.note when the contract 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
contract object required

A single listed option contract, identified the way the OSI does: root symbol, expiry date, right, strike.

underlying is the OSI root (e.g. SPXW for SPX weeklies), stored unpadded and uppercase.

expiry string · date required ISO date
right string required

Call or put.

One of callput
strike integer · int64 required 1/1000 $

Strike in integer thousandths of a dollar (exact OSI unit)

underlying string required
latest object nullable

The contract's newest solve.

ask number · double nullable
bid number · double nullable

Present only while a live quote is held for this contract.

delta number · double nullable
gamma number · double nullable
iv number · double nullable
mark number · double required
mark_source string required
spread number · double nullable

ask - bid, and null whenever either side is absent.

ts_ms integer · int64 required epoch ms
series array<VolSample> required
delta number · double nullable
gamma number · double nullable
iv number · double nullable
mark number · double required
ts_ms integer · int64 required epoch ms

The minute boundary this sample represents (epoch-ms).

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 — malformed contract or session

401

unauthenticated

403

not_entitled_tier — the underlying's entitlement class

404

not_found — the contract's underlying is not registered