Skip to main content
The Game Engine is the shared contract for new daily mini-games. The server owns scores, rewards, and session status. The client ships playfields in the app binary and renders them inside one shared shell. This is a different surface from the older /api/games/* play routes (daily spin, guess-the-player, live arena) and from Game Center /api/events/*. Those stay documented under Games.

What you get

  • A public additive catalog that marks unplayable games instead of hiding them.
  • Authenticated session verbs: start, action, complete, forfeit.
  • A native registry so a new game is a folder plus registerGame, not a new Expo route file.
  • X-Client-Version on every engine call so an outdated binary can show Update required.

Sections

Client

Registry, GameShell, HUD, catalog join, and launch routes.

Server

/api/v1/engage/games/*, session statuses, awards, and error codes.

Modularity

How you add a game without editing a shared union.

API guide

Endpoint map and coverage status for the engine HTTP surface.

Shipped vs legacy

Native 1.25.9 registers the keys above in lib/games/register-shipped.ts. The server catalog can still list additional keys. An unknown key is a first-class Update required / Not in this build state, not a crash. How-to-Play walkthroughs stay local and must not spend a daily attempt. locker-singularity spends buzz on its ledger routes instead of a daily session.
Engine routes are in generated OpenAPI under the Game Engine tag. Use the API guide plus the Endpoints playground for the HTTP surface.