Heatseeker/API Reference/Heatmap

Live per-strike heatmap (one or more symbols)

GEThttps://api.skylit.ai/v1/heatmap

Current per-strike heatmap for one or more symbols at the latest snapshot. Includes the live velocityPct per strike. Pass multiple comma-separated symbols for a single cross-asset call (the app's Trinity is SPXW,SPY,QQQ; SPX is the monthlies only), and expirations to net each strike over specific expiration dates instead of the nearest maxExpirations. A call that cannot finish within 20 seconds answers 504 gateway_timeout (refunded); retry, or request fewer symbols.

Authorization

Authorization: Bearer <your API key>

Required. A missing header returns 401; an invalid, revoked or expired key returns 403.

Query parameters

  • symbolsstringrequired

    One ticker, or a comma-separated list for a single cross-asset call (e.g. SPY or SPXW,SPY,QQQ). Each is returned as an element of data.symbols. At most 10 distinct symbols (more → 400 invalid_parameter). Unknown symbols in a list are omitted; if none is available → 404 symbol_not_found.

    Index options are served per option root, and the roots hold different contracts. SPXW is the PM-settled S&P 500 options (every daily and weekly expiration, 0DTE included), the board the Skylit app's Trinity view uses. SPX is only the AM-settled monthlies, so it has no 0DTE or weekly gamma and reads very differently from SPXW. The same split applies to NDXP / NDX and RUTW / RUT. To match the app's Trinity or read 0DTE, request SPXW,SPY,QQQ.

  • metricstringdefault gamma

    Which Greek exposure to return per strike.

    gammavanna
  • maxStrikesdefault 92

    Maximum number of strikes around spot to return: an integer from 1 to 1000, or all for every strike the snapshot lists (SPXW lists about 730). Values above 1000 return 400 invalid_parameter; they are never silently reduced. Values below 1 are treated as 1. The single-symbol stream (/v1/stream?symbol=) accepts at most 400 and no all.

  • maxExpirationsdefault 5

    How many of the nearest expirations to net into each strike's value: an integer from 1 to 60, or all. Values above 60 return 400 invalid_parameter. Ignored when expirations is set.

  • includeEmptybooleandefault false

    By default, an interior strike whose every returned cell is below 50 in absolute value (listed but effectively untraded) is left out, judged on the selected metric alone. So gamma and vanna for the same instant can return different strike lists. The outermost strikes are never removed. true keeps every strike in the window, so the list is the snapshot's own contiguous ladder and is identical for gamma and vanna. Not supported on the single-symbol stream (symbol=).

  • expirationsstring

    Net each strike over exactly these expirations (YYYY-MM-DD, comma-separated) — one for a single-expiration heatmap (2026-05-22) or several for a custom set (2026-05-22,2026-06-19). Supersedes maxExpirations, and reaches any expiration the snapshot has, not just the nearest ones. Requested dates the symbol does not have are ignored; the expirations array in the response lists what was actually used. If none of them match, the response is 404 with code: expiration_not_found and the available dates in the message. On /v1/heatmap, expirations that have already expired are not available (they are trimmed from the live snapshot) — replay them with /v1/historical instead.

  • layoutstringdefault net

    net (default) returns one net value per strike. matrix also returns matrix, the per-expiration grid those values are summed from.

    netmatrix

Responses

  • 200

    Live heatmap snapshot(s).

  • 400

    Request validation failed.

  • 401

    Missing API key (unauthorized), sent by the gateway.

  • 402

    Out of credits (insufficient_credits).

  • 403

    Unknown, revoked or expired key (forbidden, from the gateway), or an admin-suspended account (account_suspended).

  • 404

    Unknown symbol, no data available, or none of the requested expirations exist for the symbol (code: expiration_not_found).

  • 429

    Per-minute rate limit exceeded.

  • 503

    Heatmap data is temporarily unavailable.

  • 504

    The request did not finish in time (gateway_timeout). Refunded; retry, or narrow the request.

Response fields

  • dataobjectrequired
    • symbolsobject[]required
  • metaobjectrequired
    • metricstringrequired
      gammavanna
    • resolutionstringrequired

      Time resolution of the data served: "1s" when every symbol came from 1-second data, "1m" when any came from minute-resolution history.

      1s1m
    • modestringrequired
      livehistorical
    • cachedbooleanrequired

      True if served from the in-process cache.

    • delayedboolean

      True when your plan's data is delayed and this latest-data request was served as of delayMinutes ago (mode is then historical). Absent on real-time plans.

    • delayMinutesinteger

      The delay applied when delayed is true.

    • attribution

      How to credit this data. Most routes send the short form {text, url, terms} ("Data: Skylit"). Routes whose data class the licensing design (TERMS.md §5) tags explicitly — today, /v1/options/* — send the full licensing shape instead. Can be absent; do not infer sharing rules from the short form or from its absence.

Last updated

Was this page helpful?