Historical API Historical GEX
ALPHA TIER HISTORICAL

Historical GEX Data API

Query gamma exposure by strike at any minute since January 2017. Same response shape as the live /v1/exposure/gex endpoint - just add an at= timestamp to replay GEX, gamma flip, call/put walls, and dealer hedging from any historical moment.

Coverage
2026-06-02 → 2026-09-01
Granularity
1 minute
Dataset Size
80B+ option rows
Format
JSON (REST)
New to GEX? What is gamma exposure? covers the formula and dealer hedging mechanics. For backtest patterns: backtesting GEX-regime strategies.

Endpoint

GET /v1/exposure/gex/{symbol}?at=...
Host: historical.flashalpha.com Auth: X-Api-Key Tier: Alpha

Parameters

NameInRequiredDefaultDescription
symbolpathyes-Underlying symbol (e.g. SPY)
atqueryyes-As-of timestamp. yyyy-MM-ddTHH:mm:ss for minute resolution, or yyyy-MM-dd (defaults to 16:00 ET close). Treated as ET wall-clock.
expirationquerynoallFilter to a single expiry (yyyy-MM-dd)
min_oiqueryno0Minimum open interest threshold

The at Parameter

Every historical endpoint hangs off at - the as-of timestamp. Greeks and spot are stored at 1-minute resolution (9:30→16:00 ET) and resolved with a LATEST ON per-contract query, so any at within the trading day returns the contract state as of that minute. Open interest is EOD and applies to all intraday timestamps for that day.

curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://historical.flashalpha.com/v1/exposure/gex/SPY?at=2020-03-16T15:30:00"
import httpx, pandas as pd
from tqdm import tqdm

# Replay net GEX at 15:30 ET for every trading day in 2024
dates = pd.bdate_range("2024-01-02", "2024-12-31")
rows  = []
for d in tqdm(dates):
    at = d.strftime("%Y-%m-%dT15:30:00")
    r  = httpx.get(
        f"https://historical.flashalpha.com/v1/exposure/gex/SPY?at={at}",
        headers={"X-Api-Key": "YOUR_API_KEY"}, timeout=10
    )
    if r.status_code == 200:
        j = r.json()
        rows.append({"date": d, "net_gex": j["net_gex"], "flip": j["gamma_flip"]})
df = pd.DataFrame(rows)
const at = "2020-03-16T15:30:00";  // COVID crash, 15:30 ET
const r  = await fetch(
  `https://historical.flashalpha.com/v1/exposure/gex/SPY?at=${at}`,
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const j = await r.json();
console.log(`Net GEX: $${j.net_gex.toLocaleString()}`);
console.log(`Regime:  ${j.net_gex_label}`);
console.log(`Flip:    ${j.gamma_flip}`);

Response

Identical shape to the live /v1/exposure/gex endpoint, with two extra fields (as_of, as_of_requested) that echo the resolved timestamp.

{
  "symbol": "SPY",
  "underlying_price": 246.01,
  "as_of": "2020-03-16T15:30:00",
  "as_of_requested": "2020-03-16T15:30:00",
  "gamma_flip": 270.92,
  "net_gex": -2633970601,
  "net_gex_label": "negative",
  "strikes": [
    {
      "strike": 240,
      "call_gex": 145210000,
      "put_gex": 88420000,
      "net_gex": 233630000,
      "call_oi": 14211,
      "put_oi": 38820,
      "call_volume": 0,
      "put_volume": 0,
      "call_oi_change": null,
      "put_oi_change": null
    }
  ]
}

Granularity: spot, greeks, and per-strike GEX are minute-level; OI is EOD-stamped (one value per trade day, applied across all intraday at=). Per-strike volume and prior-day OI deltas are not stored at minute granularity.

What This Unlocks

  • Backtest GEX-regime strategies - pull regime labels at 15:30 ET for every day in your test window, join forward returns, measure edge. Walkthrough →
  • Replay specific events - what did dealer positioning look like at 15:30 ET on the COVID crash (2020-03-16, -12%)? GameStop squeeze (2021-01-27)? SVB collapse (2023-03-13)?
  • Train ML models on minute-level GEX features without lookahead bias - every at resolves with point-in-time semantics.
  • Validate GEX research from blogs / papers against the actual historical sequence.
  • Build dashboards that overlay historical gamma flip vs price for any day or window.

Coverage - Supported Tickers

Live coverage pulled from GET /v1/tickers. Additional symbols backfill on demand for Alpha customers (typically <48h).

SymbolFirst dateLast dateHealthy daysTotal days
AA 2026-06-02 2026-09-01 64 92
AAL 2018-01-02 2026-09-01 2,175 3,165
AAPL 2017-06-26 2026-09-01 2,302 3,355
ABBV 2026-06-02 2026-09-01 64 92
ABNB 2026-06-02 2026-09-01 64 92
AEP 2026-06-02 2026-09-01 64 92
AMC 2018-01-02 2026-09-01 2,135 3,165
AMD 2017-01-03 2026-09-01 2,425 3,529
AMGN 2026-06-02 2026-09-01 64 92
AMT 2026-06-02 2026-09-01 64 92
AMZN 2017-01-03 2026-09-01 2,341 3,529
ANET 2026-06-02 2026-09-01 64 92
ARKK 2018-05-30 2026-09-01 1,959 3,017
ARM 2023-10-11 2026-09-01 725 1,057
AVGO 2018-01-02 2026-09-01 2,175 3,165
BA 2026-06-02 2026-09-01 64 92
BABA 2018-01-02 2026-09-01 2,173 3,165
BAC 2018-01-02 2026-09-01 2,176 3,165
BHP 2026-06-02 2026-09-01 64 92
BIDU 2026-06-02 2026-09-01 64 92
BIIB 2026-06-02 2026-09-01 64 92
BMY 2026-06-02 2026-09-01 64 92
BNTX 2026-06-02 2026-09-01 64 92
C 2026-06-02 2026-09-01 64 92
CAT 2018-01-02 2026-09-01 2,176 3,165
CCI 2026-06-02 2026-09-01 64 92
CCJ 2026-06-02 2026-09-01 64 92
CCL 2026-06-02 2026-09-01 64 92
CI 2026-06-02 2026-09-01 64 92
CLF 2026-06-02 2026-09-01 64 92
COIN 2021-04-20 2026-09-01 1,347 1,961
COP 2026-06-02 2026-09-01 64 92
COST 2018-01-02 2026-09-01 2,176 3,165
CRWD 2021-08-16 2026-09-01 1,266 1,843
CSCO 2026-06-02 2026-09-01 64 92
CVNA 2026-06-02 2026-09-01 64 92
CVS 2026-06-02 2026-09-01 64 92
CVX 2026-06-02 2026-09-01 64 92
DASH 2026-06-02 2026-09-01 64 92
DDOG 2019-10-07 2026-09-01 1,733 2,522
DE 2018-01-02 2026-09-01 2,175 3,165
DG 2026-06-02 2026-09-01 64 92
DHI 2026-06-02 2026-09-01 64 92
DIS 2026-06-02 2026-09-01 64 92
DKNG 2026-06-02 2026-09-01 64 92
DLR 2026-06-02 2026-09-01 64 92
DLTR 2026-06-02 2026-09-01 64 92
DOCU 2026-06-02 2026-09-01 64 92
DUK 2026-06-02 2026-09-01 64 92
DVN 2026-06-02 2026-09-01 64 92
EEM 2018-01-02 2026-09-01 2,176 3,165
ELV 2026-06-02 2026-09-01 64 92
ENPH 2026-06-02 2026-09-01 64 92
EOG 2026-06-02 2026-09-01 64 92
EQIX 2026-06-02 2026-09-01 64 92
F 2018-01-02 2026-09-01 2,176 3,165
FCX 2026-06-02 2026-09-01 64 92
FSLR 2026-06-02 2026-09-01 64 92
FXI 2026-06-02 2026-09-01 63 92
GD 2026-06-02 2026-09-01 64 92
GDX 2018-01-02 2026-09-01 2,176 3,165
GE 2026-06-02 2026-09-01 64 92
GILD 2026-06-02 2026-09-01 64 92
GLD 2018-01-02 2026-09-01 2,176 3,165
GM 2026-06-02 2026-09-01 64 92
GME 2018-01-02 2026-09-01 2,127 3,165
GOOG 2017-01-03 2026-09-01 2,426 3,529
GOOGL 2018-05-31 2026-09-01 2,072 3,016
HAL 2026-06-02 2026-09-01 64 92
HD 2026-06-02 2026-09-01 64 92
HON 2026-06-02 2026-09-01 62 92
HOOD 2021-08-04 2026-09-01 1,274 1,855
HUM 2026-06-02 2026-09-01 64 92
HYG 2018-01-02 2026-09-01 2,020 3,165
IBB 2026-06-02 2026-09-01 64 92
IBIT 2024-11-20 2026-09-01 445 651
INTC 2017-01-03 2026-09-01 2,426 3,529
IRM 2026-06-02 2026-09-01 64 92
ITB 2026-06-02 2026-09-01 64 92
IWM 2017-01-03 2026-09-01 2,426 3,529
JD 2026-06-02 2026-09-01 64 92
JNJ 2026-06-02 2026-09-01 64 92
JPM 2026-06-02 2026-09-01 64 92
KO 2026-06-02 2026-09-01 64 92
KR 2026-06-02 2026-09-01 64 92
KRE 2018-01-02 2026-09-01 2,175 3,165
KWEB 2018-01-02 2026-09-01 2,175 3,165
LABU 2026-06-02 2026-09-01 64 92
LCID 2021-07-26 2026-09-01 1,254 1,864
LEN 2026-06-02 2026-09-01 64 92
LI 2026-06-02 2026-09-01 64 92
LLY 2018-01-02 2026-09-01 2,002 3,165
LMT 2018-01-02 2026-09-01 2,002 3,165
LOW 2026-06-02 2026-09-01 64 92
LULU 2026-06-02 2026-09-01 64 92
MARA 2020-08-13 2026-09-01 1,460 2,211
MCD 2026-06-02 2026-09-01 64 92
MDB 2018-03-13 2026-09-01 1,984 3,095
META 2021-07-13 2026-09-01 1,197 1,877
MMM 2026-06-02 2026-09-01 64 92
MPC 2026-06-02 2026-09-01 64 92
MRK 2026-06-02 2026-09-01 64 92
MRNA 2026-06-02 2026-09-01 64 92
MSFT 2017-01-03 2026-09-01 2,427 3,529
MSTR 2017-01-03 2026-09-01 2,417 3,529
MU 2018-01-02 2026-09-01 2,176 3,165
NEE 2026-06-02 2026-09-01 64 92
NET 2026-06-02 2026-09-01 64 92
NFLX 2017-01-03 2026-09-01 2,427 3,529
NIO 2026-06-02 2026-09-01 64 92
NKE 2026-06-02 2026-09-01 64 92
NOC 2026-06-02 2026-09-01 64 92
NRG 2026-06-02 2026-09-01 64 92
NUE 2026-06-02 2026-09-01 64 92
NVDA 2017-01-03 2026-09-01 2,338 3,529
O 2026-06-02 2026-09-01 64 92
OXY 2026-06-02 2026-09-01 64 92
PANW 2018-01-02 2026-09-01 2,176 3,165
PCG 2026-06-02 2026-09-01 64 92
PDD 2026-06-02 2026-09-01 64 92
PEP 2026-06-02 2026-09-01 64 92
PFE 2018-01-02 2026-09-01 2,175 3,165
PINS 2026-06-02 2026-09-01 64 92
PLD 2026-06-02 2026-09-01 64 92
PLTR 2020-10-06 2026-09-01 1,481 2,157
PLUG 2026-06-02 2026-09-01 64 92
PSA 2026-06-02 2026-09-01 64 92
PYPL 2018-01-02 2026-09-01 2,176 3,165
QQQ 2017-01-03 2026-09-01 2,343 3,529
RIO 2026-06-02 2026-09-01 64 92
RIOT 2026-06-02 2026-09-01 64 92
RIVN 2021-11-16 2026-09-01 1,201 1,751
ROKU 2026-06-02 2026-09-01 64 92
ROST 2026-06-02 2026-09-01 64 92
RTX 2026-06-02 2026-09-01 64 92
RUN 2026-06-02 2026-09-01 64 92
RUT 2018-06-11 2026-09-01 2,066 3,005
SBUX 2026-06-02 2026-09-01 64 92
SCCO 2026-06-02 2026-09-01 64 92
SEDG 2026-06-02 2026-09-01 64 92
SHOP 2026-06-02 2026-09-01 64 92
SLB 2026-06-02 2026-09-01 64 92
SLV 2018-01-02 2026-09-01 2,176 3,165
SMCI 2018-01-02 2026-09-01 1,222 3,165
SMH 2018-01-02 2026-09-01 2,176 3,165
SNAP 2026-06-02 2026-09-01 64 92
SNOW 2020-09-22 2026-09-01 1,491 2,171
SO 2026-06-02 2026-09-01 64 92
SOFI 2021-06-01 2026-09-01 1,318 1,919
SOXL 2018-01-02 2026-09-01 2,176 3,165
SOXS 2026-06-02 2026-09-01 62 92
SPCX 2026-06-17 2026-09-01 53 77
SPX 2022-01-05 2026-09-01 1,166 1,701
SPXU 2026-06-02 2026-09-01 64 92
SPXW 2018-05-16 2026-09-01 2,083 3,031
SPY 2017-01-03 2026-09-01 2,361 3,529
SQQQ 2018-01-02 2026-09-01 2,169 3,165
T 2017-01-03 2026-09-01 2,426 3,529
TAN 2026-06-02 2026-09-01 64 92
TGT 2026-06-02 2026-09-01 64 92
TJX 2026-06-02 2026-09-01 64 92
TLT 2017-01-03 2026-09-01 2,427 3,529
TOL 2026-06-02 2026-09-01 64 92
TQQQ 2018-01-02 2026-09-01 2,176 3,165
TSLA 2017-01-03 2026-09-01 2,427 3,529
TSM 2018-01-02 2026-09-01 2,129 3,165
TTD 2026-06-02 2026-09-01 64 92
U 2026-06-02 2026-09-01 64 92
UBER 2019-05-16 2026-09-01 1,832 2,666
UNG 2026-06-02 2026-09-01 64 92
UNH 2018-01-02 2026-09-01 2,176 3,165
UPRO 2026-06-02 2026-09-01 64 92
URA 2026-06-02 2026-09-01 64 92
USO 2018-01-02 2026-09-01 2,175 3,165
UVXY 2026-06-02 2026-09-01 64 92
VALE 2026-06-02 2026-09-01 64 92
VIX 2022-01-03 2026-09-01 1,170 1,703
VLO 2026-06-02 2026-09-01 64 92
VNQ 2026-06-02 2026-09-01 61 92
VST 2026-06-02 2026-09-01 64 92
VXX 2026-06-02 2026-09-01 64 92
VZ 2026-06-02 2026-09-01 64 92
WBD 2022-04-11 2026-09-01 1,084 1,605
WFC 2026-06-02 2026-09-01 64 92
WMT 2018-01-02 2026-09-01 2,176 3,165
XBI 2026-06-02 2026-09-01 64 92
XHB 2026-06-02 2026-09-01 64 92
XLB 2026-06-02 2026-09-01 64 92
XLE 2018-01-02 2026-09-01 2,175 3,165
XLF 2018-01-02 2026-09-01 2,033 3,165
XLI 2026-06-02 2026-09-01 64 92
XLK 2018-01-02 2026-09-01 2,176 3,165
XLP 2026-06-02 2026-09-01 64 92
XLU 2026-06-02 2026-09-01 64 92
XLV 2026-06-02 2026-09-01 64 92
XLY 2026-06-02 2026-09-01 64 92
XOM 2026-06-02 2026-09-01 64 92
XOP 2018-01-02 2026-09-01 2,175 3,165
XPEV 2026-06-02 2026-09-01 64 92
XSP 2018-01-02 2026-09-01 2,175 3,165
XYZ 2026-06-02 2026-09-01 64 92
ZM 2026-06-02 2026-09-01 64 92
ZS 2026-06-02 2026-09-01 64 92

Errors

StatusCodeWhen
400invalid_atat missing or wrong format
400invalid_expirationexpiration not yyyy-MM-dd
401-Missing or invalid X-Api-Key
403tier_restrictedPlan below Alpha
404no_data(symbol, at) outside coverage window or in a gap
429rate_limitedDaily quota exhausted (shared with live API)

Why Historical GEX Is Hard to Find

Most GEX dashboards show live exposure - useful for today, useless for backtests. The few vendors who store history typically keep EOD aggregates, which collapse the intraday flip and ruin any signal that depends on knowing where dealers stood at 14:00 ET vs 15:30 ET. FlashAlpha's historical service stores minute-level greeks per contract, so the GEX you query at 14:00 on 2020-03-16 is computed from the actual greeks and spot at that minute - not interpolated, not stamped with the close. More on why this is rare →

Related reading

Ready to build?

Get your free API key and start pulling live options data in 30 seconds.