If you searched for historical options flow data, an options flow history API, or a way to backtest unusual options activity, you have probably hit the same wall everyone hits: flow products are live screens, and even where raw print archives exist, the derived state - the walls, the scored signals, the dealer risk - is not replayable. You cannot ask what the monitor said at 15:30 on August 5, 2024, which means you cannot test whether any of it predicts anything. FlashAlpha removes that wall.
51
Replay routes on the Historical API
4.66B
Raw option tape prints since 2017
17
Symbols with raw tape history
1 min
Replay resolution, 9:30-16:00 ET
What exactly replays
The Historical API at historical.flashalpha.com mirrors the live analytics AND flow endpoints - same paths and near-identical response shapes (a few documented deltas, notably the flat-array /v1/optionquote; the OpenAPI spec is authoritative), plus a required at timestamp (ET wall-clock). The flow suite specifically:
| Route family | Endpoints | What you get at ?at= |
| Raw options tape | /v1/flow/options/{symbol}/recent, /summary, /blocks, /history, /cumulative | The prints as they stood at that minute: per-trade records, block filter, minute buckets, session cumulative volume |
| Stock tape | /v1/flow/stocks/{symbol}/... plus leaderboard and outliers | Underlying tape context for the same clock |
| Flow analytics | /v1/flow/levels, /pin-risk, /summary, /gex, /dex, /dealer-risk, /oi, /signals | Flow-adjusted walls, pin magnets, live-flow GEX/DEX, dealer risk state, and the scored signal feed as-of that minute |
| Adjacent analytics | strategies, liquidity, dispersion, expected move, exposure suite | Everything a flow signal needs for context, same clock |
Three things stay live-only: earnings analytics, the screener, and structure pricing. Everything else on the live API reference has a historical twin - 51 routes in total. See the Historical API docs for auth and coverage, and the flow-replay endpoint reference for the route-by-route walkthrough of the tape and the intraday OI simulator.
No lookahead, by construction
The property that makes replayed flow backtestable is that a request for timestamp T returns only what a live system could have known at T. Two semantics matter:
- The tape is causal. A
/summary or /history call at 12:30 counts prints through 12:30 and nothing after. The session cumulative rebuilds from the same prints a live monitor would have consumed.
- Open interest is start-of-day. OI publishes once each morning, so replay serves the morning value for every minute of that session. You can verify this yourself: a contract's first trading day shows volume with OI = 0, and OI catches up the next session. That is not a limitation - it is exactly the information set a live desk had, and it is why size-vs-OI signal components replay honestly. More on point-in-time discipline in point-in-time options greeks.
Worked example: replaying the August 5, 2024 tape
August 5, 2024 - the yen carry unwind, VIX above 60 pre-open. Three calls, three moments of the same session:
import requests
BASE = "https://historical.flashalpha.com"
H = {"X-Api-Key": "YOUR_ALPHA_KEY"}
for t in ("10:00", "12:30", "15:30"):
r = requests.get(f"{BASE}/v1/flow/options/SPY/summary",
params={"at": f"2024-08-05T{t}:00"}, headers=H).json()
print(t, r["totalTrades"], r["netVolume"], r["contractsWithTrades"])
| As-of (ET) | Total trades | Buy volume | Sell volume | Net volume | Contracts traded |
| 10:00 | 174,618 | 324,983 | 337,709 | −12,726 | 4,560 |
| 12:30 | 566,788 | 1,322,658 | 1,367,376 | −44,718 | 5,816 |
| 15:30 | 929,195 | 2,401,038 | 2,426,330 | −25,292 | 6,491 |
Every number above is a live production response, not a mock. The full week around this session is replayed as a pre-registered study in the carry-unwind event study. The same day's scored signal feed replays too: /v1/flow/signals/SPY?at=2024-08-05T15:30:00 returns the top-scored prints as of that minute (default limit 50) - each with a 0-100 score, conviction label, sweep/block structure, opening-vs-closing bias, and a bullish/bearish intent classification - plus the chain context (call wall, put wall, max pain, gamma flip) the monitor showed at the time.
A first flow-signal backtest: 2024-2025, daily
Does the scored signal feed predict anything? We ran the simplest possible test: snapshot /v1/flow/signals/SPY at 15:30 ET every session from 2024-01-02 through 2025-12-31, aggregate the high-conviction net intent premium (bullish minus bearish premium across signals scoring 70+), and compare against the next session's close-to-close return. No fills, no strategy - a signal study, stated as such.
502 sessions collected (20 skipped for holidays and half-days; the final session has no next-day return, so the quintiles below cover 501). First observation before any return math: SPY's 15:30 signal tape is structurally bearish-tilted - the net high-conviction intent premium is negative in three of five quintile ranges. Index put flow is dominated by hedging, and the scorer's intent labels inherit that. Then the quintile table:
| Quintile (net HC intent premium) | Range ($) | N | Mean next-day return (bps) | Median (bps) | Sign agreement |
| 1 (most bearish) | -128.4M to -3.2M | 100 | +12.14 | +10.07 | 0.41 |
| 2 | -3.2M to -1.1M | 100 | +10.99 | +8.56 | 0.43 |
| 3 | -1.1M to -0.2M | 100 | +10.95 | +16.55 | 0.39 |
| 4 | -0.2M to +0.6M | 100 | +0.57 | +12.15 | 0.51 |
| 5 (most bullish) | +0.7M to +879M | 101 | +4.45 | +7.96 | 0.57 |
The straight reading: the naive daily aggregate is not a direction signal. There is no monotone pattern, sign agreement hovers at coin-flip, and if anything the relationship leans contrarian - the most bearish-flow sessions preceded the best average next-day returns, which is what you would expect if heavy put premium marks hedging demand near local lows rather than informed direction. Two years of replayed signal feed just told us in an afternoon what a live-only product could never tell us at all. That is the point: the negative result is cheap now, and the obvious next iterations - exclude 0DTE prints, weight by the OI-confirmed opening flag, condition on the gamma regime that ships in the same response - are each one more loop over the same replay.
Reproduce it: summary_grid.csv (one row per session: signal aggregates, wall/flip context, close), signals_vs_returns.csv (the quintile table), and artifacts.zip including the collection script. The whole study is ~1,000 REST calls - an afternoon of API quota, not an infrastructure project.
Honest limitations
- Tape hydration lags live. Historical tape backfills per symbol on a rolling basis. At the time of writing, SPY raw tape replays through 2026-06-05; the most recent weeks hydrate on a lag. Check
GET /v1/tickers on the historical host for current per-symbol coverage before you size a study.
- 17 symbols carry raw tape (4.66B prints since 2017). The analytics suite covers all 26 ramped symbols; the tape set is the subset with per-print history. The
has_flow field in /v1/tickers refers to flow-simulator hydration, not raw tape - when in doubt, probe the tape route directly.
- Minute buckets are not split by call/put.
/history gives buy/sell/mid/net per minute for the whole tape; a right= filter does not exist yet. Per-contract end-of-day volume exists in the store but is not yet surfaced by an endpoint.
- Half-days and one replay quirk: half-session dates (early 13:00 ET closes) are included; a 15:30 request there returns the end-of-session state. And the signals response's
underlying_price field is EOD-stamped in replay - use /v1/stockquote for intraday spot, which is minute-accurate.
- Known defect: the
official_oi baseline is 0 on the first trading day of each calendar year (a year-boundary snapshot hole). Size-vs-OI components are unreliable on those ~1 session/year; exclude them or carry the prior session's baseline.
- Throughput: expect ~20 requests/second within one cached day and ~6/second cold across days. A daily-grid study is minutes; a full minute-grid backfill over REST is not the tool - talk to us about bulk exports if you need the whole surface.
FAQ
- Can I get historical options flow data through an API?
- Yes. FlashAlpha's Historical API replays the full flow suite - raw tape, blocks, flow analytics, and the scored signal feed - at any minute since January 2017, across 51 replay routes. Earnings, the screener, and structure pricing are the only live-only surfaces.
- How far back does the options flow history go?
- The raw tape holds 4.66 billion prints across 17 symbols from 2017-01-03. Per-symbol hydration varies and recent weeks backfill on a lag (SPY verified through 2026-06-05 at the time of writing) - query GET /v1/tickers on the historical host for the live inventory.
- What subscription tier includes flow replay?
- Alpha ($1,499/mo monthly, $1,199/mo billed annually). Historical requests share the live daily quota bucket, and the same API key and SDKs work against both live and historical hosts.
Getting access
The Historical API - including the full flow replay suite - is part of the Alpha tier. Historical requests share the live daily quota bucket, and the same SDKs work against both hosts with a base-URL swap. If you want to validate the data before committing, the worked examples above are reproducible verbatim, and the study artifacts are free to download. Evaluating for a desk or fund? The quant-teams page collects the replay guarantees, bulk-export options, and team onboarding in one place.
ALPHA TIER - FLOW REPLAY
Backtest the tape yourself
51 replay routes, the full flow suite, 4.66 billion prints since 2017 - the study above cost about 1,000 API calls of the shared daily quota.
See Alpha pricing →
Flow data you cannot replay is anecdote; flow data you can replay is a dataset. The full FlashAlpha flow suite - raw tape, blocks, flow-adjusted GEX, dealer risk, and the scored signal feed - answers ?at= for any minute since 2017, with start-of-day OI semantics that make the replay honest. The first signal study is above, the artifacts are downloadable, and the same two lines of Python that ran it will run yours. Related: the complete quant backtesting guide, the Historical API overview, and the live flow API guide.