Zero-DTE Flow Series API
An intraday time series of today's 0DTE flow, one bar per sampled interval, for charting headline metrics (net GEX/DEX, gamma flip, walls, magnet, pin score/probability, regime, ATM IV, charm) and cumulative dealer hedge-flow over the session.
Endpoint
X-Api-Key)
Rate Limited: Yes
Growth plan+
Parameters
| Name | In | Required | Default | Description |
|---|---|---|---|---|
symbol |
path | yes | - | Underlying symbol (e.g. SPY, SPX). Trimmed and upper-cased. |
bar |
query | no | 30s |
Bar size. Allowed: 30s, 1m, 5m, 15m. Anything else returns 400 invalid_bar. Raw storage is 30s; larger sizes are downsampled last-in-bucket. |
minutes |
query | no | 60 |
Lookback window in minutes. Clamped to 1-390 (one full RTH session). |
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://lab.flashalpha.com/v1/flow/zero-dte/series/SPY?bar=1m&minutes=120"
import requests
resp = requests.get(
"https://lab.flashalpha.com/v1/flow/zero-dte/series/SPY",
params={"bar": "1m", "minutes": 120},
headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
print(len(data["bars"]))
const resp = await fetch(
"https://lab.flashalpha.com/v1/flow/zero-dte/series/SPY?bar=1m&minutes=120",
{ headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log(data.bars.length);
Response
{
"symbol": "SPY",
"expiration": "2026-06-05", // today (ET); the 0DTE expiry being sampled
"as_of": "2026-06-05T18:45:12Z", // server time the response was built (UTC)
"bar_size": "1m", // echoes the requested bar
"bars": [
{
"t": "2026-06-05T18:44:00Z", // bar timestamp (UTC, snapped to :00/:30 ET upstream)
"spot": 590.42,
"net_gex": 1842000000,
"net_dex": 48200000000,
"gamma_flip": 588.50, // nullable
"call_wall": 595.0, // nullable
"put_wall": 585.0, // nullable
"magnet": 590.0, // nullable
"pin_score": 82, // 0-100
"pin_probability_pct": 64.1, // nullable
"regime": "positive_gamma",
"atm_iv": 0.123, // nullable
"charm_dollars_per_hour": -3856000, // nullable
"hedge_flow_call_cumulative": 18432000, // $-units, since session open
"hedge_flow_put_cumulative": -9210000,
"hedge_flow_cumulative_all": 9222000 // call + put cumulative
}
// ... one entry per downsampled bucket in the window, ascending by t
]
}
There is no separate no_zero_dte / session_closed envelope here. When the symbol has no 0DTE samples today, the endpoint still returns 200 with the normal wrapper and an empty bars array.
Key Response Fields
| Field | Type | Description |
|---|---|---|
expiration | string | Today's 0DTE expiry being sampled (ET) |
as_of | string | Server time the response was built (UTC) |
bar_size | string | Echoes the requested bar size |
bars[].t | string | Bar timestamp (UTC, snapped to :00/:30 ET upstream) |
bars[].spot | number | Underlying spot at the bar |
bars[].net_gex | number | Net gamma exposure |
bars[].net_dex | number | Net delta exposure |
bars[].gamma_flip | number/null | Gamma flip level |
bars[].call_wall | number/null | Call wall level |
bars[].put_wall | number/null | Put wall level |
bars[].magnet | number/null | Magnet level |
bars[].pin_score | integer | Pin score, 0-100 |
bars[].pin_probability_pct | number/null | Pin probability percent |
bars[].regime | string | Gamma regime label |
bars[].atm_iv | number/null | At-the-money implied volatility |
bars[].charm_dollars_per_hour | number/null | Charm in dollars per hour |
bars[].hedge_flow_call_cumulative | number | Cumulative call hedge-flow ($-units) since session open |
bars[].hedge_flow_put_cumulative | number | Cumulative put hedge-flow ($-units) since session open |
bars[].hedge_flow_cumulative_all | number | Call + put cumulative hedge-flow |
Errors
| Status | Description |
|---|---|
400 | invalid_bar - bar was not one of 30s / 1m / 5m / 15m |
403 | tier_restricted - caller is below the Growth plan |
About
The series endpoint returns an intraday time series of today's 0DTE flow - one bar per sampled interval - for charting headline metrics and cumulative dealer hedge-flow over the session.
Bars are read from the raw sampler tier (snapped to :00/:30 ET), windowed to the last minutes, then downsampled to the requested bar size by keeping the last sample in each bucket, so cumulative values stay current.
Common Use Cases
- Chart
net_gex,net_dex, andgamma_flipover today's session to see the dealer-positioning landscape evolve bar by bar - Track how
call_wall,put_wall, andmagnetmigrate intraday to anticipate where price gets pulled or capped as the day plays out - Plot
hedge_flow_cumulative_allagainstspotto watch dealer hedging pressure build and confirm whether flow is reinforcing or fighting the move - Monitor
pin_scoreandpin_probability_pctclimbing as expiry approaches to time a pin or breakout fade - Detect
regimetransitions between positive and negative gamma, the bar where volatility behaviour is most likely to change - Overlay
charm_dollars_per_hourandatm_ivto gauge how fast positioning is decaying into the close
Related
Related reading
- Live 0DTE pin-risk API: the intraday flow-adjusted magnet - how the magnet and pin score evolve through the session
- 0DTE SPY: the complete intraday playbook - using the intraday series to trade same-day options
Complementary endpoints
- Zero-DTE Flow Snapshot - the latest single-point read these bars are sampled from
- Zero-DTE Heatmap - the strike-by-time grid behind the headline series
- Zero-DTE Exposure - the settled-OI 0DTE baseline
Ready to build?
Get your free API key and start pulling live options data in 30 seconds.