Machine-readable SPX dealer market structure - walls, gamma flip, GEX, the scored strike ladder, implied 50%/80% forecast bands, strike activity, and the regime label - recomputed ~every 10 seconds during market hours. Built for agents (MCP) and scripts (REST), on one key.
Answer first: yes, this is a live SPX gamma exposure (GEX) API for 0DTE. One key gives AI agents an MCP server and scripts a REST endpoint, returning dealer gamma positioning, net GEX, call and put walls, the zero-gamma flip, and the dealer regime, refreshed about every 10 seconds during market hours. $100/month, one key covers both. It is market-structure data for your own analysis, not investment advice.
$100/mo
7-day free trial for new subscribers, then $100/mo - cancel anytime
Already have an account? Log in
One key covers both MCP and REST. Live reads are unlimited within the per key rate limit. Every key can read up to 10 different history days in any 24 hours; a day you already read in that window does not count again. Not investment advice.
Endpoint https://api.zdte.ai/mcp, authenticated via an X-API-Key header. Any MCP client that speaks the Streamable HTTP transport can connect.
Claude Code
claude mcp add --transport http zdte https://api.zdte.ai/mcp --header "X-API-Key: YOUR_KEY"Claude Desktop
Add this to your claude_desktop_config.json:
{
"mcpServers": {
"zdte": {
"type": "http",
"url": "https://api.zdte.ai/mcp",
"headers": {
"X-API-Key": "YOUR_KEY"
}
}
}
}Any other MCP client
Point it at the endpoint above over the Streamable HTTP transport and send X-API-Key: YOUR_KEY as a request header - no OAuth flow, no session negotiation.
Every MCP tool has a thin REST v1 mirror at https://api.zdte.ai, using the same agent key, paid-call gate, and byte-identical JSON body.
Send either X-API-Key: YOUR_KEY or Authorization: Bearer YOUR_KEY. If both are present, X-API-Key wins.
curl
curl https://api.zdte.ai/v1/market-structure \
-H "X-API-Key: YOUR_KEY"Python (httpx)
import httpx
resp = httpx.get(
"https://api.zdte.ai/v1/market-structure",
headers={"X-API-Key": "YOUR_KEY"},
timeout=10.0,
)
resp.raise_for_status()
data = resp.json()
print(data["regime"], data["gamma_flip"])GET /v1/market-structure
{
"available": true,
"as_of": "2026-07-19T17:32:05Z",
"marketState": "pinned",
"confidence_dots": 4,
"spot": 7562.35,
"gamma_flip": 7540.00,
"call_wall": 7600.00,
"put_wall": 7500.00,
"total_gex": 2850000000,
"max_pain": 7560.00,
"gamma": {
"flip_distance": 0.003,
"call_gex": 3100000000,
"put_gex": -250000000,
"gex_above_spot": 1800000000,
"gex_below_spot": 1050000000,
"gex_imbalance": 0.42,
"gex_profile_skew": 0.31,
"profile": [
{ "strike": 7600, "net_gex": 1240000000, "call_gex": 1490000000, "put_gex": -251000000 }
]
},
"expected_move": {
"em_open": 7551.20,
"em_straddle_price": 80.10,
"em_full_day_points": 104.30,
"em_remaining_points": 68.09,
"em_band_upper": 7655.50,
"em_band_lower": 7446.90,
"em_fence_frozen": true,
"computed_at_utc": "2026-07-19T17:32:05Z"
},
"session": {
"session_open": 7551.20,
"session_high": 7574.80,
"session_low": 7544.10,
"prev_close": 7546.30,
"gap_points": 4.90
},
"flow": {
"flow_direction": -0.012,
"sweep_score": 1.0,
"dealer_bias": "neutral"
},
"vanna_charm": {
"total_vanna": -12300000,
"total_charm": 9880000,
"strikes": [
{ "strike": 7560, "vanna": -140.0, "charm": 42.0 }
]
},
"minutes_to_close": 118,
"pressure_points": [
{ "strike": 7600, "label": "CALL WALL", "cls": "resist", "score": 90 },
{ "strike": 7500, "label": "PUT WALL", "cls": "support", "score": 80 }
],
"forecast_band": {
"points": [
{
"minutes_from_now": 30,
"median": 7563.1,
"band_50_low": 7554.2,
"band_50_high": 7572.0,
"band_80_low": 7545.8,
"band_80_high": 7580.4
}
],
"horizon_minutes": 120,
"regime_at_compute": "pinned",
"implied_move_atm_pts": 22.4,
"computed_at_utc": "2026-07-19T17:32:05Z",
"disclaimer_required": true
},
"strike_activity": [
{
"strike": 7550,
"total_volume": 18400,
"call_volume": 9600,
"put_volume": 8800,
"call_oi": 12500,
"put_oi": 11800,
"call_mark": 14.20,
"put_mark": 12.85,
"distance_pct": 0.16,
"position_label": "at spot"
}
],
"vix": { "vix_spot": 14.82, "vix9d": 14.10, "vix3m": 15.63, "vix_basis": 0.81, "vvix": 98.40, "iv_atm": 0.142, "iv_skew_25d": 0.021 },
"realized_vol": { "rv_mean": 0.0912, "rv_std": 0.0605 },
"tier": "pro"
}GET /v1/regime
{
"available": true,
"marketState": "pinned",
"confidence_dots": 4,
"tier": "pro"
}GET /v1/history/dates
{
"dates": ["2026-07-16", "2026-07-17", "2026-07-18"],
"count": 3
}GET /v1/history/2026-07-18
{
"available": true,
"date": "2026-07-18",
"summary": { "open": 7480.2, "high": 7540.6, "low": 7472.9, "close": 7521.3 },
"prices": [{ "time": 1721318400, "value": 7480.2 }],
"sample_count": 390,
"timeline": [
{
"t": 1721318400,
"spot": 7480.2,
"marketState": "pinned",
"gamma_flip": 7460.0,
"call_wall": 7520.0,
"put_wall": 7440.0,
"gex_total": 1240000000,
"gex_imbalance": 0.22,
"iv_atm": 0.138,
"max_pain": 7500.0,
"vix": 14.9
}
]
}timeline is included on the paid tier only.
The same 8 operations, reachable as either an MCP tool call or a REST route.
| MCP tool | REST route | What it returns |
|---|---|---|
| get_market_structure | GET /v1/market-structure | Current SPX dealer market structure: walls, gamma flip, net GEX + gamma-profile depth, dealer regime, scored pressure points, forecast band, strike activity, VIX term structure + IV/skew, realized-vol stats, the 0DTE expected move and its session fence, max pain, session open/high/low with the prior close and gap, order-flow measurements, and chain vanna/charm with a per-strike ladder. |
| get_regime | GET /v1/regime | Current SPX dealer regime label + confidence only. |
| list_history_dates | GET /v1/history/dates | Available historical replay dates. |
| get_day | GET /v1/history/{date} | Per-day market-structure timeline + summary for one replay date (YYYY-MM-DD). |
| get_regime_segments | GET /v1/history/{date}/segments | Compressed dealer-regime segment tape for one replay date. |
| subscribe_event | POST /v1/subscriptions | Register an HTTPS callback for an event (see Webhooks below). |
| unsubscribe | DELETE /v1/subscriptions/{id} | Remove a webhook subscription. |
| list_subscriptions | GET /v1/subscriptions | List your active webhook subscriptions. |
| get_field_guide | MCP tool only | Static, versioned dictionary of every field this surface emits - unit, value set where there is one, and a one-sentence meaning - plus the shared response conventions (tier, delay, timestamps, and how missing data is reported). No inputs; call it once per session. |
Subscribe to a callback via POST /v1/subscriptions (or the subscribe_event MCP tool) with an event name and a callback_url. Callback URLs must be HTTPS and resolve to a public address - no localhost, no private/internal hosts. Every delivery carries an HMAC-SHA256 signature (computed with your subscription's own signing secret over the event payload) so you can verify authenticity before acting on it.
| Event | Fires when |
|---|---|
| zero_gamma_flip | Spot crosses the computed gamma-flip level. |
| new_wall | The call wall or put wall level changes. |
| regime_transition | The dealer regime label changes (e.g. CHOP to TREND). |
Yes. zdte.ai is a live SPX 0DTE dealer market-structure and gamma-exposure API. A single key gives AI agents an MCP server at https://api.zdte.ai/mcp (Streamable HTTP transport) and scripts a matching REST endpoint at https://api.zdte.ai. Both return net GEX, dealer gamma positioning, call and put walls, the zero-gamma flip, a scored strike ladder, implied 50%/80% forecast bands, VIX term structure, and the dealer regime label, recomputed about every 10 seconds during market hours.
Call get_market_structure over MCP, or GET /v1/market-structure over REST, with your X-API-Key header. The response carries net GEX (total_gex), the call/put GEX split, GEX imbalance and profile skew, the gamma-flip level, the call and put walls, and per-strike activity for SPX 0DTE. Every read is timestamped (as_of), and a typical value is under 15 seconds old during market hours.
There is no single best tool for everyone, so match it to the job. For 0DTE gamma work the things that matter are SPX dealer positioning on a tight refresh cadence, an explicit gamma-flip level, call and put walls, net GEX with an above/below-spot split, and a machine-readable format your own tools can consume directly. zdte.ai focuses on exactly those: one key, an MCP server for agents and a REST mirror for scripts, byte-identical JSON on both, and an honest available: false when the feed is stale rather than a silently old number. It is market-structure data for your own analysis, not a trade recommendation.
Yes. The API exposes SPX 0DTE options market structure: gamma exposure (GEX), dealer gamma positioning, call and put walls, the zero-gamma flip, max-pain and pin context, a scored pressure-point ladder, strike-level volume and open interest, VIX term structure with IV and skew, and realized-vol stats. Historical replay dates and per-day timelines are available through list_history_dates and get_day.
Any MCP-compatible client or agent can connect over the Streamable HTTP transport. Point it at https://api.zdte.ai/mcp and send X-API-Key: YOUR_KEY as a request header. There is no OAuth flow and no session negotiation. See the one-liner and config examples above for a copy-paste setup, or call the REST routes directly from a script.
Market makers (dealers) hold large options inventories and hedge them to stay roughly delta-neutral. Gamma measures how fast that hedge has to change as the underlying moves. When dealers are long gamma they hedge against the move, selling into strength and buying into weakness, which tends to dampen and pin the market. When dealers are short gamma they hedge with the move, which tends to amplify it.
It tends to enhance them. Short-gamma hedging is pro-cyclical: dealers buy as price rises and sell as it falls, which adds to the move and raises realized volatility. Long-gamma hedging is the opposite and tends to dampen moves toward pinning levels. The get_market_structure response reports the net GEX sign and gamma profile so you can judge which regime is in force.
$100 per month, flat, with a 7-day free trial for new subscribers, and one key covers both the MCP server and the REST mirror. Market structure is recomputed roughly every 10 seconds while the market is open, and a typical read is under 15 seconds old. Outside market hours, or if the underlying feed goes stale, the surface returns available: false rather than serving a stale number.
Market structure is recomputed roughly every 10 seconds while the market is open; a typical read is under 15 seconds old. Outside market hours, or if the underlying feed goes stale, the surface returns an honest available: false rather than serving a stale number silently.
This is computed market-structure data for your own decisions - not investment advice, and not a directional signal. Your key is for your own use: no redistribution or resale of the feed, no compiling it into a dataset, and no training models on it. See the full Terms of Service for the complete usage terms and the Investment Disclaimer for the full risk statement.