Zero-DTE Strike Flow API
Per-strike signed aggressor flow over today's 0DTE session - for each bar and each strike, the signed delta-dollars, signed gamma-dollars, and contract count (per-bar increments, not cumulative), as three parallel arrays index-aligned to a top-level strikes_grid.
Endpoint
X-Api-Key)
Rate Limited: Yes
Alpha plan+
Parameters
| Name | In | Required | Default | Description |
|---|---|---|---|---|
symbol |
path | yes | - | Underlying symbol. Trimmed and upper-cased. |
bar |
query | no | 1m |
Bar size. Only 1m is supported in this phase (5m/15m are planned); any other value returns 400 bar_unavailable. |
minutes |
query | no | 60 |
Lookback window in minutes. Clamped to 1-390. |
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://lab.flashalpha.com/v1/flow/zero-dte/strike-flow/SPY?bar=1m&minutes=120"
import requests
resp = requests.get(
"https://lab.flashalpha.com/v1/flow/zero-dte/strike-flow/SPY",
params={"bar": "1m", "minutes": 120},
headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
print(data["strikes_grid"])
const resp = await fetch(
"https://lab.flashalpha.com/v1/flow/zero-dte/strike-flow/SPY?bar=1m&minutes=120",
{ headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log(data.strikes_grid);
Response
{
"symbol": "SPY",
"underlying_price": 590.42,
"expiration": "2026-06-05",
"bar_size": "1m",
"as_of": "2026-06-05T18:45:12Z", // UTC
"tier_used": "raw",
"strikes_grid": [588, 589, 590, 591, 592],
"bars": [
{
"t": "2026-06-05T18:44:00Z", // bar timestamp (UTC)
"spot": 590.42,
"signed_delta_dollars": [ -120000, 45000, 880000, 210000, -30000 ], // per strike
"signed_gamma_dollars": [ 18000, 24000, 96000, 31000, 9000 ],
"contracts": [ 1200, 1850, 5400, 2100, 640 ]
}
// ... ascending by t
],
"gap_intervals": []
}
No 0DTE samples returns 200 with empty strikes_grid and bars (no flag envelope), same as the series and heatmap endpoints. The gap_intervals array is reserved and not yet populated.
Key Response Fields
| Field | Type | Description |
|---|---|---|
underlying_price | number | Current underlying spot |
expiration | string | Today's 0DTE expiry (ET) |
bar_size | string | Echoes the requested bar size |
as_of | string | Server time the response was built (UTC) |
tier_used | string | Storage tier the data was read from |
strikes_grid | array | Strikes the per-bar arrays are index-aligned to |
bars[].t | string | Bar timestamp (UTC) |
bars[].spot | number | Underlying spot at the bar |
bars[].signed_delta_dollars | array | Per-strike signed delta-dollars (per-bar increment) |
bars[].signed_gamma_dollars | array | Per-strike signed gamma-dollars (per-bar increment) |
bars[].contracts | array | Per-strike contract count (per-bar increment) |
gap_intervals | array | Reserved for sampler-gap intervals; not yet populated |
Errors
| Status | Description |
|---|---|
400 | bar_unavailable - bar is anything other than 1m |
403 | tier_restricted - caller is below the Alpha plan |
About
The strike-flow endpoint returns per-strike signed aggressor flow over today's 0DTE session - for each bar and each strike, the signed delta-dollars, signed gamma-dollars, and contract count, all as per-bar increments (not cumulative).
Each bar carries three parallel arrays, each index-aligned to the top-level strikes_grid - the shape bubble-grid plotters want.
Common Use Cases
- Plot a bubble grid of
signed_delta_dollarsby strike and time, index-aligned tostrikes_grid, to see where directional flow concentrates - Pinpoint which strikes are absorbing the most aggressive flow each minute by scanning the largest-magnitude entries per bar
- Compare
signed_delta_dollarsagainstsigned_gamma_dollarsto separate directional from convexity flow and infer whether dealers are forced to chase - Weight per-strike flow by the
contractscount to confirm a move is backed by real participation rather than one large print - Watch the strikes nearest
underlying_pricefor a pin tug-of-war as same-day flow piles into the ATM region - Detect a sign flip in a strike's
signed_delta_dollarsacross bars as the moment aggressor flow at that level reverses direction
Related
Related reading
- Live 0DTE pin-risk API: the intraday flow-adjusted magnet - reading per-strike flow into the close as a pin signal
- Pin-risk score 0-100: how to read the 0DTE pin magnet - turning ATM strike flow into a pin read
Complementary endpoints
- Zero-DTE Heatmap - the full strike-by-time grid this single-strike flow feeds
- Zero-DTE Flow Snapshot - the live aggregate 0DTE regime for the same expiry
- Flow Pin Risk - the flow-adjusted pin magnet these strikes contribute to
Ready to build?
Get your free API key and start pulling live options data in 30 seconds.