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. It is included with ZDtE Pro ($79/month), and one key covers both. It is market-structure data for your own analysis, not investment advice.
$79/mo
30-day free trial for new subscribers, then $79/mo - cancel anytime. One subscription covers the Pro dashboard and MCP/API access.
During the free trial, MCP/API access is limited to 100 data requests per day.
Already have an account? Log in
One key covers both MCP and REST. Live reads are unlimited within the per key rate limit (a free trial key gets 100 data requests per day). 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.
Keys created by an AI agent (or by "Continue without an account" on the Connect page) need no zdte.ai account. To add credits, ask your agent for a payment link: it calls create_credit_checkout with the number of credits, and the link opens the zdte.ai top-up page for that key. The page shows the current balance and the price, then a person pays through Stripe. Opening the link charges nothing, and credits arrive after the payment is confirmed.
Signed-in account holders can also buy credits on the credits page. Current prices are listed by the get_access_options tool.
Endpoint https://api.zdte.ai/mcp. Connect with OAuth (no key to copy, no zdte.ai account needed) or send an X-API-Key header. Any MCP client that speaks the Streamable HTTP transport can connect.
Claude (web, desktop and mobile)
https://api.zdte.ai/mcp as the URL.Claude Code
With OAuth (Claude Code opens the Connect page on first use):
claude mcp add --transport http zdte https://api.zdte.ai/mcpOr with a key:
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. OAuth-capable clients can skip the key: they are asked to Connect the first time a paid or account tool is called, with no website account needed.
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"
}GEX dollar fields (total_gex, call_gex, put_gex, gex_above_spot, gex_below_spot, net_gex, gex_total) are on the engine basis: dollars per 1% SPX move per SPX unit, without the 100-share contract multiplier. The zdte.ai website shows GEX with the 100-share contract multiplier (x100): dollars per 1% SPX move, 100 shares per contract. Divide a website GEX figure by 100 before comparing it with an API value.
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_event | 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. OAuth-capable clients are asked to Connect the first time a paid or account tool is called; ZDtE Pro members choose Use my zdte.ai account there, and the sign-in page also offers to continue without an account. Any client can instead send X-API-Key: YOUR_KEY as a request header. 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.
MCP/API access is included with ZDtE Pro at $79 per month, which starts with a 30-day free trial for new subscribers; during the trial MCP/API access is limited to 100 data requests per day. 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.