Heat Map

Overview

Heat Map returns an expiration by strike grid for one ticker at a snapshot in time. The metric in each cell is selected by dataMode. The response is polymorphic: net / aggregate modes return one value per leg per cell; per-leg modes return a single value per cell. A top-level type field advertises which shape was returned.

POST/v1/options/tool/heat-map
curl -X POST https://api.quantdata.us/v1/options/tool/heat-map \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionDate": "2026-05-13",
    "dataMode": "NET_DELTA_EXPOSURE",
    "filter": { "ticker": "AAPL" }
  }'

Required: ticker and dataMode

Both filter.ticker and dataMode are required. dataMode has three groups of values.

  • Net / aggregate modes (response type is contract; each cell is { callValue, putValue }): NET_CHARM_EXPOSURE, NET_DELTA_EXPOSURE, NET_GAMMA_EXPOSURE, NET_VANNA_EXPOSURE, NET_OPEN_INTEREST, NET_PREMIUM, NET_TRADE_COUNT, NET_VOLUME.
  • Per-leg call modes (response type is single; each cell is { value }): CALL_ASK_PRICE, CALL_BID_PRICE, CALL_CHARM, CALL_COLOR, CALL_DELTA, CALL_GAMMA, CALL_IMPLIED_VOLATILITY, CALL_OMEGA, CALL_OPTION_PRICE, CALL_RHO, CALL_SIGMA, CALL_SPEED, CALL_THETA, CALL_ULTIMA, CALL_VANNA, CALL_VEGA, CALL_VETA, CALL_VOMMA, CALL_ZOMMA.
  • Per-leg put modes: mirror set with PUT_ prefix (PUT_ASK_PRICE, PUT_DELTA, etc.).

Per-leg mode pinned to a snapshot

Request · CALL_DELTA at snapshotTime
{
  "snapshotTime": "2026-05-13T16:30:00Z",
  "dataMode": "CALL_DELTA",
  "filter": {
    "ticker": "AAPL",
    "expirationDate": "2026-05-16",
    "strikePriceRange": { "min": 210.0, "max": 230.0 }
  }
}

Selecting the snapshot

Heat Map supports sessionDate for the latest snapshot of a given session, or snapshotTime for a specific instant. The two are mutually exclusive; if both are omitted, the latest snapshot of the current session is returned.

Response shape

data walks expiration date -> strike (dollars) -> cell. The cell shape depends on type.

Net / aggregate · type = contract

200 OK · NET_DELTA_EXPOSURE
{
  "type": "contract",
  "data": {
    "2026-05-16": {
      "215.0": { "callValue": 184201, "putValue": -92410 },
      "220.0": { "callValue": 221340, "putValue": -110205 }
    },
    "2026-05-23": {
      "220.0": { "callValue": 88010, "putValue": -41200 }
    }
  }
}

Per-leg · type = single

200 OK · CALL_DELTA
{
  "type": "single",
  "data": {
    "2026-05-16": {
      "215.0": { "value": 0.612 },
      "220.0": { "value": 0.481 }
    }
  }
}

Cells with no exposure or no price are omitted entirely from the response. Branch on type to decide whether to read callValue / putValue or value.

Filters

Convenience filter fields: ticker (required), expirationDates, expirationDateRange, strikePrices, strikePriceRange. The filterExpression DSL is also accepted and can be combined with filter; both are evaluated as AND.

See Field Reference for the type and allowed values of every filterable field, and Filter Expression for the full DSL grammar.

Where to go next