Zero-DTE (0DTE) Analytics API
Real-time 0DTE analytics for intraday options trading. Gamma regime, expected move, pin risk scoring, dealer hedging estimates, theta decay acceleration, and per-strike breakdown — all for same-day expiration contracts.
Endpoint
X-Api-Key)
Rate Limited: Yes
Growth+
Parameters
| Name | In | Required | Default | Description |
|---|---|---|---|---|
symbol |
path | yes | — | Underlying symbol (e.g. SPY, QQQ, SPX) |
strike_range |
query | no | 0.03 |
Fraction of spot to include in strikes array (0.001–0.10). Aggregates always use full chain. |
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://lab.flashalpha.com/v1/exposure/zero-dte/SPY"
import requests
resp = requests.get(
"https://lab.flashalpha.com/v1/exposure/zero-dte/SPY",
headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
print(f"0DTE GEX: ${data['exposures']['net_gex']:,.0f}")
print(f"Pin Score: {data['pin_risk']['pin_score']}/100")
print(f"Expected Move: ±${data['expected_move']['remaining_1sd_dollars']:.2f}")
const resp = await fetch(
"https://lab.flashalpha.com/v1/exposure/zero-dte/SPY",
{ headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log(`0DTE GEX: $${data.exposures.net_gex.toLocaleString()}`);
console.log(`Pin Score: ${data.pin_risk.pin_score}/100`);
console.log(`Expected Move: +/-$${data.expected_move.remaining_1sd_dollars.toFixed(2)}`);
Response
{
"symbol": "SPY",
"underlying_price": 590.42,
"expiration": "2026-03-19",
"as_of": "2026-03-19T14:45:12Z",
"market_open": true,
"time_to_close_hours": 1.25,
"time_to_close_pct": 80.8,
"regime": {
"label": "positive_gamma",
"description": "Dealers long gamma — moves dampened, mean reversion likely",
"gamma_flip": 588.50,
"spot_vs_flip": "above",
"spot_to_flip_pct": 0.33
},
"exposures": {
"net_gex": 1842000000,
"net_dex": 48200000000,
"net_vex": -320000000,
"net_chex": 95000000,
"pct_of_total_gex": 62.4,
"total_chain_net_gex": 2952000000
},
"expected_move": {
"implied_1sd_dollars": 2.18,
"implied_1sd_pct": 0.37,
"remaining_1sd_dollars": 1.05,
"remaining_1sd_pct": 0.18,
"upper_bound": 591.47,
"lower_bound": 589.37,
"straddle_price": 1.62,
"atm_iv": 0.123
},
"pin_risk": {
"magnet_strike": 590,
"magnet_gex": 580000000,
"distance_to_magnet_pct": 0.07,
"pin_score": 82,
"max_pain": 590,
"oi_concentration_top3_pct": 41.2,
"description": "Strong pin at 590. 82/100 pin score with 41% of OI in top 3 strikes."
},
"hedging": {
"spot_up_half_pct": { "dealer_shares_to_trade": -156100, "direction": "sell", "notional_usd": -92158000 },
"spot_down_half_pct": { "dealer_shares_to_trade": 156100, "direction": "buy", "notional_usd": 92158000 },
"spot_up_1pct": { "dealer_shares_to_trade": -312200, "direction": "sell", "notional_usd": -184316000 },
"spot_down_1pct": { "dealer_shares_to_trade": 312200, "direction": "buy", "notional_usd": 184316000 }
},
"decay": {
"net_theta_dollars": -4820000,
"theta_per_hour_remaining": -3856000,
"charm_regime": "time_decay_dealers_buy",
"charm_description": "Time decay pushing dealers to buy — supportive into close",
"gamma_acceleration": 2.4,
"description": "0DTE theta bleeding $3,856/hr. Gamma 2.4x higher than equivalent 7DTE."
},
"vol_context": {
"zero_dte_atm_iv": 12.3,
"seven_dte_atm_iv": 14.8,
"iv_ratio_0dte_7dte": 0.83,
"vix": 16.2,
"vanna_exposure": -320000000,
"vanna_interpretation": "vol_up_dealers_sell",
"description": "0DTE IV at 12.3% vs 7DTE at 14.8%. Negative vanna — vol spike triggers dealer selling."
},
"flow": {
"total_volume": 842000,
"call_volume": 520000,
"put_volume": 322000,
"total_oi": 1240000,
"call_oi": 680000,
"put_oi": 560000,
"pc_ratio_volume": 0.619,
"pc_ratio_oi": 0.824,
"volume_to_oi_ratio": 0.679
},
"levels": {
"call_wall": 595,
"call_wall_gex": 420000000,
"put_wall": 585,
"put_wall_gex": -380000000,
"highest_oi_strike": 590,
"highest_oi_total": 48200,
"max_positive_gamma": 592,
"max_negative_gamma": 586
},
"strikes": [
{
"strike": 590,
"call_gex": 450000000, "put_gex": -380000000, "net_gex": 70000000,
"call_dex": 12500000, "put_dex": -15000000, "net_dex": -2500000,
"call_oi": 25000, "put_oi": 30000,
"call_volume": 15000, "put_volume": 12000,
"call_iv": 0.18, "put_iv": 0.19,
"call_delta": 0.50, "put_delta": -0.50,
"call_gamma": 0.025, "put_gamma": 0.025,
"call_theta": -1.0, "put_theta": -1.0
}
]
}
Key Response Fields
| Field | Type | Description |
|---|---|---|
time_to_close_hours | number | Hours until 4:00 PM ET. The single most important 0DTE context variable. |
time_to_close_pct | number | Percentage of trading day elapsed (0=open, 100=close) |
regime.label | string | positive_gamma, negative_gamma, or undetermined |
regime.gamma_flip | number | 0DTE-specific gamma flip (separate from full-chain) |
exposures.pct_of_total_gex | number | 0DTE GEX as % of full-chain GEX. >50% = 0DTE dominates intraday |
expected_move.remaining_1sd_* | number | Shrinks in real-time as close approaches |
expected_move.straddle_price | number | ATM 0DTE straddle mid — direct market-implied expected move |
pin_risk.pin_score | number | 0–100 composite: OI concentration (30%), magnet proximity (25%), time remaining (25%), gamma magnitude (20%) |
pin_risk.max_pain | number | Strike where total option holder intrinsic value is minimized |
hedging.spot_*_half_pct | object | Dealer hedging for ±0.5% moves — more relevant for 0DTE than ±1% |
decay.theta_per_hour_remaining | number | net_theta_dollars / time_to_close_hours — accelerates as denominator shrinks |
decay.gamma_acceleration | number | 0DTE ATM gamma / 7DTE ATM gamma. Typically 2–5x, can hit 10x+ near close |
vol_context.iv_ratio_0dte_7dte | number | <1.0 = 0DTE is “cheap” vs term structure; >1.0 = event premium |
flow.volume_to_oi_ratio | number | >1.0 = heavy day-trading (intraday flow exceeds overnight positioning) |
levels.call_wall | number | 0DTE strike with highest call GEX — intraday resistance |
levels.put_wall | number | 0DTE strike with highest put GEX — intraday support |
No 0DTE Expiry
If the symbol has no 0DTE expiry today (e.g. SPY on Tuesday/Thursday):
{
"symbol": "SPY",
"underlying_price": 590.42,
"expiration": null,
"as_of": "2026-03-17T15:30:00Z",
"market_open": true,
"no_zero_dte": true,
"message": "No 0DTE expiry for SPY today (Tuesday). Next expiry: 2026-03-18.",
"next_zero_dte_expiry": "2026-03-18"
}
Errors
| Status | Description |
|---|---|
403 | Requires Growth plan or higher |
404 | Symbol not found or no data |
Notes
- SPY has 0DTE on Mon/Wed/Fri. SPX (SPXW) has daily 0DTE.
theta_per_hour_remainingisnullwhentime_to_close_hoursis 0 (market closed)- Near close (<5 minutes), a
warningsarray is included noting potential greek instability strike_rangeonly filters thestrikesarray — all aggregate calculations use the full 0DTE chain- All calculations are pure static (no external calls beyond the initial data fetch)
What Is 0DTE Trading?
Zero days to expiration (0DTE) options expire on the same day they are traded. These contracts have extreme gamma — small moves in the underlying produce outsized changes in delta, forcing dealers into aggressive hedging activity. 0DTE options now account for over 40% of total SPX options volume on many trading days, making them the single largest driver of intraday price action.
Because 0DTE gamma is typically 2–5x higher than equivalent 7DTE gamma, dealer hedging flows are amplified. When 0DTE dominates total GEX (>50%), intraday support/resistance levels, pin risk, and expected move are all driven primarily by same-day expiration positioning.
Common Use Cases
- Intraday gamma regime detection — know whether 0DTE dealers are dampening or amplifying moves
- Pin risk assessment — identify strikes where OI concentration creates magnetic price attraction near close
- Expected move calibration — real-time remaining expected move that shrinks as close approaches
- Dealer hedging flow estimation — ±0.5% and ±1% hedging scenarios for intraday position sizing
- Theta decay timing — accelerating time decay curve for premium selling strategies
- Vol context — compare 0DTE IV vs 7DTE to gauge relative cheapness or event premium
- Algo trading signals — feed pin score, gamma regime, and expected move into intraday models