Authentication
Authenticate with a Skylit API key, and how credits and rate limits work.
The Skylit Public API uses bearer authentication. Send your API key in the
Authorization header on every request:
Authorization: Bearer <your-api-key>Getting a key
Generate and manage keys on the Developer page (API keys tab). New accounts
start with the credits their plan includes (see Plans and credits); GET /v1/account shows the balance.
MCP clients such as Claude, Claude Code and Cursor can also sign in with Skylit
(OAuth) instead of using a key: see the MCP quickstart.
curl "https://api.skylit.ai/v1/heatmap?symbols=SPY" \
-H "Authorization: Bearer $SKYLIT_API_KEY"import os, requests
session = requests.Session()
session.headers["Authorization"] = f"Bearer {os.environ['SKYLIT_API_KEY']}"
print(session.get("https://api.skylit.ai/v1/heatmap", params={"symbols": "SPY"}).json())const skylit = (path) =>
fetch(`https://api.skylit.ai${path}`, {
headers: { Authorization: `Bearer ${process.env.SKYLIT_API_KEY}` },
}).then((r) => r.json());
console.log(await skylit("/v1/heatmap?symbols=SPY"));Credits
Every chargeable request debits a fixed cost from your credit balance
(1 credit = $0.001). Each endpoint's cost is shown on its API Reference page
(x-credits in the OpenAPI specs). /v1/account and /v1/openapi.json are
free. Streams charge to open and then per symbol per minute; the connected
event states the rate.
Every chargeable response carries X-Credits-Remaining: <balance>.
Failed calls are free: a request answered with any 4xx or 5xx is refunded,
and its X-Credits-Remaining already reflects the refund.
402 insufficient_creditsYou're out of credits. Buy a credit pack on the Developer page (Community and up), or wait for your plan's Monthly API Credits to reset on the 1st (ET). See Plans and credits.
402 monthly_cap_reachedYour account's monthly spend cap was reached. Contact support to raise it.
403 account_suspendedThe account has been administratively suspended.
Rate limits
Each key has a requests-per-minute limit set by your plan, shared across all
Skylit APIs. GET /v1/account returns it (limits.requestsPerMinute) along with
your other limits, so read it rather than hard-coding a number.
Every response carries the key's current window:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Requests allowed per minute on this key |
X-RateLimit-Remaining | Requests left in the current window |
X-RateLimit-Reset | When the window resets (Unix seconds) |
| Status | Meaning |
|---|---|
401 Unauthorized | Missing or invalid API key. |
403 Forbidden | Key revoked/expired, or account suspended. |
429 Too Many Requests | Rate limit hit (rate_limited). The gateway's 429 has no Retry-After: wait until X-RateLimit-Reset, then retry with jitter. 429s from the API itself (concurrency or stream limits) carry Retry-After. |
For backoff code and the full retry rules, see Rate limits and retries. Every error code is listed on Errors.
Make your first callJump to GET /v1/heatmap and try it live in the playground.
Last updated