Quickstart: Tier 1 (reader)

Tier 1 is read-only: people, training sessions, check-ins, per-week rollups, and the change feed. This walks getting a token, checking the deployment, and confirming the token resolves, which is the whole of what a reader needs to start.

1. Get a token

Ask your team's operator to sign in and create a token at /team/tokens. They can hand you the plaintext once, since the platform never shows it again.

2. Check what this deployment supports

GET /v1/capabilities is public and needs no token:

curl https://xcathletes.org/v1/capabilities
{
  "version": "v1",
  "tiers": ["reader", "writer", "roster_aware"],
  "features": { "export": false, "join_codes": false, "rollups": true, "changes": true }
}

3. Confirm the token

GET /v1/token is the whoami call; any tier may make it:

curl -H "Authorization: Bearer $TOKEN" \
  https://xcathletes.org/v1/token
{
  "kind": "live",
  "tier": 1,
  "team": { "id": "01020304050607080910111213141516", "name": "ECXC" },
  "person_count": 24,
  "issued_at": "2026-01-01T00:00:00.000Z",
  "last_used_at": "2026-08-20T18:00:00.000Z"
}

A 200 back, naming your token's own tier and team, is the verified outcome: you're set up. From here, GET /v1/training-sessions, /checkins, and /rollups read the roster your grants reach, and GET /v1/changes?cursor= is how you stay current; see the mirror-sync how-to. Bulk export is not implemented; GET /v1/capabilities reports features.export as false (EXP-01..04).