Developers menu

cvd_line

Sent when a CVD line fires: inside one bar of the line's width (15 seconds by default), SPX options printed as calls minus those printed as puts reached the line's value; a volume line (alert.measure total, calls or puts) counts that volume instead.

POSTyour https addressX-FirmTape-Event: cvd_line
Plan LIVEPayload version 1Signed HMAC-SHA256Schema cvd_line.schema.json

This event serves

Plan: 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. Pricing. Turn it on: Right-click the CVD band (Layers, Indicators, CVD) and pick Alert at CVD or Alert at volume; a webhook address on Account, Level alerts.

When it is sent

  • At the first second the bar's running calls minus puts (or, for a volume line, its volume) reaches the line, read every 5 seconds from the per-second tape.
  • At most once a bar; a repeating line can fire again in a later bar.

Payload

FieldMeaningUnit
version1Payload version, 1.
idstringEvent id, evt_ and 24 hex digits. The same on every try and for every account the event goes to: drop one you have seen.
type"cvd_line"cvd_line.
symbolstringSPX, ES, NQ, RTY or a ticker.
levelobjectkind is cvd; value the line's value, in contracts (or delta-contracts, see alert.unit).
pricenumber | nullThe price at the event. Null on a premarket event (see phase).index points
bookvolume | measuredvolume: the volume book's levels.
tsstringWhen it was found, ISO 8601 in New York time.
daystringThe ET trading day.
levelsobjectThe volume book's levels at the event.
levels.flipnumber | nullFlip.index points
levels.call_wallnumber | nullCall wall.index points
levels.put_wallnumber | nullPut wall.index points
levels.put_supportdeprecatednumber | nullThe put wall under its first name. Deprecated: read put_wall; removed after 2026-11-30.index points
textstringThe sentence Telegram and push show.
directionabove | belowabove for a positive line (calls, or a volume line), below for a negative one (puts).
threshold_pointsnumberSized events (flip_move, level_near): the size the account picked, SPX points.index points
fromstringES, NQ, RTY: the index whose book moved by the basis gives the levels.
basisnumber | nullES, NQ, RTY: the basis at the event.index points
levels_asofstring | nullSymbols on a five-minute book: when that book was built.
phasepremarketPresent only when a price line fired before the bell, from 04:00 ET to the open on a trading day: premarket. The line was crossed on the premarket's minute prices; price is then null, and levels are the previous session's closing levels. Absent on every event in the session.
alertobjectThe line that fired: value, win, scope (z0 0DTE, nx the next expiries, all), unit (ct contracts, delta |delta|-weighted), measure (net calls minus puts, total calls plus puts, calls, puts), mode.
cvdobjectThe bar that fired it: run the calls minus puts (a volume line: its volume) printed in the bar up to the firing second, window_s the bar's width, bar_start its first second, ET.

Delivery

AnswerAny 2xx within 3 seconds. Redirects are not followed.
RetriesNo answer, a 429 or a 5xx: tried again after 1 s and 4 s, three tries in all, the same id each time.
Switched offAfter 10 failed events in a row; the account page shows why. Saving the address switches it on again.
VolumeUp to 30 events a minute per account; past that they are dropped and counted on the account page.
Testtype: "test", from Send test
LogThe last delivery (time, status, tries) on the account page.

Verify every request before reading it: Webhooks: verify the signature.

flip_cross · wall_break · regime_change · wall_move · flip_move · level_near · price_alert · level_line · order · test

Measurements of dealer positioning, never a forecast or a trade call. This page is built from FirmTape's public contract, the same files the OpenAPI document is built from; the tests hold them against the route code. Markdown: /docs/developers/live/events/cvd_line.md.