The REST surface
Every tool is mirrored by a route, and this is where they are. The
contract is still the tool's own description — what each argument
admits, what it defaults to, what it refuses — and this page carries
none of it: see reference/surface.md for reading a description over
either surface.
{game} is a game's slug, from whoami. A body is JSON and
Content-Type: application/json is required. Authenticate with
Authorization: Bearer <token>, the same token the MCP transport
takes.
admins
PATCH /api/admins
analysis
POST /api/games/{game}/analysis/cyclesPOST /api/games/{game}/analysis/orphansPOST /api/games/{game}/analysis/unreachable
assets
GET /api/games/{game}/assetsPOST /api/games/{game}/assetsDELETE /api/games/{game}/assets/{id}GET /api/games/{game}/assets/{id}
auth
POST /api/auth/loginPOST /api/auth/logoutPOST /api/auth/register
comments
GET /api/games/{game}/commentsPOST /api/games/{game}/commentsDELETE /api/games/{game}/comments/{comment}
config
GET /api/config
docs
GET /api/games/{game}/docsPOST /api/games/{game}/docsPOST /api/games/{game}/docs/batchGET /api/games/{game}/docs/comparisonGET /api/games/{game}/docs/diffGET /api/games/{game}/docs/historyGET /api/games/{game}/docs/kindsDELETE /api/games/{game}/docs/linksGET /api/games/{game}/docs/linksPOST /api/games/{game}/docs/linksPOST /api/games/{game}/docs/moveDELETE /api/games/{game}/docs/oneGET /api/games/{game}/docs/oneGET /api/games/{game}/docs/renderedPOST /api/games/{game}/docs/revertGET /api/games/{game}/docs/version
entities
GET /api/games/{game}/entitiesPOST /api/games/{game}/entitiesDELETE /api/games/{game}/entities/by-key/{type}/{key}GET /api/games/{game}/entities/by-key/{type}/{key}GET /api/games/{game}/entities/by-key/{type}/{key}/imagesPOST /api/games/{game}/entities/by-key/{type}/{key}/imagesDELETE /api/games/{game}/entities/by-key/{type}/{key}/images/{image}POST /api/games/{game}/entities/repair
events
GET /api/games/{game}/events
games
GET /api/gamesPOST /api/gamesDELETE /api/games/{game}PATCH /api/games/{game}
invites
GET /api/games/{game}/invitesPOST /api/games/{game}/invitesDELETE /api/games/{game}/invites/{invite}GET /api/invitesPOST /api/invitesDELETE /api/invites/{invite}
mcp
GET /api/mcp/tools
me
GET /api/mePATCH /api/me/localePATCH /api/me/password
members
GET /api/games/{game}/membersDELETE /api/games/{game}/members/{user}PATCH /api/games/{game}/members/{user}
relation-types
GET /api/games/{game}/relation-typesPOST /api/games/{game}/relation-typesDELETE /api/games/{game}/relation-types/by-key/{key}GET /api/games/{game}/relation-types/by-key/{key}POST /api/games/{game}/relation-types/rename
relations
GET /api/games/{game}/relationsPOST /api/games/{game}/relationsDELETE /api/games/{game}/relations/oneGET /api/games/{game}/relations/onePOST /api/games/{game}/relations/repair
routes
GET /api/games/{game}/routesPOST /api/games/{game}/routesDELETE /api/games/{game}/routes/by-key/{key}GET /api/games/{game}/routes/by-key/{key}POST /api/games/{game}/routes/by-key/{key}/check
search
GET /api/games/{game}/search
summary
GET /api/games/{game}/summary
tokens
GET /api/games/{game}/tokensPOST /api/games/{game}/tokensDELETE /api/games/{game}/tokens/{token}
types
GET /api/games/{game}/typesPOST /api/games/{game}/typesDELETE /api/games/{game}/types/by-key/{key}GET /api/games/{game}/types/by-key/{key}POST /api/games/{game}/types/rename
users
GET /api/usersPATCH /api/users/{user}
views
GET /api/games/{game}/viewsPOST /api/games/{game}/viewsDELETE /api/games/{game}/views/by-key/{key}GET /api/games/{game}/views/by-key/{key}POST /api/games/{game}/views/by-key/{key}/backgroundPOST /api/games/{game}/views/by-key/{key}/positionsPOST /api/games/{game}/views/by-key/{key}/positions/clearGET /api/games/{game}/views/renderersPOST /api/games/{game}/views/runPOST /api/games/{game}/views/validate