# FirmTape - notes for coding and research agents

FirmTape (https://firmtape.com) is an SPX dealer-positioning terminal: the zero-gamma
flip, call wall, put support and gamma regime measured from the options tape,
per strike and per minute. ES, NQ and RTY (micros MES, MNQ and M2K) are shown as the
SPX, NDX and RUT books moved by the day's basis, measured from put-call parity on the index's
quarterly options (no futures feed; YM is not offered); about a hundred more tickers carry the
conventional volume and open-interest books. Facts checked 2026-10-11.

## Where to read

- Skill manifest (when to use, endpoints, rules): https://firmtape.com/skill.md
- Summary for language models: https://firmtape.com/llms.txt
- Long form (mechanics, research findings, MCP tool specs): https://firmtape.com/llms-full.txt
- The page written for assistants: https://firmtape.com/for-ai-agents
- OpenAPI 3.1: https://firmtape.com/openapi.json (Geo: https://firmtape.com/geo/openapi.json,
  order ledger: https://firmtape.com/orders/openapi.json, levels API:
  https://firmtape.com/api/v1/openapi.json)

## Data access

- Public JSON, no key: `GET /api/days`, `GET /api/session/{YYYY-MM-DD}`.
- MCP (streamable HTTP): `https://mcp.firmtape.com/mcp`, registry id
  `com.firmtape/spx-options-gamma`; free session and calendar tools, Lab tools with the
  user's token.
- Pages: `/now` (current reading, delayed at least 15 minutes), `/es`, `/nq` and `/rty` (the ES,
  NQ and RTY futures levels, same delay, or the last close), `/session/YYYY-MM-DD`,
  `/sessions`, `/calendar`, `/research`, and `/geo` (public records of world events: government
  notices and sanctions, flight restrictions, maritime warnings, internet outages, conflict
  deaths, disasters, one week per page with 30 days of history; context, never a signal).
- Order ledger: every large SPX order of a session rebuilt from the tape as an order --
  legs folded into the parent, the structure named, each placed against the measured book
  at the minute it printed, ranked by what it did to the book rather than by premium (the
  two rankings agree 0.017 of the time). Page `/orders`, prices `/pricing#orders`, guide
  `/docs/developers/orders`. Keyed API with the user's key (`Authorization: Bearer ordk_...`):
  `GET /orders/api/day?day=YYYY-MM-DD`, `/orders/api/latest`, `/orders/api/sessions`; MCP at
  `https://firmtape.com/orders/mcp` (`orders_day`, `orders_latest`, `orders_sessions`).
  A quarter to a half of the orders carry no side, and `g: null` means unpriced, not zero.
- Levels API (LIVE plan, the user's read-only token `Authorization: Bearer ftpl_...` from
  `/account#integrations`): `GET /api/v1/levels?sym=ES,NQ,QQQ` (up to 20, `include=gamma`),
  `/api/v1/gamma`, `/api/v1/history`, `/api/v1/levels.txt`, `/api/v1/bookmap.csv`, `/api/v1/key`;
  `/api/v1/symbols` is public. 120 requests a minute per key, 304s free. Guide `/docs/developers/live`. The same
  levels inside NinjaTrader, Sierra Chart, ATAS, Quantower, Bookmap, MotiveWave, TrendSpider,
  TradingView and thinkorswim: `/integrations` (all beta).
- Integrations: `/integrations` pages (beta), the levels API `/docs/developers/live` with its OpenAPI
  (`/api/v1/openapi.json`), and read-only `ftpl_` integration tokens on the LIVE plan.
- Telegram: the bot @FirmTapeBot (https://t.me/FirmTapeBot) answers `/levels`, `/gex <symbol>`,
  `/session <day>` and `/ask`, and is one destination of a LIVE account's alerts; everyone else
  sees levels fifteen minutes late. The public channel @firmtape (https://t.me/firmtape) posts
  SPX, ES, NQ and a few tickers three times a session, fifteen minutes late, the day's summary,
  and a recap of the session's large orders after the close.
- Alerts (LIVE): level alerts on a watchlist and alert lines (a price line, or a level line that
  follows the volume flip, call wall or put wall) set by a right-click on the chart; order alerts
  from order rules (ORDERS plan, never by side). Each goes to Telegram, a push on the installed
  web app, and a signed webhook (payload version 1; `X-FirmTape-Signature` is `sha256=` HMAC-SHA256
  over `<timestamp>.<raw body>`). Payload and verification: `/docs/developers/webhooks`,
  `/docs/live#alerts`. In `levels`, read `put_wall`; `put_support` is deprecated, sent until 2026-11-30.
- Geo JSON, no key: `GET https://firmtape.com/geo/api/items?week=<YYYY-Www>`, `/geo/api/weeks`,
  `/geo/api/countries`. Paid Geo API with the user's key (`Authorization: Bearer gk_...`):
  `https://geo.firmtape.com/v1/items`, `/v1/sources`, `/v1/usage`, `/v1/export.csv`; Geo MCP at
  `https://geo.firmtape.com/mcp` (tools `geo_records`, `geo_sources`, `geo_coverage`,
  `geo_snapshot`, `geo_activity`, `geo_series`, `geo_latency`). OpenAPI:
  https://firmtape.com/geo/openapi.json. Guide: https://firmtape.com/geo/docs.

## Do not

- Call any path not in the OpenAPI spec; `/snapshots/`, `/api/publish`, `/replay/` and the
  account routes are not for agents. The per-print tape is licensed and never redistributed.
- Present a level as a signal, a target or advice, or as an exchange-verified dealer position.
- Quote a level without its date, or a `/now` reading without its ET time and delay.
- Look for premarket numbers in any endpoint. PREMARKET, the LIVE terminal's estimate for
  the symbol on the chart from 04:00 to 09:30 ET against yesterday's flip and walls, is drawn
  on the terminal's screen only; no API, MCP tool, levels API or file carries it.
- Read a ledger row's rank as the size of the trade, fill an empty side with a guess, or
  name a desk, a fund or a person behind an order. The ledger says what printed, not who.
- Call `/api/orders/boards.json` or `/api/orders/card.json` (the contract boards and card). They
  are the terminal's reads behind its page token, and today's needs the ORDERS plan; use the
  keyed `/orders/api/*` with the user's `ordk_` key instead.

## Attribution

"Data sourced from FirmTape (https://firmtape.com/)". The product name is "FirmTape".
