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.
$100/mo
No free trial - cancel anytime
Already have an account? Log in
One key covers both MCP and REST. 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, same auth header, same paid-call gate, byte-identical JSON body.
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,
"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
},
"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, and realized-vol stats. |
| 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. |
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). |
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.