Indicator

Fathom Levels

Your reference levels, always in view. Open, extremes and VWAP frame your read of the session.

Keeps the last days sessions, weeks weeks and months months, current period included, with their levels: midpoint, low, high, open and close (past periods only), plus the POC, 70% value area and VWAP for sessions and weeks. Levels of the current period are provisional and update on every closed bar; they become final when the period ends and are removed once it leaves the window.

Identifier
key-levels
Objects received
level
Calculation
Over the requested periods
Historical cost
1 unit per trade

Subscribe

The same params work in real time, on historical data and in exports. Any you leave out take their default value.

Subscribe message
{
  "t": "subscribe",
  "sub": "key-levels",
  "instrument": "NQ.front",
  "indicator": "key-levels",
  "params": {
    "days": 2,
    "months": 0,
    "skipCurrent": false,
    "timeframe": 300,
    "weeks": 1
  },
  "mode": "live",
  "from": "live"
}

Parameters

As soon as a parameter differs from its default, the subscription counts as a custom configuration. A new value may require preparing a new calculation (status warming).

ParameterTypeDefaultAllowed valuesUnitDescription
daysinteger20 to 30—Number of sessions kept, current session included.
monthsinteger00 to 12—Number of months kept, current month included (no POC, value area or VWAP).
skipCurrentbooleanfalsetrue · false—Hide the levels of the current period.
timeframeinteger30015 · 60 · 300—Bar duration in seconds: 15, 60 or 300.
weeksinteger10 to 12—Number of weeks kept, current week included.

Objects received

Each object keeps the same id from one update to the next. Its data is in the data field. Prices are in ticks: multiply them by the instrument’s tick size (GET /v1/instruments) to get points.

level updated continuously

Level; provisional during the current period.

Format of the id: <period>:<key>:<label>. While it changes, the object is sent with final: false, and each new version fully replaces the previous one. Its last version carries final: true.

FieldTypeUnitPresentDescription
currentboolean—alwaysLevel of the current period, hence provisional.
keystring—alwaysSession (closing date), Sunday of the week, or month as YYYY-MM.
labelstring · MP | L | H | O | C | P | VH | VL | VW—alwaysMidpoint, low, high, open, close, POC, value area high and low, VWAP.
periodstring · day | week | month—alwaysPeriod.
pricenumberticksalwaysPrice of the level.

Calculation warm-up

The calculation covers the days, weeks or months requested in the parameters. If nobody is using your parameters yet, the server first recomputes those periods (status warming), then goes live (status live).

Historical data follows the same rules: a query over a past period returns exactly what the real-time stream published.

Example messages

Messages received with the subscription parameters above. Over WebSocket, each message also carries sub and cursor.

In-progress version
{
  "t": "upsert",
  "id": "day:2026-09-24:VH",
  "final": false,
  "ts": "1790208000058746563",
  "data": {
    "period": "day",
    "key": "2026-09-24",
    "label": "VH",
    "price": 123177,
    "current": true
  }
}
In-progress version
{
  "t": "upsert",
  "id": "week:2026-09-20:VW",
  "final": false,
  "ts": "1790208000058746563",
  "data": {
    "period": "week",
    "key": "2026-09-20",
    "label": "VW",
    "price": 123433.46225133342,
    "current": true
  }
}
Final version
{
  "t": "upsert",
  "id": "day:2026-09-24:MP",
  "final": true,
  "ts": "1790287500006398661",
  "data": {
    "period": "day",
    "key": "2026-09-24",
    "label": "MP",
    "price": 122395,
    "current": false
  }
}

JSON schemas

To validate or type your data: the JSON schemas of the parameters and of data, also available from GET /v1/indicators. The SDK can generate types from them.

Parameters schema
JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://fathomcharts.com/schemas/key-levels/params.json",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "days": {
      "type": "integer",
      "default": 2,
      "minimum": 0,
      "maximum": 30,
      "description": "Number of sessions kept, current session included."
    },
    "months": {
      "type": "integer",
      "default": 0,
      "minimum": 0,
      "maximum": 12,
      "description": "Number of months kept, current month included (no POC, value area or VWAP)."
    },
    "skipCurrent": {
      "type": "boolean",
      "default": false,
      "description": "Hide the levels of the current period."
    },
    "timeframe": {
      "type": "integer",
      "default": 300,
      "enum": [
        15,
        60,
        300
      ],
      "description": "Bar duration in seconds: 15, 60 or 300."
    },
    "weeks": {
      "type": "integer",
      "default": 1,
      "minimum": 0,
      "maximum": 12,
      "description": "Number of weeks kept, current week included."
    }
  }
}
Schema of the data field
JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://fathomcharts.com/schemas/key-levels/data.json",
  "title": "level",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "period",
    "key",
    "label",
    "price",
    "current"
  ],
  "properties": {
    "current": {
      "type": "boolean",
      "description": "Level of the current period, hence provisional."
    },
    "key": {
      "type": "string",
      "pattern": "^[0-9]{4}-[0-9]{2}(-[0-9]{2})?$",
      "description": "Session (closing date), Sunday of the week, or month as `YYYY-MM`."
    },
    "label": {
      "type": "string",
      "enum": [
        "MP",
        "L",
        "H",
        "O",
        "C",
        "P",
        "VH",
        "VL",
        "VW"
      ],
      "description": "Midpoint, low, high, open, close, POC, value area high and low, VWAP."
    },
    "period": {
      "type": "string",
      "enum": [
        "day",
        "week",
        "month"
      ],
      "description": "Period."
    },
    "price": {
      "type": "number",
      "description": "Price of the level."
    }
  }
}