DEV Community

Cover image for 12 Things You Can Do with a Minute-Level Historical Options Data API
tomasz dobrowolski
tomasz dobrowolski

Posted on • Originally published at flashalpha.com

12 Things You Can Do with a Minute-Level Historical Options Data API

Originally published on flashalpha.com.

What can you actually do with historical options data? In practice: backtest strategies against real bid/ask quotes, measure whether 0DTE straddles are systematically overpriced, rebuild IV rank and skew history, test whether GEX walls and max pain actually hold, and replay crisis days minute by minute.

FlashAlpha Historical stores 80+ billion minute-level option rows across 200+ symbols — 26 of them fully analytics-ramped (SPY, QQQ, SPX/SPXW, XSP, IWM, TSLA, NVDA and more) — plus 23M+ stock minute-bars, with coverage from January 2017 onward. Every live analytics endpoint can be replayed at any minute in that window via a single at= parameter.

Here are 12 projects, most impactful first, each with the exact endpoint behind it.

1. Pull the full option chain as it looked at any minute since 2017

The foundational primitive: /v1/optionquote returns every SPY contract's bid, ask, mid, implied vol, full BSM greeks (delta, gamma, theta, vega, rho, vanna, charm), and open interest exactly as they stood at any minute between 09:30 and 16:00 ET on any trading day since January 3, 2017. No reconstruction on your side — one call, one as-of chain.

curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://historical.flashalpha.com/v1/optionquote/SPY?at=2026-03-05T15:30:00&expiry=2026-03-06&strike=680&type=C"
Enter fullscreen mode Exit fullscreen mode

Everything else on this list is built on top of this call.

2. Backtest strategies against real bid/ask quotes, not theoretical fills

Most options backtests die on fills: they price entries at a theoretical mid that never existed, on a dead contract with a $2 wide market. Because the archive stores the actual NBBO at minute resolution, you can enter at the real ask and exit at the real bid.

Two filters, maxSpreadPct and maxSpreadAbs, drop wide "ghost quotes" on illiquid contracts before they poison your fill model, and structurally invalid quotes (crossed or one-sided markets) are always removed. The X-Filtered-Out response header tells you exactly how many contracts were vetoed.

# Liquidity gauntlet: max 8% relative spread AND max $0.25 absolute spread
curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://historical.flashalpha.com/v1/optionquote/SPY?at=2026-03-05T15:30:00&expiry=2026-03-06&maxSpreadPct=0.08&maxSpreadAbs=0.25"
Enter fullscreen mode Exit fullscreen mode

Worked example on this data: SPY Put Credit Spread Matrix: 8-Year Backtest — theoretical vs realized P&L across strikes and DTEs.

3. Test whether 0DTE straddles are systematically overpriced

The most-asked 0DTE question has a testable answer. /v1/exposure/zero-dte returns the same-day straddle price and the implied 1-sigma expected move at any minute — and time_to_close_hours is computed from your at= timestamp, so the remaining expected move is accurate to the minute.

Pull it at 10:00 ET every day for a few years, compare the implied move to the realized close-to-close move, and you have a distribution of implied-vs-realized 0DTE moves: the raw material for deciding whether selling (or buying) the same-day straddle carries edge, and at which time of day. The same endpoint returns pin risk, magnet strikes, OI concentration, and 0DTE share of total gamma for every historical session.

We ran this exact study across 193 sessions: Are 0DTE Straddles Overpriced?

4. Replay March 16, 2020 minute by minute

The best read in the archive. At 15:30 ET on the day SPY closed down 12%, the historical API shows spot at 246.01, dealers short gamma with net GEX at -$2.8B, net delta exposure at -$173B, and vanna exposure at +$154B — the exact mechanical setup that amplified every move into the close.

curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://historical.flashalpha.com/v1/exposure/summary/SPY?at=2020-03-16T15:30:00"
Enter fullscreen mode Exit fullscreen mode

Replaying days like this — Covid, the 2022 bear legs, the August 2024 vol shock — is the cheapest regime-recognition training a discretionary trader can buy: you watch positioning deteriorate in real data instead of reading about it afterward.

5. Build an ATM IV time series and IV rank history

Walk at= forward one trading day at a time (a bare date defaults to the 16:00 ET close) against /v1/stock/{symbol}/summary and you get ATM IV, HV20, HV60, VRP, and skew in one call per day — an instant IV time series without stitching vendors together. IV rank and IV percentile history fall out in a few lines of pandas:

import httpx, pandas as pd
from tqdm import tqdm

API_KEY = "..."
BASE = "https://historical.flashalpha.com"
dates = pd.bdate_range("2019-01-01", "2026-06-30")

rows = []
with httpx.Client(headers={"X-Api-Key": API_KEY}, timeout=30) as c:
    for d in tqdm(dates):
        r = c.get(f"{BASE}/v1/stock/SPY/summary", params={"at": d.strftime("%Y-%m-%d")})
        if r.status_code != 200: continue
        v = r.json()["volatility"]
        rows.append({"date": d, "atm_iv": v["atm_iv"], "hv_20": v["hv_20"], "vrp": v["vrp"]})

iv = pd.DataFrame(rows).set_index("date")
iv["iv_rank_252d"] = iv["atm_iv"].rolling(252).apply(
    lambda w: (w.iloc[-1] - w.min()) / (w.max() - w.min()) * 100)
# rolling window only sees the past: the rank series is walk-forward by construction
Enter fullscreen mode Exit fullscreen mode

The same loop, pointed at a 10:00 ET timestamp instead of the close, gives you a morning IV series — useful for entry-time studies. You can finally answer "was 18 vol actually cheap in March 2026?" with data instead of memory.

6. Reconstruct a 25-delta skew history

The same daily walk gives you skew_25d — put wing IV minus call wing IV at 25 delta — straight from the summary response, or per-expiry skew profiles from /v1/volatility. Chart it through 2018–2026 and every stress regime is visible — though when we ran the study across 413 weeks, the "early warning" folklore failed in an interesting way: SPY 25-Delta Skew History.

7. Build a volatility cone from 8 years of realized vol

A volatility cone needs one thing: a long, clean daily price history. /v1/stock/{symbol}/prices returns up to 2000 daily OHLC bars per call, and /v1/volatility serves the realized-vol ladder (5/10/20/30/60-day) computed on it at any historical date. Compute rolling realized vol at each horizon, take percentile bands, and you have the cone: today's IV plotted against where realized vol has actually lived at that horizon. The fastest sanity check for "is vol cheap or rich right now."

Published result: The SPY Volatility Cone: 8 Years of Realized Vol Percentiles.

8. Backtest GEX regimes and test whether walls hold

Everyone quotes the GEX thesis — positive gamma dampens, negative gamma amplifies — but almost nobody tests it, because historical GEX barely exists as a product. With /v1/exposure/gex and /v1/exposure/levels you can pull the net GEX, gamma flip, call wall, and put wall for every session since 2017 and measure it directly: conditional next-day realized vol by regime, wall touch-and-reject rates, flip-cross behavior.

We ran a version ourselves: GEX, DEX, VEX, CHEX: 8-Year SPY/VIX Backtest.

9. Harvest the volatility risk premium with leak-free percentiles

The classic premium-selling rule — "sell when VRP percentile is above 80" — is only testable if the percentile at each historical date uses only data available at that date. /v1/vrp is date-bounded by construction: percentiles and z-scores at at= are computed exclusively from snapshots strictly before that date. No lookahead, no quiet inflation of your backtest Sharpe.

The endpoint also returns IV-RV spreads at four horizons, term VRP, GEX-conditioned harvest scores, and strategy scores per structure.

10. Watch the whole vol surface reprice through events

/v1/surface builds a 50×50 implied-vol grid over tenor and log-moneyness at any minute, and /v1/adv_volatility exposes the daily SVI parameters, forward prices, arbitrage flags, and variance-swap fair values behind it. Sample the surface at successive minutes through an event — a Fed day, an earnings-adjacent macro shock, the Covid crash — and you can animate how the smile twists and the term structure inverts in real time.

For vol researchers, per-expiry SVI parameter history (a, b, rho, m, sigma) since 2017 is a calibration dataset that is genuinely hard to find anywhere.

11. Measure whether max pain actually pins

Max pain is a theory with a testable prediction: price gravitates toward the strike that minimizes option-holder payout into expiration. /v1/maxpain returns the max pain strike, full pain curve, pin probability, and dealer alignment at any historical minute — so you can check the prediction against every expiry since 2017, split by OPEX vs daily expirations, and by whether dealer positioning agreed.

Published 534-day sample: SPY Max Pain History by Date.

12. Turn term-structure inversion into a risk signal

The IV term structure spends most of its life in contango; inversion is the market pricing near-term stress. The historical stock summary carries the VIX term structure (VIX9D / VIX / VIX3M / VIX6M with slope and contango/backwardation label) as EOD macro context, and /v1/volatility serves SPY's own per-expiry IV term structure at any minute.

Build the daily series, flag inversions, and test the obvious rule: de-risk when the front inverts, re-risk when contango restores. We tested it across 37 inversion episodes — the answer surprised us: VIX Term Structure Inversions Since 2018.

More ideas worth an afternoon

  • FOMC vol-crush event studies — pull ATM IV and vanna/charm exposure at 13:55 and 14:30 ET on every Fed day; measure the crush and the dealer-flow shift minute by minute.
  • Greeks P&L attribution on past trades — reprice any historical position minute by minute from /v1/optionquote and decompose its P&L into delta, gamma, theta, and vega contributions. The honest post-mortem tool.
  • Charm-into-close and OPEX-week studies — test the "charm flows support the close" folklore with /v1/exposure/chex across years of sessions.
  • Liquidity regime mapping — use the spread filters plus the X-Filtered-Out header to measure when SPY option spreads blow out: open, close, crash days.

Coverage, resolution & access

  • Coverage: 26 fully-ramped symbols, most from January 2017 to present; minute-level option archives for 200+ symbols. Additional symbols backfilled on demand — /v1/tickers reports the live coverage map, per-table health, and known gaps.
  • Resolution: option quotes, greeks, and stock spot at 1-minute granularity (09:30–16:00 ET); open interest, SVI fits, and macro (VIX, VVIX, SKEW, MOVE, DGS10) applied at end of day.
  • No lookahead by design: every endpoint answers as-of at=; VRP percentiles are date-bounded to strictly earlier snapshots.
  • Access: same X-Api-Key as the live API, base URL https://historical.flashalpha.com. Full conventions in the historical API overview.

Conclusion

Every project on this list reduces to the same primitive: ask the market a question as of a specific minute, and trust that the answer only uses what was knowable then. That's what makes minute-level, as-of historical options data different from EOD aggregates or raw tick dumps — the analytics arrive already point-in-time correct.

Pick the project closest to how you trade, pull the endpoint behind it, and let the data argue with your priors. The complete endpoint guide is the reference.


Questions or a symbol you'd like backfilled? Find us on Discord or GitHub.

Top comments (0)