pass.window_scheduled

A new access window came into existence on a time-limited pass plan.

When this fires

A dated access window was created on a pass plan — either generated from the plan's recurrence, or placed by hand from Manage Access Windows.

This is the event that lets you mirror a schedule outward without polling for it. Every other pass.* event describes something happening to a window that already exists; this one is the window arriving.

Why this matters more once a series is involved

A Pass Series can be set to absorb new windows automatically as they are scheduled, and its holders are granted them at no charge. Without this event an integration has no way to learn a season grew except by re-reading the plan — the difference between a synced calendar and a stale one.

Required ability

project-subscription-plan:view — token must carry this at mint time to subscribe an endpoint to this event.

Payload

{
  "id": "evt_01HX...",
  "type": "pass.window_scheduled",
  "created_at": "2026-09-01T09:14:22Z",
  "api_version": "2026-05-01",
  "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
  "data": {
    "plan_id": "c4e82f16-93a7-4d5b-b81c-6e0f27a94d3b",
    "window_id": "3d5a8c72-b016-4e94-8fa7-61c209d4e738",
    "starts_at": "2026-09-20T13:00:00+00:00",
    "ends_at": "2026-09-21T03:00:00+00:00",
    "timezone": "America/New_York",
    "source": "generated"
  }
}

Field reference

FieldTypeNotes
idstring ULIDUnique event id, prefixed evt_. Use for idempotent processing.
typestringAlways pass.window_scheduled for this event.
created_atISO 8601 timestampServer-side emission time.
api_versionstringWebhook API contract version.
project_idstring UUIDProject this event belongs to.
data.plan_idstring UUIDThe pass plan the window belongs to.
data.window_idstring UUIDThe window that was created. This is the id a Pass Series points at.
data.starts_atISO 8601 timestampWindow start, always UTC.
data.ends_atISO 8601 timestampWindow end, always UTC.
data.timezonestring, nullableThe IANA zone the schedule was authored in. Render starts_at/ends_at in this, not UTC. null when the plan has no timezone recorded — fall back to UTC.
data.sourcestringgenerated (built from the plan's recurrence) or manual (placed by hand).

Caveats

  • Editing a schedule regenerates windows in bulk. Saving a pass plan rebuilds its unsold future windows, so a single edit can emit this many times in quick succession. Batch on your side rather than treating each as an isolated announcement.
  • Regeneration never touches a window somebody bought, a window a series points at, or one a creator pinned — so those are not deleted and re-created, and do not re-emit.
  • source: manual windows are never rebuilt by a schedule edit. They fire this once, when placed.
  • Timestamps are UTC. timezone is on the payload precisely so you do not have to look the plan up to render them correctly.

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