> ## Documentation Index
> Fetch the complete documentation index at: https://docs.d-sports.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Games behavior

> Runtime behavior for the public games catalog and unpublished play routes.

## Published route

* `GET /api/games/catalog?teamId=...` or `?teamSlug=...`

Public. No Clerk session required.

## Runtime behavior highlights

* Returns `{ daily: Game[], weekly: Game[] }` for the team's enabled games.
* Each entry includes `id`, `key`, `title`, `description`, `icon`, and `badge`.
* 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/start` and `/{sessionId}/end` (team manager)
* `/api/games/pick-em/players` (leftover roster helper)

Do not call deprecated `/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](/repositories/game-engine/client). `locker-singularity` progress is the idle ledger, not these play routes.

## Exclusions

* Admin game CRUD and team assignment internals are redacted.
