cancel_pass_window
Cancel one dated access window and resettle everyone holding it. Destructive — holders are messaged and money may be owed.
Take a window off the schedule and deal with the people who bought it, the way the dashboard's cancel button does. Each holder is resettled in one of three ways, decided per holder:
- rebound — moved to the plan's next window that is on sale;
- leg dropped — for a season-ticket holder, the one date is removed from their series and the rest stands;
- refund due — when the schedule has nothing left to move them to, their pass is ended and flagged for a refund.
Subscriby never moves the money itself: meta.refund_due is the count of holders the creator now
owes a refund, and the creator settles it with their payment provider.
Destructive — confirm the window with a human first
Holders are messaged the moment this runs and refunds may be owed. Read the
window back with get_pass_window, check its
holders, and have the creator confirm the exact window_id before calling.
Emits pass.window_cancelled once, plus one of
pass.holder_moved,
pass.holder_stranded or
pass_series.leg_dropped per holder. Idempotent: an
already-cancelled window is answered with zero tallies and emits nothing.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Fires events
Delivered to every endpoint subscribed to it once the change is made.
Annotations
A client that honours annotations asks a person before running it. Sending the same arguments twice changes nothing the second time.
Arguments
project_id*stringUUID of the project whose pass plans own the window.
window_id*stringUUID of the window to cancel.
What it returns
{ "data": { "id": "3d5a8c72-b016-4e94-8fa7-61c209d4e738", "plan_id": "9b7c2e15-4d63-4f80-a2b1-7e5d0c9f3a46", "plan_name": "Saturday session", "starts_at": "2026-10-03T09:00:00+00:00", "ends_at": "2026-10-03T11:00:00+00:00", "timezone": "Europe/London", "local_range": "Sat 3 Oct, 10:00–12:00 BST", "duration_minutes": 120, "status": "canceled", "sellable": false, "holders": 3 }, "meta": { "rebound": 2, "refund_due": 1, "legs_dropped": 0 }}holders is the count at the moment of cancellation, so the three tallies under meta add up to
it. status is spelled canceled.
How it fails
VALIDATION_FAILEDthe window cannot be cancelled in its current state (the resettlement refused).
RESOURCE_NOT_FOUNDunknown project_id or window_id, a window of another project, or a project outside the token's scope.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks pass-window:delete.
How is this guide?
Last updated on
Plan Tools
Plans are what a project sells, and every plan has a kind that decides its shape: a subscription that renews on a cycle, a pass that sells dated windows, or a series that sells a slate of windows at once.
create_pass_window
Place one dated access window by hand on a time-limited pass plan. Marked manual, so a schedule rebuild keeps it; emits pass.window_scheduled.