Version
DESTRUCTIVE

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.

The REST endpoint and this tool share one action, so validation, permissions and events are identical.

Delivered to every endpoint subscribed to it once the change is made.

Annotations

DestructiveIdempotent

A client that honours annotations asks a person before running it. Sending the same arguments twice changes nothing the second time.

Arguments

project_id*string

UUID of the project whose pass plans own the window.

window_id*string

UUID 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_FAILED

the window cannot be cancelled in its current state (the resettlement refused).

RESOURCE_NOT_FOUND

unknown project_id or window_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 lacks pass-window:delete.

How is this guide?

Last updated on