---
title: "Daily statistics per symbol (ranking and spot range)"
method: GET
path: "/v1/stats/daily"
tags: ["Heatmap"]
---

# Daily statistics per symbol (ranking and spot range)

`GET /v1/stats/daily`

## Request

- Base URL: `https://api.skylit.ai`
- URL: `https://api.skylit.ai/v1/stats/daily`
- Auth: HTTP bearer

Per symbol and US trading session (ET): board spot open/high/low/close,
the smallest and largest single cell of the session, and the mean and
maximum over the session's frames of `max(|smallest cell|, |largest cell|)`
(a measure of how concentrated the exposure is, useful for ranking a
universe). Computed from 1-minute history, so every frame is one minute
apart (`frames` counts them). Weight `peakAbsMean` by `frames` to
average across days.

**Sessions.** `date` is the ET session date. By default a row covers
the regular session, 09:30-16:00 ET (frames stamped 09:30 up to
15:59); `extended=true` covers 04:00-20:00 ET instead, including
pre- and post-market. Weekends and NYSE market holidays have no
session and no row, including for indices whose heatmap updates
around the clock (SPX, SPXW, NDX, VIX). On early-close days the
session simply has fewer frames. `firstAt`/`lastAt` are UTC
timestamps. Today's row has `complete: false` until 30 minutes after
the session ends, and changes as the session goes on.

Up to 50 symbols, 31 calendar days and 400 symbol-sessions (symbols x
trading days) per call. Sessions with no data are omitted; a symbol
with none is omitted. Served from the historical file store; finished
sessions are cached, so repeat and overlapping calls are fast.
**Cost:** 5 credits per call.

## Query parameters

- `symbols` string, required
- `from` string, date, required
- `to` string, date
- `extended` boolean
- `metric` 'gamma' | 'vanna'

## Response `200`

Daily statistics.

- object
  - `data` object, required
    - `from` string, date, required
    - `symbols` object[], required
      - `days` DailyStat[], required
        - `complete` boolean, required: False for a session still in progress (today) or ended less than 30 minutes ago.
        - `date` string, date, required: The trading session's date (ET).
        - `firstAt` string, date-time, required
        - `frames` integer, required: 1-minute frames inside the session the values are computed from.
        - `lastAt` string, date-time, required
        - `maxValue` number, required: Largest single cell in any frame.
        - `minValue` number, required: Smallest single cell (strike x expiration) in any frame.
        - `peakAbsMax` number, required: Maximum over frames of max(|smallest cell|, |largest cell|).
        - `peakAbsMean` number, required: Mean over frames of max(|smallest cell|, |largest cell|).
        - `spotClose` number, required
        - `spotHigh` number, required
        - `spotLow` number, required
        - `spotOpen` number, required
      - `symbol` string, required
    - `to` string, date, required
  - `meta` Meta, required
    - `attribution` Attribution: Whether and how this response's data may be published. See `/legal/api#sharing`. An Agent or MCP client should never publish data where `shareable` is false, regardless of `shareClass`. `required`, `license`, `shareable` and `shareClass` are always sent on `/v1/options/*` and absent from the short form.
      - `license` 'personal' | 'commercial' | 'connected_app'
      - `required` boolean
      - `shareClass` 'derived' | 'derived_levels_only' | 'raw': "raw" (e.g. option quotes, greeks) must never be auto-published.
      - `shareable` boolean
      - `terms` string, uri
      - `text` string, required
      - `url` string, uri, required
    - `cached` boolean, required: True if served from the in-process cache.
    - `delayMinutes` integer: The delay applied when `delayed` is true.
    - `delayed` boolean: 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.
    - `metric` 'gamma' | 'vanna', required
    - `mode` 'live' | 'historical', required
    - `resolution` '1s' | '1m', required: Time resolution of the data served: "1s" when every symbol came from 1-second data, "1m" when any came from minute-resolution history.

## Other responses

- `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.

---

[API](https://skmtc.dev/skylit/apis/skylit-public-api.md) · [All operations](https://skmtc.dev/skylit/apis/skylit-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/skylit/apis/skylit-public-api/revisions/890b0ea4e6f5?raw)
