DocsAPI ReferenceDirectional TradingGEX, Vanna & Charm

GEX, Vanna & Charm

Dealer exposure by strike with the key levels traders actually watch: call/put walls, gamma flip and vanna levels.

Gamma exposure

GET/gex
Parameters
symbolstringrequired
Ticker, e.g. SPY, SPX, QQQ, NVDA.
expirationsstring
Comma-separated YYYY-MM-DD dates to aggregate. See meta.availableExpirations or /v1/expirations.
expirationsCountnumber
Nearest N expirations when no explicit dates are given (1-4, default 3).
formulastring
nominal (default), per_1pct or per_1dollar.
curl -H "Authorization: Bearer qw_live_YOUR_KEY" \
  "https://quantwheel.com/api/v1/gex?symbol=SPY&expirationsCount=3"
200 OK
{
  "symbol": "SPY",
  "stockPrice": 622.41,
  "totalGEX": -1240000000,
  "gammaZone": "negative",
  "gammaInflection": 620.5,
  "callWall": { "strike": 630, "gex": 320000000 },
  "putWall": { "strike": 615, "gex": -410000000 },
  "data": [
    { "strike": 615, "callGEX": 140000000, "putGEX": -550000000, "netGEX": -410000000,
      "callOI": 42000, "putOI": 91000 }
    // ... one row per strike
  ],
  "meta": { "availableExpirations": ["2026-07-31", "2026-08-01", "..."] },
  "asOf": "2026-07-30T14:40:00.000Z"
}
LevelMeaning
callWallStrike with the largest call GEX - resistance / pin magnet.
putWallStrike with the largest put GEX - downside support and acceleration point.
gammaInflectionSpot level where net GEX flips sign and the dealer regime changes. null when no flip level exists in the current strike range.
gammaZoneCurrent regime: positive (dealers dampen moves) or negative (dealers amplify).

Vanna & charm levels

GET/vanna

Second-order dealer positioning, aggregated over the tactical 0-45 DTE book (pass expiration=YYYY-MM-DD to pin a single expiration). The keyLevels block is what the desktop overlay draws: the vanna flip, bull drift target, bear max danger and the CSP deceleration zone.

200 OK
{
  "symbol": "SPY",
  "stockPrice": 622.41,
  "totalVanna": 420000000,
  "totalCharm": -110000000,
  "keyLevels": {
    "vannaRegime": "positive",
    "vannaFlip": 618.5,
    "bullDriftTarget": 631,
    "bearMaxDanger": 611,
    "bearDeceleration": 606,
    "bullBearRatio": 1.34
  },
  "minDte": 0,
  "maxDte": 45,
  "mode": "aggregate",
  "expiration": null,
  "availableExpirations": ["2026-07-31", "..."],
  "asOf": "2026-07-30T14:40:00.000Z"
}

Flip & wall events

GET/gex/events
Parameters
tickersstring
Comma-separated tickers, e.g. SPY,TSLA. Default: all covered.
eventTypestring
all (default), flip or wall.
minDte / maxDtenumber
Filter by the expiration's days-to-expiry.
limitnumber
Max events (default 50, cap 200).
200 OK (abridged)
{
  "events": [
    {
      "id": "evt_01j...",
      "ticker": "SPY",
      "eventType": "flip",
      "expiration": "2026-07-31",
      "timestamp": "2026-07-30T15:02:00.000Z",
      "previousState": "positive",
      "newState": "negative",
      "inflectionPoint": 620.5,
      "spotPrice": 621.1,
      "callWallStrike": 630,
      "putWallStrike": 615
    },
    {
      "id": "evt_01k...",
      "ticker": "SPY",
      "eventType": "wall",
      "expiration": "2026-07-31",
      "timestamp": "2026-07-30T14:47:00.000Z",
      "wallType": "call",
      "previousStrike": 628,
      "newStrike": 630,
      "spotPrice": 621.4
    }
  ]
}

Data freshness

Live GEX/vanna responses are computed from the current options chain and cached ~60 seconds per symbol. asOf is always the compute time - cache on it, not on wall-clock time.