Heatmap

Replay — every snapshot in a window (up to 15 minutes, 5 symbols)

Every snapshot between from and to (inclusive) for up to 5 symbols, at the stored resolution — one per second where 1-second history exists (meta.resolution: "1s"), otherwise one per minute. Each frame's values[i] is the net exposure at axes[frame.axis].strikes[i], summed over that axis's expirations — the same number /v1/historical reports as strikes[i].value for that instant. Axes are listed once and referenced by id; a new axis appears only when the visible strikes or expirations change (the strike window follows spot). Plain JSON numbers; responses are gzip-compressed when the request sends Accept-Encoding: gzip.

Cost: 25 credits per call.

get/v1/historical/range

Request

  • Base URL: https://api.skylit.ai
  • URL: https://api.skylit.ai/v1/historical/range
  • Auth: HTTP bearer

Query parameters

symbolsstring required
Example:SPXW,SPY,QQQ

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.

fromstring date-time required

RFC3339 start of the window (inclusive). Up to 365 days back.

tostring date-time required

RFC3339 end of the window (inclusive). At most 15 minutes after from, not in the future.

metric'gamma' | 'vanna'

Which Greek exposure to return per strike.

integer
OR
'all'

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.

integer
OR
'all'

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.

expirationsstring
Example:2026-05-22

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.

Response

Every snapshot in the window, per symbol.

Example response

{
  "meta": {
    "attribution": {
      "text": "Powered by Skylit"
    },
    "resolution": "1s"
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.