Version
READ

get_pass_roster

A project's members against the dates its pass plans sell — who holds which date, where each stands on it, and who was moved from where when a date was cancelled.

Read the Pass Roster the dashboard draws, as a page of rows: one row per member holding a date within the span, with their standing on every date they hold and the cancelled dates they were moved off. It is the tool for "who is on Saturday", "who was rolled over from Thursday and to where", and "who still has not joined the queue".

The columns ride under meta.dates, the dates beyond the span that holders were moved onto under meta.moved_to_dates, so a departure always names a date you can read, and every move off a column folded by destination under meta.relocations, so "twelve moved from Thursday to the following Thursday" is one line rather than twelve rows.

The span is eight weeks either side of now unless you say otherwise

from and to narrow or widen the span; a date is a column when it ends after from and starts before to. plan_id keeps to one plan's dates and holders, and a search text keeps the members whose name or email contains it, as the page's own filters do.

The standings are the roster's words: in (admitted), queued (in the join queue, admitted when the date opens), holds (bought and not in the queue yet, the one to nudge), missed (held and never joined once the date ran), ended (the date ended or access was taken away) and covered (held through another purchase as well, which is the one that admits them).

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.

Annotations

Read-only

It reads and never changes anything.

Arguments

project_id*string

UUID of the project whose roster to read.

plan_idstringoptional

UUID of one pass or series plan of the project, to keep to its dates and holders.

searchstringoptional

Keep the members whose name or email contains this text (up to 100 characters).

fromstringoptional

ISO-8601 instant: only dates ending at or after it are columns. Eight weeks before now when omitted.

tostringoptional

ISO-8601 instant: only dates starting at or before it are columns. Eight weeks after now when omitted.

limitintegeroptional

Maximum rows to return per page (1..100).

min1max100
pageintegeroptional

1-indexed page number.

min1

What it returns

{  "data": [    {      "member": {        "id": "2a91c4e7-6f38-4b52-8e0d-9c1a7b3f5d80",        "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",        "name": "Gus Moved",        "email": "gus@example.com",        "status": "customer"      },      "dates": [        {          "window_id": "3d5a8c72-b016-4e94-8fa7-61c209d4e738",          "standing": "holds",          "claim_id": "c1f2e3d4-5a6b-4c7d-8e9f-0a1b2c3d4e5f",          "subscription_id": "5b7e2d40-1a86-4c39-97f2-e83d0b16c5a4",          "plan_name": "Thursday Football Pass",          "from_series": false,          "moved_from_window_id": "9c1f4e27-5a8b-4d63-b2e0-8f7a6c5d4e31",          "last_reminded_at": null        }      ],      "departures": [        {          "window_id": "9c1f4e27-5a8b-4d63-b2e0-8f7a6c5d4e31",          "to_window_id": "3d5a8c72-b016-4e94-8fa7-61c209d4e738",          "reason": "window_cancelled",          "moved_at": "2026-11-06T09:15:02+00:00",          "move_id": "0f9e8d7c-6b5a-4f3e-9d2c-1b0a9f8e7d6c"        }      ]    }  ],  "meta": {    "page": 1,    "limit": 25,    "total": 1,    "has_more": false,    "span": { "from": "2026-09-11T12:00:00+00:00", "to": "2027-01-01T12:00:00+00:00" },    "dates": [      {        "id": "9c1f4e27-5a8b-4d63-b2e0-8f7a6c5d4e31",        "plan_id": "c4e82f16-93a7-4d5b-b81c-6e0f27a94d3b",        "plan_name": "Thursday Football Pass",        "starts_at": "2026-11-05T21:30:00+00:00",        "ends_at": "2026-11-06T06:00:00+00:00",        "timezone": "America/Chicago",        "local_range": "Thu 5 Nov 2026, 15:30 – Fri 6 Nov, 00:00 CST",        "status": "canceled"      }    ],    "moved_to_dates": [],    "relocations": [      {        "from_window_id": "9c1f4e27-5a8b-4d63-b2e0-8f7a6c5d4e31",        "to_window_id": "3d5a8c72-b016-4e94-8fa7-61c209d4e738",        "count": 12,        "last_moved_at": "2026-11-06T09:15:02+00:00"      }    ]  }}
FieldTypeNotes
memberobjectA summary: id, name, address and status. get_subscriber has the rest.
dates[].window_idstring UUIDThe date, one of meta.dates or meta.moved_to_dates.
dates[].standingstringin, queued, holds, missed, ended or covered.
dates[].moved_from_window_idstring UUIDThe date the claim last came from; null when it never moved.
departures[].to_window_idstring UUIDThe date the member was moved to; null when their pass was ended instead.
departures[].reasonstringwindow_cancelled, series_date_substituted or paid_after_window.
meta.relocations[].countintegerHow many holders made that hop, across every member, not only the page.

meta.dates is the slim column shape: for whether a date is still on sale and how many hold it, read it with get_pass_window by its id.

How it fails

VALIDATION_FAILED

from or to is not an ISO-8601 instant.

RESOURCE_NOT_FOUND

unknown project_id or plan_id, a plan of another project, or a project outside the token's scope.

AUTHENTICATION_REQUIRED

no authenticated user on the request.

TOKEN_MISSING_ABILITY

token lacks project-user:view-any.

How is this guide?

Last updated on