Published route
GET /api/games/catalog?teamId=...or?teamSlug=...
Runtime behavior highlights
- Returns
{ daily: Game[], weekly: Game[] }for the team’s enabled games. - Each entry includes
id,key,title,description,icon, andbadge. - Cache:
public, max-age=60, stale-while-revalidate=300. - Missing
teamId/teamSlug→400. Unknown team →404.
Published play routes
/api/games/daily-spin/config,/state,/spin/api/games/guess-player/session/start,/session/guess,/session/invalidate,/players/api/games/live/active,/by-code/{code},/join,/{sessionId}/score,/{sessionId}/leaderboard/api/games/live/startand/{sessionId}/end(team manager)/api/games/pick-em/players(leftover roster helper)
/api/games/daily-spin/reward. Engine Pick’em sessions use /api/v1/engage/games/daily-pickem/*.
Game Center schedule, realtime discovery, detail, stats, player-stats, plays, lineup, top-performer, win-probability, chat (including PUT /chat/read and POST /chat/{messageId}/react), presence, ratings, and live-activity are published under /api/events/*.
Native must not assume these keys exist for every team. Render only catalog results, then overlay the engine catalog. locker-singularity progress is the idle ledger, not these play routes.
Exclusions
- Admin game CRUD and team assignment internals are redacted.
