Key levels (classified nodes) for one or more symbols
https://api.skylit.ai/v1/gex/levelsThe strikes Skylit classifies as nodes (king, gatekeeper, pika, barney,
significant) for up to 10 symbols, strongest first, with each level's
distance from spot. Same live source, filters and 5-second cache as
/v1/heatmap; 1 credit per request.
Each symbol also carries summary: total net exposure, the strongest
positive and negative strikes (the walls), and the flip level where
cumulative net exposure changes sign. It is computed from the strikes
this request returned, so widen maxStrikes for a wider view.
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
symbolsstringrequiredOne ticker, or a comma-separated list for a single cross-asset call (e.g.
SPYorSPXW,SPY,QQQ). Each is returned as an element ofdata.symbols. At most 10 distinct symbols (more →400invalid_parameter). Unknown symbols in a list are omitted; if none is available →404symbol_not_found.Index options are served per option root, and the roots hold different contracts.
SPXWis the PM-settled S&P 500 options (every daily and weekly expiration, 0DTE included), the board the Skylit app's Trinity view uses.SPXis only the AM-settled monthlies, so it has no 0DTE or weekly gamma and reads very differently fromSPXW. The same split applies toNDXP/NDXandRUTW/RUT. To match the app's Trinity or read 0DTE, requestSPXW,SPY,QQQ.metricstringdefaultgammaWhich Greek exposure to return per strike.
gammavannamaxStrikesdefault92Maximum number of strikes around spot to return: an integer from 1 to 1000, or
allfor every strike the snapshot lists (SPXW lists about 730). Values above 1000 return400 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 noall.maxExpirationsdefault5How many of the nearest expirations to net into each strike's
value: an integer from 1 to 60, orall. Values above 60 return400 invalid_parameter. Ignored whenexpirationsis set.includeEmptybooleandefaultfalseBy 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.
truekeeps 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=).expirationsstringNet 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). SupersedesmaxExpirations, and reaches any expiration the snapshot has, not just the nearest ones. Requested dates the symbol does not have are ignored; theexpirationsarray in the response lists what was actually used. If none of them match, the response is404withcode: expiration_not_foundand 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/historicalinstead.
Responses
- 200
Levels per symbol.
- 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
expirationsexist 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
dataobjectsymbolsobject[]
metaobjectmetricstringrequiredgammavannaresolutionstringrequiredTime resolution of the data served: "1s" when every symbol came from 1-second data, "1m" when any came from minute-resolution history.
1s1mmodestringrequiredlivehistoricalcachedbooleanrequiredTrue if served from the in-process cache.
delayedbooleanTrue when your plan's data is delayed and this latest-data request was served as of
delayMinutesago (mode is thenhistorical). Absent on real-time plans.delayMinutesintegerThe delay applied when
delayedis true.attributionHow 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