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 — 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?

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