cancel_pass_window
Cancel one dated access window and resettle everyone holding it. Destructive — holders are messaged and money may be owed.
Purpose
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.
Required ability
pass-window:delete
Input schema
{
"type": "object",
"required": ["project_id", "window_id"],
"properties": {
"project_id": {
"type": "string",
"description": "UUID of the project whose pass plans own the window."
},
"window_id": {
"type": "string",
"description": "UUID of the window to cancel."
}
}
}Output shape
{
"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.
Example prompts
"Cancel the 3 October window on the Saturday session plan in project
7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13— the venue fell through."
"How many people would need a refund if we cancelled window
3d5a8c72-b016-4e94-8fa7-61c209d4e738?" (read it first; do not cancel to find out)
"Take next Tuesday's make-up session off the schedule."
Failure modes
VALIDATION_FAILED— the window cannot be cancelled in its current state (the resettlement refused).RESOURCE_NOT_FOUND— unknownproject_idorwindow_id, a window of another project, or a project outside the token's scope.AUTHENTICATION_REQUIRED— no authenticated user on the request.TOKEN_MISSING_ABILITY— token lackspass-window:delete.
Related
get_pass_window— readholdersbefore cancelling.create_pass_window— add a replacement date.remind_pass_window_queue— nudge the holders of the window they were moved to.- Pass windows API — the REST equivalent, with the same
metatallies.
How is this guide?