# GET /api/mcp/data/zero-dte/{ticker}

> What is priced into SPY's same-day expiration, and where are the walls?

For the same-day (or next) expiration returns the ATM IV and expected move, the gamma regime and key levels, per-strike gamma and quotes, the hourly theta decay, an IV-forecast and skew read, the expected-move hit rate and an edge score. Compact detail windows the strike lists.

- **Family:** Gamma exposure (https://apexvol.com/developers/gamma-exposure-api)
- **Plan:** Pro and above. Every call needs `Authorization: Bearer avmcp_<token>`; tokens are issued to paid and trial accounts under Account, then API Access.
- **Units:** Expected move in percent and dollars; IVs in percentage points; theta in dollars per day; net_gamma in dollars per 1% move.
- **Basis:** Same dealer convention as /gex for gamma. em_hit_rate compares past same-day expected moves with realized.
- **MCP tools:** `get_zero_dte`
- **Background:** https://apexvol.com/learn/zero-dte-options

## Parameters

| Name | In | Default | Range | Meaning |
|---|---|---|---|---|
| `ticker` (required) | path |  | any covered symbol | The underlying, upper case. Use /search to check coverage. |
| `detail` | query | full for REST, compact for MCP clients | compact or full | Windowed lists or everything. |
| `strikes_around` | query | 15 | 0 for all | Strikes per side under compact. |

## Request

```bash
curl -H "Authorization: Bearer avmcp_YOUR_TOKEN" \
     "https://apexvol.com/api/mcp/data/zero-dte/SPY?detail=compact&strikes_around=5"
```

## Response (captured 2026-09-08)

Real response, lists cut to the rows nearest the money. The envelope is `{"success": true, "data": ...}`.

```json
{
  "success": true,
  "data": {
    "by_strike": [
      {
        "call_delta": 0.604,
        "call_gamma": 77.9032,
        "call_iv": 5.8,
        "call_mid": 2.59,
        "call_oi": 1200,
        "call_theta": -0.244,
        "call_volume": 25628,
        "moneyness": "ATM",
        "net_gamma": 1.29,
        "put_delta": -0.396,
        "put_gamma": -77.9032,
        "put_iv": 6.3,
        "put_mid": 1.45,
        "put_oi": 1172,
        "put_theta": -0.244,
        "put_volume": 57197,
        "strike": 769.0
      },
      {
        "call_delta": 0.525,
        "call_gamma": 83.8045,
        "call_iv": 5.7,
        "call_mid": 1.98,
        "call_oi": 6179,
        "call_theta": -0.243,
        "call_volume": 82391,
        "moneyness": "ATM",
        "net_gamma": 139.91,
        "put_delta": -0.474,
        "put_gamma": -83.8045,
        "put_iv": 6.2,
        "put_mid": 1.84,
        "put_oi": 3365,
        "put_theta": -0.243,
        "put_volume": 82894,
        "strike": 770.0
      },
      {
        "call_delta": 0.44,
        "call_gamma": 86.3498,
        "call_iv": 5.6,
        "call_mid": 1.46,
        "call_oi": 1450,
        "call_theta": -0.232,
        "call_volume": 61672,
        "moneyness": "ATM",
        "net_gamma": -79.77,
        "put_delta": -0.56,
        "put_gamma": -86.3498,
        "put_iv": 6.1,
        "put_mid": 2.34,
        "put_oi": 3007,
        "put_theta": -0.232,
        "put_volume": 43463,
        "strike": 771.0
      }
    ],
    "data_status": "PRE-MARKET",
    "edge_score": {
      "components": {
        "em_hit_rate": {
          "score": 6,
          "value": 68.3,
          "weight": 0.2
        },
        "em_rv": {
          "score": 4,
          "value": 0.81,
          "weight": 0.25
        },
        "gamma_regime": {
          "score": 5,
          "value": "negative",
          "weight": 0.1
        },
        "iv_forecast": {
          "score": 3,
          "value": -3.3,
          "weight": 0.15
        },
        "vrp": {
          "score": 6,
          "value": 3.5,
          "weight": 0.3
        }
      },
      "edge_label": "No Clear Edge",
      "edge_type": "neutral",
      "total": 5.0
    },
    "em_hit_rate": {
      "assessment": "reliable",
      "avg_actual_pct": 0.62,
      "avg_em_pct": 0.81,
      "current_em_pct": 0.5,
      "em_vs_avg": "below",
      "hit_rate": 68.3,
      "hits": 69,
      "total_days": 101
    },
    "error": null,
    "expiration": "2026-09-08",
    "gamma_regime": {
      "regime": "negative",
      "total_net_gex": -45.78
    },
    "is_next_expiry": false,
    "iv_forecast": {
      "assessment": "underpriced",
      "atm_forecast": 9.2,
      "atm_implied": 5.9,
      "diff": -3.3,
      "earn_effect": 0.0,
      "signal": "IV 3.3pts below the feed's forecast: favor buying"
    },
    "key_levels": {
      "abs_gamma": 770.0,
      "call_wall": 775.0,
      "em_lower": 766.43,
      "em_upper": 774.07,
      "gamma_flip": null,
      "max_pain": 769.0,
      "put_wall": 770.0
    },
    "metrics": {
      "atm_iv": 6.0,
      "call_oi": 66864,
      "expected_move": 0.5,
      "expected_move_dollars": 3.82,
      "gamma_flip": null,
      "max_pain": 769.0,
      "net_gamma": -45.78,
      "put_call_ratio": 1.42,
      "put_oi": 95102,
      "total_oi": 161966,
      "total_theta": 1269368.0
    },
    "mispricing_chain": {
      "assessment": "FAIR",
      "assessment_band_dollars": 7.7,
      "avg_spread": -1.9,
      "base_hv": 8.1,
      "hv_window": "20d",
      "overpriced_count": 0,
      "underpriced_count": 0
    },
    "skew_signal": {
      "assessment": "heavy_put_skew",
      "call_10d_iv": 5.3,
      "call_10d_strike": 776.0,
      "put_10d_iv": 8.1,
      "put_10d_strike": 762.0,
      "signal": "Downside fear elevated: puts expensive vs calls",
      "skew_points": 2.8,
      "skew_ratio": 1.53
    },
    "stock_price": 770.25,
    "theta_burn": {
      "by_category": {
        "atm": {
          "current": 0.49,
          "decay": [
            {
              "hour": "09:30",
              "remaining": 0.49
            },
            {
              "hour": "10:00",
              "remaining": 0.47
            },
            {
              "hour": "10:30",
              "remaining": 0.45
            }
          ],
          "strike": 770.0
        },
        "near_atm": {
          "current": 0.42,
          "decay": [
            {
              "hour": "09:30",
              "remaining": 0.42
            },
            {
              "hour": "10:00",
              "remaining": 0.4
            },
            {
              "hour": "10:30",
              "remaining": 0.39
            }
          ],
          "strike": 766.0
        },
        "otm_calls": {
          "current": 0.0,
          "decay": [
            {
              "hour": "09:30",
              "remaining": 0.0
            },
            {
              "hour": "10:00",
              "remaining": 0.0
            },
            {
              "hour": "10:30",
              "remaining": 0.0
            }
          ],
          "strike": 786.0
        },
        "otm_puts": {
          "current": 0.04,
          "decay": [
            {
              "hour": "09:30",
              "remaining": 0.04
            },
            {
              "hour": "10:00",
              "remaining": 0.04
            },
            {
              "hour": "10:30",
              "remaining": 0.04
            }
          ],
          "strike": 754.0
        }
      },
      "current_theta": 0.49
    },
    "ticker": "SPY",
    "time_to_close": "Opens in 9h 5m",
    "window": {
      "detail": "compact",
      "lists": {
        "by_strike": {
          "rows_returned": 11,
          "rows_total": 165,
          "truncated": true
        },
        "chain_table": {
          "rows_returned": 11,
          "rows_total": 61,
          "truncated": true
        }
      },
      "strikes_around": 5
    }
  }
}
```

## Fields

- `metrics.expected_move, expected_move_dollars, atm_iv`: The priced move.
- `key_levels.call_wall, put_wall, max_pain, em_upper, em_lower`: Levels for the session.
- `gamma_regime.regime, total_net_gex`: Positive or negative gamma.
- `by_strike[]`: Per-strike Greeks, quotes and OI.
- `theta_burn.hourly_decay[]`: How premium decays through the day.
- `edge_score, em_hit_rate, iv_forecast, skew_signal`: The scored read.

## Errors

- `401`: no or revoked token
- `429`: Retry-After seconds
- `403`: Pro plan required
- `424`: data feed unavailable, retry
- Full list: https://apexvol.com/developers/errors

## Ask it in an MCP client

- What is the expected move for SPY today and where are the 0DTE walls?
- Is SPY 0DTE gamma positive or negative right now?
- How often has SPY stayed inside its 0DTE expected move lately?

Conventions for units, bases and timestamps: https://apexvol.com/developers/conventions
