/gex/{underlying}/strikes Per-strike GEX rows for one session (legacy, unversioned)
gex_getStrikesLegacyDeprecated
Deprecated: use /v2/gex/{symbol}/grid instead. Served until 2026-12-31.
Path parameters
underlyingstring requiredUnderlying symbol, e.g.
SPY
Query parameters
datestring ISO dateSession date, ISO
YYYY-MM-DD. Optional for the chain (absent = live), required for GEX.sourcestringReserved for ITMatrixHQ tooling; omit it. GEX reads ignore it.
Details
Per-(strike, expiry) GEX rows from the latest capture of one session. Use GET /v2/gex/{symbol}/grid instead: by_expiry=true serves the same rows, plus grid totals, live reads and at=.
Units
gexanddelta_adj_gexare dollars of dealer hedging per $1 move in the underlying (calls positive, puts negative).- Share-denominated GEX is dollar GEX ÷ the underlying price.
strikeis in integer thousandths of a dollar (600000= $600.00);call_oiandput_oiare contracts.meta.captured_at_msis the capture instant, epoch milliseconds.
GEX on this route is in dollars. For shares or delta-adjusted figures and how to convert, see Units: dollars, shares and delta-adjusted.
Limits
No per-operation limit applies to requests with an API key.
Example
GET /gex/SPY/strikes?date=2026-09-24{
"data": [
{
"strike": 760000,
"expiry": "2026-09-25",
"gex": -83854412.96,
"delta_adj_gex": -18382624.27,
"call_oi": 5143,
"put_oi": 30041
}
],
"meta": {
"underlying": "SPY",
"date": "2026-09-24",
"captured_at_ms": 1790256713559,
"row_count": 3293
}
}Response
Prices are dollars, timestamps epoch milliseconds, strikes integer thousandths of a dollar; null means unknown. Units →
200application/json
Per-strike GEX rows in data (strikes in integer thousandths); capture instant in meta.captured_at_ms
object
A successful response: the payload consumers parse plus response metadata. data shapes are the platform types — never reshaped by the envelope.
data array<object> required
call_oi integer · int32 nullable delta_adj_gex number · double nullable USD Delta-adjusted dealer gamma exposure at this strike (× expiry), per-$1-move dollars.
expiry string · date nullable ISO date Present = a per-expiry row; absent = the all-expiry net.
gex number · double required USD Net dealer gamma exposure at this strike (× expiry), per-$1-move dollars; calls +, puts −.
gex_0dte number · double nullable 0DTE component (daily-rollup rows only).
put_oi integer · int32 nullable strike integer · int64 required 1/1000 $ Strike in integer thousandths of a dollar (exact OSI unit)
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.
| Status | Meaning |
|---|---|
| 400 |
|
| 401 |
|
| 403 |
|
| 502 |
|
| 503 |
|