Browse documentation

Base: the Console host (console.<domain>). Auth is a Better Auth session cookie or bearer token; see Console overview.

Responses use { success, data } / { success, message }. Guards are cumulative: requireSession runs on everything below except the auth routes and login.

Authentication

MethodPathGuardPurpose
ALL/api/auth/*rate-limited, enforcePasswordRotationBetter Auth (sign-in, sign-out, 2FA verify, session)
POST/api/platform/loginrate-limitedLogin adapter: relays Better Auth cookies, reports twoFactor and mustChangePassword

Platform

Source: apps/server/console/routes/platform.routes.ts.

MethodPathGuardPurpose
GET/api/platform/mesessionCurrent identity, role, capabilities, projects
GET/api/platform/infosessionPlatform info (mode, domain suffix, features)
GET/api/platform/versionsessionRunning version
GET/api/platform/auditaudit.readAudit events
GET/api/platform/logsrole owner/adminConsole log buffer
GET/api/platform/dnsrole owner/adminConsole + wildcard DNS diagnostics
GET/api/platform/update/planrole owner/adminAvailable update and its plan
GET/api/platform/metricssessionPer-project resource usage
GET/api/platform/settingsrole ownerConsole settings
PUT/api/platform/settingsrole ownerUpdate Console settings
GET/api/platform/project-defaultsrole ownerDefaults for new projects
PUT/api/platform/project-defaultsrole ownerUpdate those defaults
GET/api/platform/proxy-metricssessionPer-project proxy request counts
POST/api/platform/account/passwordsessionChange own password (allowed while mustChangePassword)

Projects

MethodPathGuardPurpose
GET/api/platform/projectssession (scoped)List projects visible to the caller
POST/api/platform/projectsproject.createCreate; 409 when the name exists
DELETE/api/platform/projects/:idproject.deleteDestroy the stack and its directory
POST/api/platform/projects/:id/startruntime.manage
POST/api/platform/projects/:id/stopruntime.manage
POST/api/platform/projects/:id/restartruntime.manage
POST/api/platform/projects/:id/updateruntime.managepull + up
POST/api/platform/projects/:id/rebuildruntime.manage
GET/api/platform/projects/:id/readyproject.readWhether the stack answers its health probe yet
GET/api/platform/projects/:id/logsproject.readCompose logs
GET/api/platform/projects/:id/dnsproject.readDomain + storage DNS and TCP checks
GET/api/platform/projects/:id/shellruntime.manageThe docker compose exec command to run
GET/api/platform/projects/:id/configproject.readDomains, CORS, image, cert resolver
PATCH/api/platform/projects/:id/configsettings.writePatch the above
GET/api/platform/projects/:id/limitsproject.readCPU/memory quotas
PATCH/api/platform/projects/:id/limitssettings.writePatch the quotas

Unknown project ids return 404 project not found.

Users

Source: console/routes/users.routes.ts. Managing users requires the users.manage capability — owner only.

MethodPathPurpose
GET/api/platform/usersList operators
POST/api/platform/usersCreate one
PATCH/api/platform/users/:idUpdate role, projects, disabled, password
DELETE/api/platform/users/:id/sessionsRevoke all sessions
DELETE/api/platform/users/:idDelete

Organizations

Source: console/routes/orgs.routes.ts. Routes on a specific org require membership (requireOrgMember).

MethodPathPurpose
GET/api/platform/orgsOrgs the caller belongs to, with role and project count
POST/api/platform/orgsCreate an org
GET/api/platform/orgs/:idRead one
PATCH/api/platform/orgs/:idRename
DELETE/api/platform/orgs/:idDelete
GET/api/platform/orgs/:id/membersList members
POST/api/platform/orgs/:id/membersAdd a member
DELETE/api/platform/orgs/:id/members/:userIdRemove a member

Project proxy

Source: console/routes/proxy.routes.ts. See Project proxy for capability mapping and upstream behaviour.

MethodPathForwards to
ALL/api/projects/:id/admin/*/api/admin/*
ALL/api/projects/:id/rest/*/rest/*
ALL/api/projects/:id/edge/*/api/edge/*

Orchestration daemon

Not reachable from the browser — it is an internal service with its own bearer secret. See Orchestration daemon.