Scope
The public games contract is the per-team catalog plus the published play routes and Game Center events. New daily mini-games (Pick’em, Trivia, air hockey, locker-singularity, and later registrations) use the Game Engine. Do not treat/api/v1/engage/games/* as a replacement for this catalog. Locker Singularity progress lives on /api/v1/engage/games/locker-singularity/ledger, not on the session verbs.
Published catalog
GET /api/games/catalog?teamId=...or?teamSlug=...— public, no auth
{ daily: Game[], weekly: Game[] }.
Each game entry carries id, key, title, description, icon, and badge. key is the stable slug the client maps to a playable route (for example daily-spin).
Catalog rules
- The catalog is admin-managed and team-selected server-side.
- Clients must render only the games returned and must not assume a fixed set.
- Responses are cacheable (
Cache-Control: public, max-age=60, stale-while-revalidate=300). - Unknown teams return
404. A missingteamId/teamSlugreturns400. - Native also fetches
GET /api/v1/engage/games/catalogand joins the two lists. Engine rows can stay visible when this catalog omits them. See Game Engine client.
Published play routes
GET /api/games/daily-spin/config— public wheel layoutGET /api/games/daily-spin/state— authenticated progressPOST /api/games/daily-spin/spin— server-authoritative spinPOST /api/games/guess-player/session/startPOST /api/games/guess-player/session/guessGET /api/games/live/active?teamId=...GET /api/games/guess-player/players?q=— authenticated autocompletePOST /api/games/guess-player/session/invalidateGET /api/games/live/by-code/{code},POST /api/games/live/joinGET /api/games/live/{sessionId}/leaderboard,POST /api/games/live/{sessionId}/scorePOST /api/games/live/start,POST /api/games/live/{sessionId}/end— team managerGET /api/games/pick-em/players— leftover roster helper. Engine Pick’em uses/api/v1/engage/games/daily-pickem/*instead.
POST /api/games/daily-spin/reward. New clients use POST /api/games/daily-spin/spin.
Render playable games from the catalog first. Overlay the engine catalog for Pick’em and Trivia.
Game Center events
These public and authenticated Game Center routes are in OpenAPI:GET /api/events/schedule?teamId=— repeatableteamIdfor the locker-room hero stripGET /api/events/realtime— public Broadcast discovery (URL, anon key, channel templateevents:{gameId}). Polling and ETag remain the hydrate and reconnect path.GET /api/events/{gameId}— event detail, including arealtimepointer (no anon key)GET /api/events/{gameId}/stats,/plays,/lineupGET /api/events/{gameId}/player-stats— per-player box score with server-driven columnsGET /api/events/{gameId}/top-performer— home/awaystatLine(sport-formatted). Each side includesplayerKey(Game Center identity) andplayerId(linked roster id, or null).GET /api/events/{gameId}/win-probability—{ home, away }always sums to 100GET/POST /api/events/{gameId}/chat, authenticatedPOST/DELETE /chat/mute,PUT /chat/read, andPOST /chat/{messageId}/reactGET/POST /api/events/{gameId}/presenceGET/POST /api/events/{gameId}/ratings— submit may award Club Rep. Do not call/api/v1/engage/rep/earnfor this.POST/DELETE /api/events/{gameId}/live-activity— iOS Live Activity registration. RequiresUserSettings.liveScoreUpdatesconsent.
GAME_ALERT and RATING on GET /api/notifications.
