Features / Alerts

Alerts from the chart

An alert on a price or on a level, set where you are looking, delivered to Telegram, your phone or your server. Part of LIVE.

Set one with a right-click

Right-click any price on the chart (on a phone, hold your finger on it) and pick Alert at 7,809.75. Near a wall or the zero-gamma flip the menu offers a second line: Alert when price reaches Call wall. That one is a level line: it follows the call wall, the put wall or the flip wherever the book moves it during the session. A strike row on the ladder opens the same menu.

The chart's right-click menu with Alert at 7,809.75 and Alert when price reaches Call wall
The menu on a price next to the call wall.

A line you can move

Each alert is a dashed line with a bell on the price scale. Drag the line to a new price. Tap the bell for Once (the line fires one time and goes away), Repeat (it fires again after price has moved away and come back) or Delete. A line fires on the first reading that crosses or touches it, with no waiting period, because you chose the price. A level line follows the volume book, the book the chart draws by default. Up to 25 lines per account, kept on your account, so they are on every device you sign in on.

A level line on the call wall at 7,810 and a price line at 7,804 with its Once, Repeat and Delete card
A level line on the call wall and a price line with its card.

Where it arrives

A fired line goes everywhere your level alerts go: a Telegram message from @FirmTapeBot, a notification on your phone, and a POST to your webhook. Each one carries the price, the time in New York, the flip and both walls of the book at that second, and which book it read. Every message is a measurement, never a trade call.

The same alert as a Telegram message and as a phone notification, for a price line and for a level line
A price line and a level line, in Telegram and as a push notification.

Notifications on your phone

The terminal installs as a web app, and an installed app can show notifications. On iPhone or iPad open firmtape.com in Safari, tap Share, then Add to Home Screen, open FirmTape from the Home Screen and turn on Push to this device under Account, Level alerts. On Android, Chrome is enough: open the same page and turn it on. Send test checks the device at once.

The Level alerts page on a phone with Push to this device turned on and the webhook field
Account, Level alerts, on a phone.

A signed webhook

Paste one https:// address under Account, Level alerts, Webhook. Every alert is POSTed there as JSON, signed with a secret only you and FirmTape hold. An alert line adds its own block, alert, to the event:

POST https://your.server/firmtape
Content-Type: application/json
X-FirmTape-Event: price_alert
X-FirmTape-Event-Id: evt_1ce00bdb4fbaed84a7f4d622
X-FirmTape-Timestamp: 1760279465
X-FirmTape-Signature: sha256=<hex HMAC-SHA256 of "<timestamp>.<raw body>">

{"version": 1, "id": "evt_1ce00bdb4fbaed84a7f4d622", "type": "price_alert",
 "symbol": "SPX", "level": {"kind": "price", "value": 7812.5}, "price": 7812.75,
 "book": "volume", "ts": "2026-10-12T10:31:05-04:00", "day": "2026-10-12",
 "levels": {"flip": 7795.5, "call_wall": 7825, "put_wall": 7790},
 "text": "SPX crossed above 7,812.50, your price alert", "direction": "above",
 "alert": {"id": "al_3f9c2a71b0de", "kind": "price", "level": null, "price": 7812.5, "mode": "once"}}

The type is price_alert for a price line and level_line for a line that follows a level; the watchlist's events are flip_cross, wall_break, regime_change, wall_move, flip_move and level_near. The id is the same on every retry of one event, so drop one you have seen.

Verify every request. Recompute the signature over the timestamp header, a dot and the raw body, compare in constant time, and refuse a timestamp more than five minutes old:

// Node
const crypto = require("crypto");
function verify(rawBody, headers, secret) {
  const t = headers["x-firmtape-timestamp"], sig = headers["x-firmtape-signature"] || "";
  if (!t || Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
  const want = "sha256=" + crypto.createHmac("sha256", secret).update(t + "." + rawBody).digest("hex");
  return sig.length === want.length && crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(want));
}

# Python
import hmac, hashlib, time
def verify(raw_body: bytes, headers, secret: str) -> bool:
    t = headers.get("X-FirmTape-Timestamp", "")
    if not t or abs(time.time() - int(t)) > 300: return False
    want = "sha256=" + hmac.new(secret.encode(), t.encode() + b"." + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(want, headers.get("X-FirmTape-Signature", ""))

Answer with any 2xx within three seconds. No answer, a 429 or a 5xx is tried again after one and four seconds, three tries in all. Ten failed events in a row switch the webhook off until you save the address again. Every field is listed in the guide.

Level alerts on a watchlist

Beside the lines you draw, a watchlist of up to twenty symbols (SPX, ES, NQ or any ticker on the chart) watches the levels for you: price crossing the flip, breaking the call wall or the put wall, the book changing gamma regime, a wall or the flip moving, price coming near the flip or a wall. SPX, ES and NQ are checked every few seconds against the book rebuilt each second; other tickers read their five-minute book and the message says so. A new side has to hold for twenty seconds, and the same alert is not sent again within fifteen minutes. Your alert lines are listed on the same page, with Make once, Make repeat and Delete.

The Level alerts account page: the events, how alerts fire, and the alert lines from the chart
Account, Level alerts: the events, the rules they follow and the lines from the chart.

Open the terminalThe guide