broadcast.* events

Message broadcast lifecycle — when a send starts, and what it delivered.

Fires when a creator sends a Telegram message to a segment of their members. Two events bracket every send: one as it starts, carrying the audience and how many members it will reach, and one when it finishes, carrying the delivered and failed tallies.

Both fire for broadcasts started anywhere — the dashboard, the Telegram bot, the REST API, a Zap or an n8n workflow. They are emitted by the sending job rather than by each entry point, so a broadcast triggered by automation is indistinguishable from one typed into the dashboard.

Events

Audience segments

The audience field on both events is one of:

ValueReaches
allEvery member with a linked chat
customerPaying members
trialingMembers on a trial
leadMembers who started the bot but never subscribed
churnedMembers whose subscription ended
expiring_soonMembers whose access lapses inside expiring_within_days
cancelled_still_activeMembers who turned renewal off but have time left
pausedMembers whose subscription is paused rather than ended
trialing_cardlessMembers on a trial with no card on file
all_pass_holdersHolders of any currently-active pass window
all_pass_holders_not_in_queueAs above, but only those who have not tapped their invite yet
pass_holdersHolders of one named window
pass_holders_not_in_queueHolders of one named window who have not queued

The two single-window pass segments carry a pass_window_id; every other segment reports pass_window_id: null. The four pass segments require the passes capability — a project whose plan no longer includes it cannot address them, and the API refuses the send rather than silently reaching nobody.

expiring_soon reports the horizon it used in expiring_within_days; every other segment reports null. Note that an auto-renewing subscription is never in this segment: a subscription's end date is rewritten on every renewal, so a date alone would describe the next invoice rather than an expiry.

Narrowing by plan

Any segment except lead and the four pass segments can be narrowed to a single plan, and both events then carry that plan in data.plan_id. It composes with the segment rather than replacing it — customer plus a plan means people paying for that plan right now, churned plus a plan means people who held it and left. Segments that cannot be narrowed always report plan_id: null.

This matters for a consumer that counts sends per audience: two broadcast.completed events can now carry the same audience and describe different populations, and plan_id is what tells them apart.

A member is only ever a recipient if they have a chat on that project's bot. Members with no chat, or whose chat belongs to a different bot, are excluded — which is why a recipient count is often well below a project's total membership.

The message body is never in the payload

Neither event carries the text that was sent. Broadcasts are not stored — a broadcast is a send, not a record — and a body is arbitrary creator content up to 4096 characters. Repeating it on every subscribed endpoint would hand it to integrations that only need to know a send happened.

If you need the copy alongside the outcome, send the broadcast through the REST API or a Zap and correlate on project_id and created_at.

What does not emit

A broadcast that is refused never emits either event, because nothing was sent:

  • the project has no connected bot
  • the audience is unknown
  • the body is empty once reduced to Telegram's HTML subset
  • a pass segment was requested by a project whose plan no longer includes passes
  • a single-window segment was requested with no window

The REST API and MCP tool reject all of these up front with a validation error. The dashboard and bot paths log and abort.

Required abilities

Tokens subscribing to broadcast.* events must carry broadcast:send. There is no separate read ability: knowing that a broadcast went out, to whom and how many, is the same privilege as being able to send one.

How is this guide?

On this page

Subscriby is a product designed by you — for you.

No boardroom full of executives deciding what we ships next. Our roadmap always shaped by you with your feedback.

Share feedback or a request