| Method | Path | Description | Auth |
| GET | /me | Current user from Google ID token | Google JWT |
| POST | /scores | Submit a score for a game | Google JWT |
| GET | /scores/me | Caller's score history (all games) | Google JWT |
| GET | /scores/me/:game_id | Caller's history + personal best for a game | Google JWT |
| GET | /scores/me/daily | Caller's daily-challenge history with precomputed rank/total per day | Google JWT |
| GET | /leaderboard/:game_id | Top N rows for a game (one row per user — their best) | — |
| GET | /leaderboard/daily/:date/:game_id | Daily-challenge leaderboard for a given local date | — |
| GET | /games | Game IDs and the metric keys this server accepts | — |
| GET | /daily/today | Today's featured game (accepts ?tz=<IANA>) | — |
| GET | /me/daily-subscription | Caller's daily-email subscription state | Google JWT |
| POST | /me/daily-subscription | Subscribe / update timezone & send_hour_local | Google JWT |
| DELETE | /me/daily-subscription | Unsubscribe (in-app) | Google JWT |
| GET | /unsubscribe | One-click unsubscribe from email links | token |
| POST | /me/invite-friend | Email a daily-challenge invite to a friend (rate-limited 5/day) | Google JWT |
| GET | /no-invites | One-click opt-out from invitation emails | token |