curl --request GET \
--url https://api.skylit.ai/v1/gex/levels \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.skylit.ai/v1/gex/levels"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.skylit.ai/v1/gex/levels', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.skylit.ai/v1/gex/levels",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.skylit.ai/v1/gex/levels"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.skylit.ai/v1/gex/levels")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.skylit.ai/v1/gex/levels")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"symbols": [
{
"symbol": "<string>",
"asOf": "2023-11-07T05:31:56Z",
"spot": 123,
"previousClose": 123,
"kingNode": {
"strike": 123,
"value": 123,
"nodeType": "king",
"distancePct": 123
},
"levels": [
{
"strike": 123,
"value": 123,
"nodeType": "king",
"distancePct": 123
}
]
}
]
},
"meta": {
"metric": "gamma",
"resolution": "1m",
"mode": "live",
"cached": true
}
}{
"error": {
"code": "no_data",
"message": "<string>"
}
}{
"error": {
"code": "no_data",
"message": "<string>"
}
}{
"error": {
"code": "no_data",
"message": "<string>"
}
}{
"error": {
"code": "no_data",
"message": "<string>"
}
}Key levels (classified nodes) for one or more symbols
The 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.
curl --request GET \
--url https://api.skylit.ai/v1/gex/levels \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.skylit.ai/v1/gex/levels"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.skylit.ai/v1/gex/levels', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.skylit.ai/v1/gex/levels",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.skylit.ai/v1/gex/levels"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.skylit.ai/v1/gex/levels")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.skylit.ai/v1/gex/levels")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"symbols": [
{
"symbol": "<string>",
"asOf": "2023-11-07T05:31:56Z",
"spot": 123,
"previousClose": 123,
"kingNode": {
"strike": 123,
"value": 123,
"nodeType": "king",
"distancePct": 123
},
"levels": [
{
"strike": 123,
"value": 123,
"nodeType": "king",
"distancePct": 123
}
]
}
]
},
"meta": {
"metric": "gamma",
"resolution": "1m",
"mode": "live",
"cached": true
}
}{
"error": {
"code": "no_data",
"message": "<string>"
}
}{
"error": {
"code": "no_data",
"message": "<string>"
}
}{
"error": {
"code": "no_data",
"message": "<string>"
}
}{
"error": {
"code": "no_data",
"message": "<string>"
}
}Authorizations
Skylit API key in the Authorization header
(Authorization: Bearer <key>).
Query Parameters
One ticker, or a comma-separated list for a single cross-asset call
(e.g. SPY or SPY,SPX,QQQ). Each is returned as an element of
data.symbols.
"SPY,SPX,QQQ"
Which Greek exposure to return per strike.
gamma, vanna Maximum number of strikes around spot to return.
1 <= x <= 400How many of the nearest expirations to net into each strike's value.
Ignored when expirations is set.
1 <= x <= 60Net 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.
"2026-05-22"
Was this page helpful?

