# LIVE: Levels API

> FirmTape's levels as JSON, for chart plugins and scripts: the volume book's zero-gamma flip, call wall, put wall and net gamma, every second for SPX and ES and every five minutes for the tickers, NQ and RTY. Included in LIVE.

Source: https://firmtape.com/docs/developers/live

FirmTape's levels as JSON, for chart plugins and scripts: the volume book's zero-gamma flip, call wall, put wall and net gamma, every second for SPX and ES and every five minutes for the tickers, NQ and RTY. Included in LIVE.

**This product serves:** [LIVE: Levels API](https://firmtape.com/docs/live#levels-api), [LIVE: Platform integrations](https://firmtape.com/docs/live#integrations), [LIVE: Walls and levels](https://firmtape.com/docs/live#walls-and-levels), [LIVE: Futures views: ES, NQ, RTY, GC, SI, ZB, CL](https://firmtape.com/docs/live#futures-views). **Plan:** [LIVE](https://firmtape.com/features/live). LIVE: today's session every second, alerts, ASK, the levels API and the platform integrations, and 5 LAB credits a month. Every finished session is free in REPLAY.

Every level is the **volume book**, the one the terminal draws; the open-interest book rides alongside under `oi`, named as such. Measurements of dealer positioning, never a trade call.

**ES, NQ and RTY** are the SPX, NDX and RUT books moved by the day's basis, the running median of the day's passes rounded to the future's tick (0.25 for ES and NQ, 0.1 for RTY), measured from put-call parity on the index options. MES, MNQ and M2K answer as ES, NQ and RTY.

**A finished day** answers with its closing levels: `flip`, `call_wall` and `put_wall` as they stood at the levels minute, 15:45 ET (12:45 on a 13:00 close), the same levels every FirmTape page quotes for that day. Two keys are added on a finished day only: `levels_at` (the minute) and `last_second` (the replaced fields as the last second had them).

**Polling.** Put every symbol of a chart in one `levels` call (up to 20), send the last `ETag` back as `If-None-Match` (an unchanged reading answers 304, which is not counted), and ask again after `next_update_s`.

## Endpoints

| Request | What it gives | Plan | Key scope |
| --- | --- | --- | --- |
| `GET /api/v1/levels` | [Get levels](https://firmtape.com/docs/developers/live/levels) | LIVE | live |
| `GET /api/v1/gamma` | [Gamma by strike](https://firmtape.com/docs/developers/live/gamma) | LIVE | live |
| `GET /api/v1/history` | [Level history of a day](https://firmtape.com/docs/developers/live/history) | LIVE | live |
| `GET /api/v1/symbols` | [Every symbol](https://firmtape.com/docs/developers/live/symbols) | Free | none |
| `GET /api/v1/expected_move` | [Expected move and close odds](https://firmtape.com/docs/developers/live/expected-move) | LIVE | live |
| `GET /api/v1/levels.txt` | [Levels string (FT1)](https://firmtape.com/docs/developers/live/levels-string) | LIVE | live |
| `GET /api/v1/bookmap.csv` | [Bookmap Cloud Notes sheet](https://firmtape.com/docs/developers/live/bookmap-csv) | LIVE | live |
| `GET /api/v1/key` | [Check a key](https://firmtape.com/docs/developers/live/key) | LIVE | live |

## More

- [Alert lines (session only)](https://firmtape.com/docs/developers/live/alert-lines): The price and level lines a trader sets on the chart. `/api/alerts` answers the signed-in terminal only, with the session cookie; it takes no API key.
- [Web push](https://firmtape.com/docs/developers/live/web-push): Notifications on a phone or a desktop browser are a destination of the level alerts, switched on from the account page in the browser that should receive them. There is no developer interface: a program receives the same alerts through the webhook.
- [Platform integrations](https://firmtape.com/docs/developers/live/integrations): Ready-made plugins that read the levels API and draw FirmTape's levels on a customer's own chart: NinjaTrader 8, Sierra Chart, ATAS, Quantower, Bookmap, MotiveWave and TrendSpider, plus TradingView and thinkorswim scripts that read a pasted levels string. Beta, included in LIVE.

## Webhook events

- [flip_cross](https://firmtape.com/docs/developers/live/events/flip_cross): Sent when the price of a symbol on your watchlist crosses the volume book's zero-gamma flip and holds the new side.
- [wall_break](https://firmtape.com/docs/developers/live/events/wall_break): Sent when the price breaks above the call wall or below the put wall and holds it.
- [regime_change](https://firmtape.com/docs/developers/live/events/regime_change): Sent when the volume book's net gamma changes sign and holds it.
- [wall_move](https://firmtape.com/docs/developers/live/events/wall_move): Sent when the call wall or the put wall stands on a new strike and holds it.
- [flip_move](https://firmtape.com/docs/developers/live/events/flip_move): Sent when the flip stands more than your chosen number of points from where it was at the session's first reading, or at its last alert.
- [level_near](https://firmtape.com/docs/developers/live/events/level_near): Sent when the price comes within your chosen number of points of the flip, the call wall or the put wall, once per approach.
- [price_alert](https://firmtape.com/docs/developers/live/events/price_alert): Sent when the price crosses or touches a price line you set on the chart.
- [level_line](https://firmtape.com/docs/developers/live/events/level_line): Sent when the price crosses a level line, a line that follows the flip, the call wall or the put wall wherever it stands.
- [order](https://firmtape.com/docs/developers/live/events/order): Sent when a new order in today's SPX ledger matches one of your order rules.
- [test](https://firmtape.com/docs/developers/live/events/test): Sent by **Send test** on Account, Level alerts: a sample flip cross on SPX, signed the same way, so you can check your end.

## Limits

| What | Limit | Notes |
| --- | --- | --- |
| Levels API | 120 requests a minute per key | A 304 (`If-None-Match`) is not counted. A `live` key answers from at most 3 client addresses an hour. History: the last 90 days; older with DATASET. |
