list_pass_moves
Every hop one purchase's passes made, oldest first, from the project's pass move log — both dates, the reason, who made it and when.
Read one purchase's trail: a date cancelled and the holder rolled forward
(window_cancelled), a season date replaced by another (series_date_substituted), or a
payment that settled after the date it was for and was bound to the next one
(paid_after_window). Each hop names both dates by id and as a person reads them in the
plan's zone, who made it (null when the platform did on its own) and when.
The log keeps every hop; the ledger keeps the last
The ledger rewrites a moved pass onto its new date, so it remembers only where a pass is now. The move log is written beside it the moment a pass moves, so a pass moved twice answers two rows here, and an empty list means the purchase's passes never moved.
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.
Annotations
It reads and never changes anything.
Arguments
subscription_id*stringUUID of the purchase whose passes' moves to list.
What it returns
{ "data": [ { "id": "0f9e8d7c-6b5a-4f3e-9d2c-1b0a9f8e7d6c", "subscription_id": "5b7e2d40-1a86-4c39-97f2-e83d0b16c5a4", "claim_id": "c1f2e3d4-5a6b-4c7d-8e9f-0a1b2c3d4e5f", "from_window_id": "9c1f4e27-5a8b-4d63-b2e0-8f7a6c5d4e31", "from_local_range": "Thu 5 Nov 2026, 15:30 – Fri 6 Nov, 00:00 CST", "to_window_id": "3d5a8c72-b016-4e94-8fa7-61c209d4e738", "to_local_range": "Thu 12 Nov 2026, 15:30 – Fri 13 Nov, 00:00 CST", "reason": "window_cancelled", "moved_by_user_id": "6a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d", "moved_by_name": "Aaron", "moved_at": "2026-11-06T09:15:02+00:00" } ], "meta": { "total": 1 }}| Field | Type | Notes |
|---|---|---|
id | string UUID | The hop, the move_id that pass.holder_moved and pass_series.leg_substituted carry. |
from_window_id | string UUID | The date left; null for a late payment bound to the next date with nothing to leave. |
to_window_id | string UUID | The date put onto; null when the pass was ended instead. |
from_local_range | string | The date left as a person reads it, in its plan's zone; null when the date is gone. Likewise to_local_range. |
reason | string | window_cancelled, series_date_substituted or paid_after_window. |
moved_by_user_id | string UUID | The creator or team member whose action made the hop; null when the platform made it. |
How it fails
RESOURCE_NOT_FOUNDunknown subscription_id, or a purchase outside the token's scope.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-subscription:view.
How is this guide?
Last updated on
get_subscription
One subscription by UUID — plan, subscriber, payment method, status, price, trial and end dates, and whether it was cancelled. Read it before acting on it.
list_subscription_grants
List the access grants a subscription holds — one per resource and dated window, with the connector, how access was given, where it stands and why it failed if it did.