Every serious options project eventually hits the same wall: the live API shows you now, but the questions that matter - does this strategy work? what did dealers do during the last drawdown? how did VRP behave before earnings? - all require the past. And historical options data, especially pre-computed historical analytics, is the one thing nobody sells.
Until now. FlashAlpha's Historical API ships today with a single, simple contract: 52 live routes mirrored on identical paths, replayable at any minute since 2017-01-03, returned in the same response shape. One query parameter - at - and you get what GEX, DEX, VEX, CHEX, VRP, max pain, dealer regime, or the full stock summary looked like at that exact minute in history.
What Nobody Else Sells
Go look at the other options data providers. Polygon, ThetaData, ORATS, Intrinio, Tradier - all of them either ship raw ticks or end-of-day snapshots. You can reconstruct parts of the analytics layer yourself if you have the time and the pipeline, but you will spend six months writing the join, the BSM pass, the SVI fit, the per-strike aggregation, the regime classifier, the leak-free percentile calculator - and you will still end up with something that only resembles the live product on a good day.
FlashAlpha's Historical API collapses that work into one HTTP call. The same ExposureCalculator, NarrativeBuilder, VrpCalculator, VolatilityAnalyzer, and AdvancedVolatilityCalculator classes that power the live endpoints at lab.flashalpha.com also power the historical service at historical.flashalpha.com. Calculator bug-fixes land in both services simultaneously. What you see live, you see historically - exactly the same shape, exactly the same methodology.
Why This Is Hard
Pre-computed historical analytics require minute-level options quotes with greeks for every strike and expiration, anchored to forward prices, joined to end-of-day open interest, fitted with SVI, and cross-referenced against macro (VIX, VVIX, SKEW, MOVE) - all aligned to the exact timestamp you ask for. 80+ billion option rows, 23 million+ stock minute-bars, daily SVI fits, daily macro. Nobody else assembled this stack.
The at Parameter Is the Whole Idea
Every analytics endpoint takes one required query parameter: at. That is the as-of timestamp. Pass it and you get the response as it would have been computed at that minute.
| Format | Example | Semantics |
yyyy-MM-ddTHH:mm:ss | 2026-03-05T15:30:00 | Minute-level as-of. ET wall-clock. |
yyyy-MM-dd | 2026-03-05 | Defaults to 16:00 ET (session close). |
Option greeks, bid/ask, stock spot, and everything derived from them are intraday - one value per minute from 9:30 to 16:00 ET. Open interest, SVI parameters and macro are end-of-day values, applied across the session.
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://historical.flashalpha.com/v1/exposure/summary/SPY?at=2020-03-16T15:30:00"
One call. That's the full exposure dashboard - net GEX, net DEX, net VEX, net CHEX, gamma flip, regime label, interpretations, ±1% hedging estimates, 0DTE contribution - as of 15:30 ET on March 16, 2020. The day SPY closed -12%. Full case study here →
The Core Analytics Endpoints, Replayable
The Historical API mirrors the live endpoints response-for-response across 52 replay routes on identical paths. The core analytics set is below. Beyond it, the whole flow suite replays too - the raw options and stock trade tape, flow analytics, and the intraday OI simulator - which is covered in depth in Historical Options Flow Replay:
| Category | Endpoint | What you replay |
| Market data | /v1/stockquote/{ticker} | Stock bid/ask/mid/last at the minute |
| Market data | /v1/optionquote/{ticker} | Contract-level quotes + BSM greeks + OI (volume is on the tape route /v1/flow/options/{symbol}/history, SVI parameters on /v1/adv_volatility) |
| Market data | /v1/surface/{symbol} | 50×50 implied-vol surface grid |
| Exposure | /v1/exposure/gex/{symbol} | Gamma exposure by strike |
| Exposure | /v1/exposure/dex/{symbol} | Delta exposure by strike |
| Exposure | /v1/exposure/vex/{symbol} | Vanna exposure by strike |
| Exposure | /v1/exposure/chex/{symbol} | Charm exposure by strike |
| Exposure | /v1/exposure/summary/{symbol} | Full composite dashboard + regime + hedging |
| Exposure | /v1/exposure/levels/{symbol} | Gamma flip, call wall, put wall, max gamma strikes |
| Exposure | /v1/exposure/narrative/{symbol} | Verbal analysis + prior-day GEX delta + VIX context |
| Exposure | /v1/exposure/zero-dte/{symbol} | 0DTE regime, pin risk, expected move, decay |
| Max pain | /v1/maxpain/{symbol} | Pain curve, pin probability, dealer alignment |
| Composite | /v1/stock/{symbol}/summary | Price, vol, flow, exposure, macro - in one response |
| Volatility | /v1/volatility/{symbol} | RV ladder, IV-RV spread, skew, term structure |
| Volatility | /v1/adv_volatility/{symbol} | SVI params, forwards, total variance surface, arbitrage flags |
| VRP | /v1/vrp/{symbol} | Full VRP dashboard with leak-free percentiles |
| Liquidity | /v1/liquidity/{symbol} | Spread and depth quality at that minute |
| Dispersion | /v1/dispersion | Index vs single-name implied correlation |
| Expected move | /v1/expected-move/{symbol} | Straddle-implied move for the session |
| Strategies | /v1/strategies/{skew,term-structure,tail-pricing} | Structured vol-trade screens, point-in-time |
| Flow (tape) | /v1/flow/options/{symbol}/history | Per-minute signed option volume from the real trade tape |
| Flow (OI sim) | /v1/flow/oi/{symbol} | Official, simulated and effective OI + intraday delta |
| Flow (analytics) | /v1/flow/{gex,dex,levels,pin-risk,dealer-risk,summary} | Flow-adjusted exposure and levels |
| Coverage | /v1/tickers | What symbols and date ranges are loaded |
Every one of these endpoints exists in live form today, and every one is replayable at minute resolution. The archive holds 200+ symbols: 54 carry 8+ years of minute-level history, 14 run from 2017-01-03, and 52 replay the full flow suite. /v1/tickers returns the current list with date ranges.
Leak-Free By Design
The feature that most "historical options" services get wrong is the one that matters most for research: no future leakage. If you ask FlashAlpha for VRP percentile at 2022-06-14T15:30:00, the percentile is computed only from rows dated before 2022-06-14. The percentile at that moment reflects what was knowable at that moment. Ask for the same symbol six months later and the percentile will be different - because six months of new data went into the rolling window.
This matters because most backtests silently cheat. If your "historical VRP percentile" uses a percentile computed against the full 2018-2026 dataset, every 2019 observation is scored against knowledge that didn't exist in 2019. That's look-ahead bias. It inflates Sharpe ratios. It makes dead strategies look live. FlashAlpha's Historical API makes the honest version the default - it's actually harder to cheat than to do it right. Deep dive on leak-free percentiles →
Three Things You Can Build This Week
1. Backtest a GEX-Regime Strategy
Every strategy that conditions on dealer positioning ("short premium when dealers are long gamma", "fade gaps when GEX is negative", "buy straddles when we cross gamma flip") needs historical regime labels per minute. That's /v1/exposure/summary/{symbol} replayed across your training window.
import httpx, pandas as pd
from datetime import datetime, timedelta
dates = pd.bdate_range("2022-01-01", "2024-12-31")
rows = []
for d in dates:
ts = d.strftime("%Y-%m-%dT15:30:00")
r = httpx.get(
"https://historical.flashalpha.com/v1/exposure/summary/SPY",
params={"at": ts},
headers={"X-Api-Key": API_KEY},
).json()
rows.append({
"date": d, "net_gex": r["exposures"]["net_gex"],
"regime": r["regime"], "gamma_flip": r["gamma_flip"],
"spot": r["underlying_price"],
})
df = pd.DataFrame(rows)
That's the full research dataframe. Join next-day returns, condition on regime, measure the edge. Full backtesting walkthrough →
2. Train a Model on Dealer Positioning Features
For ML workflows, the Historical API is the feature store you were about to build yourself. Every minute of SPY since 2017-01-03 gives you net GEX, gamma flip distance, VRP z-score, net DEX, 0DTE contribution, vol surface shape, macro regime - about 40 dealer-positioning features per timestamp, all aligned to a single at key.
Pull the grid you want - daily close, half-hourly, or every minute - dump to parquet, and feed into XGBoost, a tabular transformer, or whatever architecture you prefer. The engineering bottleneck on options-ML projects has historically been the feature pipeline, not the model. This collapses it to a for-loop.
Feature density
8 years × 252 trading days × 390 minutes ≈ 786K minute-level sample rows for SPY alone, each with ~40 dealer-positioning features - roughly 31 million feature observations total. Before FlashAlpha, assembling this with correct greeks and leak-free percentiles was a multi-engineer, multi-quarter project. Now it's a weekend script.
3. Replay Any Historical Moment as a Research Artifact
Write blog posts. Teach a class. Build a "this week in 2020" email. Show clients what dealers were doing during the COVID crash, the 2022 bear market, the August 2024 VIX spike, the September 2025 volatility event. One curl, one timestamp, one real response. This is the content moat - and it's now a free side effect of the API.
Coverage Today
| Symbols | 200+ in the archive; 54 with 8+ years of minute-level history; 52 with flow replay - query GET /v1/tickers for the live list |
| Date range | 2017-01-03 → present for 14 symbols (extended each pipeline run); per-symbol first dates in /v1/tickers |
| Option rows | 80+ billion (7.7B for SPY alone) |
| Stock minute-bars | 23 million+ |
| Intraday granularity | 1 minute (quotes + greeks + spot) |
| Minimum tier | Alpha ($1,199/mo billed annually, $1,499/mo monthly) |
| Base URL | https://historical.flashalpha.com |
Authentication uses the same X-Api-Key as live.
Same Calculators, Same Shape, Same Bug-Fixes
This is worth repeating because it's the real moat: the historical service and the live service share the calculator layer. Every endpoint delegates to the same pure-static classes - ExposureCalculator, NarrativeBuilder, VrpCalculator, VolatilityAnalyzer, AdvancedVolatilityCalculator, StockSummaryBuilder.Build, VolSurfaceGridBuilder. When a calculator bug gets fixed, it gets fixed in both places the same day. When a field gets added to the live response, it appears historically too, backtestable across the whole archive from day one.
That means you can validate strategies historically and deploy them live without a rewrite. Same response shape, same field names, same regime labels, same interpretation text. The minute-level deploy is a config flip: swap the base URL from historical.flashalpha.com back to lab.flashalpha.com and change at to "now."
Further Reading
Historical API · Alpha tier · from $1,199/mo billed annually
Replay 52 analytics routes at any minute since 2017
Same response shape as live, leak-free percentiles, 80+ billion minute-level option rows and a 4.6-billion-print trade tape, back to 2017.
View pricing →
Upgrade to Alpha
Full API Spec
Check Coverage
FlashAlpha's Historical API is the first product to ship pre-computed options analytics - GEX, VRP, dealer regime, max pain, vol surfaces - replayable at any minute since 2017. Same calculators as live, same response shape, leak-free percentiles, 80+ billion option rows. Research, backtest, and train models against the same analytics layer you deploy to production. We have not found another provider that sells this, because assembling the stack was a multi-year engineering project. It's done now. Use it.