pass.window_opened
A time-limited pass access window opened and its holders were admitted.
When this fires
A scheduled access window on a time-limited pass plan reached its start time. Everyone holding that window has been admitted to the plan's Telegram resources.
Windows are processed every minute, so this fires within roughly 60 seconds of the advertised start time rather than exactly on it.
This describes the window, not an individual subscriber. For per-member
grants, subscribe to member.resource_added,
which fires once per subscriber per resource.
Required ability
project-subscription-plan:view-any — token must carry this at mint time to subscribe an endpoint to this event.
Payload
{
"id": "evt_01HX...",
"type": "pass.window_opened",
"created_at": "2026-09-20T13:00:04Z",
"api_version": "2026-05-01",
"project_id": "prj_01HX...",
"data": {
"plan_id": "pln_01HX...",
"window_id": "psw_01HX...",
"starts_at": "2026-09-20T13:00:00Z",
"ends_at": "2026-09-21T03:00:00Z",
"subscribers_affected": 47
}
}Field reference
| Field | Type | Notes |
|---|---|---|
id | string ULID | Unique event id, prefixed evt_. Use for idempotent processing. |
type | string | Always pass.window_opened for this event. |
created_at | ISO 8601 timestamp | Server-side emission time. |
api_version | string | Webhook API contract version. |
project_id | string ULID | Project this event belongs to. |
data.plan_id | string ULID | The pass plan the window belongs to. |
data.window_id | string ULID | The access window that opened. |
data.starts_at | ISO 8601 timestamp | Window start, always UTC. Render in the plan's schedule timezone. |
data.ends_at | ISO 8601 timestamp | Window end, always UTC. |
data.subscribers_affected | integer | How many holders were admitted. May be 0 if every holder cancelled. |
Caveats
- Timestamps are UTC. A pass schedule is authored in the creator's timezone, so rendering these without converting will show the wrong local time to buyers.
subscribers_affectedcounts holders who were eligible at open time, not at purchase time. Cancelled and paused passes are excluded, so this can be lower than the number sold.- Anyone who buys after this fires is outside the count entirely — a plan whose sales
cutoff is anchored to the window end keeps selling while the window runs. Those admissions
arrive as
member.resource_added, not as a secondpass.window_opened. - A window whose worker was down for its entire span is closed without ever opening. In that
case this event never fires and only
pass.window_closedis emitted.
Related events
pass.window_closed— paired transition.member.resource_added— per-subscriber grant.- Pass events overview — back to family overview.
How is this guide?