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.
50+
Replay routes on the Historical API
4.66B
Raw option tape prints since 2017
52
Symbols with flow replay
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, same fields, same response shapes - 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 |
50+ routes on the live API reference have a historical twin on an identical path. 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 - the information set a live desk had, which is why size-vs-OI signal components replay correctly. 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, not an infrastructure project.
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 50+ replay routes on identical paths.
- How far back does the options flow history go?
- The raw tape holds 4.66 billion prints from 2017-01-03, and 52 symbols replay the full flow suite. GET /v1/tickers on the historical host returns the live inventory.
- What subscription tier includes flow replay?
- Alpha ($1,499/mo monthly, $1,199/mo billed annually). The same API key and SDKs work against both live and historical hosts.
Getting access
The Historical API - including the flow replay suite - is part of the Alpha tier. 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
50+ replay routes, the full flow suite, 4.66 billion prints since 2017 - the study above took about 1,000 API calls.
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 no lookahead. 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.