Historical Options Flow Data API: Backtest Flow Signals | FlashAlpha

Historical Options Flow Data API: Backtest Flow Signals

FlashAlpha's Historical API replays the full options flow suite - raw tape, blocks, flow GEX, dealer risk, and scored flow signals - at any minute since 2017. What is replayable, the exact no-lookahead semantics, and a 2-year flow-signal backtest with downloadable artifacts.

T
Tomasz Dobrowolski Quant Engineer
Jul 24, 2026
13 min read
OptionsFlow HistoricalData Backtesting FlowReplay DealerPositioning Quant API

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 familyEndpointsWhat you get at ?at=
Raw options tape/v1/flow/options/{symbol}/recent, /summary, /blocks, /history, /cumulativeThe 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 outliersUnderlying tape context for the same clock
Flow analytics/v1/flow/levels, /pin-risk, /summary, /gex, /dex, /dealer-risk, /oi, /signalsFlow-adjusted walls, pin magnets, live-flow GEX/DEX, dealer risk state, and the scored signal feed as-of that minute
Adjacent analyticsstrategies, liquidity, dispersion, expected move, exposure suiteEverything 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 tradesBuy volumeSell volumeNet volumeContracts traded
10:00174,618324,983337,709−12,7264,560
12:30566,7881,322,6581,367,376−44,7185,816
15:30929,1952,401,0382,426,330−25,2926,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 ($)NMean next-day return (bps)Median (bps)Sign agreement
1 (most bearish)-128.4M to -3.2M100+12.14+10.070.41
2-3.2M to -1.1M100+10.99+8.560.43
3-1.1M to -0.2M100+10.95+16.550.39
4-0.2M to +0.6M100+0.57+12.150.51
5 (most bullish)+0.7M to +879M101+4.45+7.960.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.

Live Market Pulse

Get fast visibility into market shifts with full-chain analytics over low-latency REST and MCP polling.

Intelligent Screening

Screen millions of option pairs per second using your custom EV rules, filters, and setups.

Export-Ready

Export structured signals to your own execution stack or broker integration - FlashAlpha delivers the analytics, you keep control of order routing.

Join the Community

Discord

Engage in real time conversations with us!

Twitter / X

Follow us for real-time updates and insights!

GitHub

Explore our open-source SDK, examples, and analytics resources!