Zero-DTE (0DTE) Analytics API - Real-Time Same-Day Expiration Data - FlashAlpha Lab API
Lab API Zero-DTE Analytics

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.

New to 0DTE trading? 5 strategies powered by this endpoint including gamma fades, pin plays, and theta harvesting. Also see: SPY 0DTE Playbook for SPY-specific setups.
Works with CME index futures. Pass ES=F or NQ=F and URL-encode the = as %3D - e.g. /v1/exposure/zero-dte/ES%3DF. Options-on-futures are priced with Black-76 using the CME multiplier ($50/pt ES, $20/pt NQ); CME index futures are Growth-tier. See the futures hub.

Endpoint

GET /v1/exposure/zero-dte/{symbol}
Auth required (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.
expiry query no today's 0DTE Target expiry (yyyy-MM-dd). Selects 1DTE / 2DTE / any expiry via the same 0DTE selector; omit for today's same-day expiry.
Requires Growth plan or higher. SPY has 0DTE every trading day. SPX 0DTE coverage is limited - the endpoint returns no_zero_dte on days SPX has no same-day expiry (check the flag).
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_hoursnumberHours until 4:00 PM ET. The single most important 0DTE context variable.
time_to_close_pctnumberPercentage of trading day elapsed (0=open, 100=close)
regime.labelstringpositive_gamma, negative_gamma, or undetermined. See gamma regime
regime.gamma_flipnumber0DTE-specific gamma flip (separate from full-chain)
exposures.pct_of_total_gexnumber0DTE GEX as % of full-chain GEX. >50% = 0DTE dominates intraday
expected_move.remaining_1sd_*numberShrinks in real-time as close approaches
expected_move.straddle_pricenumberATM 0DTE straddle mid - direct market-implied expected move
pin_risk.pin_scorenumber0-100 composite pin risk score: OI concentration (30%), magnet proximity (25%), time remaining (25%), gamma magnitude (20%)
pin_risk.max_painnumberStrike where total option holder intrinsic value is minimized. See /v1/maxpain for full analysis with pain curve, dealer alignment, and pin probability.
hedging.spot_*_half_pctobjectDealer hedging for ±0.5% moves - more relevant for 0DTE than ±1%
decay.theta_per_hour_remainingnumbernet_theta_dollars / time_to_close_hours - accelerates as denominator shrinks
decay.gamma_accelerationnumber0DTE ATM gamma / 7DTE ATM gamma. Typically 2-5x, can hit 10x+ near close - see gamma acceleration
decay.charm_regimestringtime_decay_dealers_buy or time_decay_dealers_sell - see charm regime
vol_context.iv_ratio_0dte_7dtenumber<1.0 = 0DTE is “cheap” vs term structure; >1.0 = event premium
flow.volume_to_oi_rationumber>1.0 = heavy day-trading (intraday flow exceeds overnight positioning)
levels.call_wallnumber0DTE strike with highest call GEX - intraday resistance
levels.put_wallnumber0DTE 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
403Requires Growth plan or higher
404Symbol not found or no data

Notes

  • SPY has 0DTE every trading day. SPX 0DTE coverage is limited - the endpoint returns no_zero_dte on days SPX has no same-day expiry (check the flag and next_zero_dte_expiry).
  • theta_per_hour_remaining is null when time_to_close_hours is 0 (market closed)
  • Near close (<5 minutes), a warnings array is included noting potential greek instability
  • strike_range only filters the strikes array - 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

  • Detect the intraday gamma regime - read gamma_regime to know whether 0DTE dealers are dampening or amplifying moves, and gate mean-reversion vs momentum tactics on it
  • Score pin risk into the close - use the pin_score and pin_strike to find the magnet strike OI concentration is pulling price toward, and decide whether to hold or close before settlement
  • Calibrate the remaining expected move - read expected_move to size straddle/strangle ranges that shrink as the close approaches and avoid stops inside the implied band
  • Estimate dealer hedging flow - use the ±0.5% and ±1% hedging scenarios to anticipate how many shares dealers buy or sell on the next move and size positions against that wall
  • Time theta harvesting - follow the accelerating decay curve to choose when to sell premium and when to take profit before gamma risk dominates
  • Gauge 0DTE vol cheapness - compare same-day IV against 7DTE IV to judge whether 0DTE premium is rich, cheap, or carrying event risk before structuring a trade
  • Feed intraday models - pipe pin_score, gamma_regime, and expected_move into an algo to trigger same-day setups programmatically

Related reading

Complementary endpoints

  • Flow Pin Risk - live, flow-adjusted pin magnet that updates intraday as OI shifts
  • Max Pain - confirm the 0DTE pin strike against the settled max-pain level
  • Key Levels - gamma flip, call wall, and put wall framing the same-day range
  • Live Flow GEX - intraday dealer gamma driving 0DTE hedging pressure

Ready to build?

Get your free API key and start pulling live options data in 30 seconds.