Console
Docs/Reference

Errors & limits

Error shape, status codes, rate limits and size limits of the control-plane API and the cell.

Shape#

json
{ "error": { "code": "plan_limit", "message": "Indie projects can use at most 2 regions" } }

Control-plane status codes#

StatusCodeMeaning
400invalidMalformed body or parameter; message says which
401unauthorizedMissing or invalid bearer token
402payment_requiredPaid plan without a payment method, or Indie without an active subscription
403forbiddenAuthenticated, but the role does not allow it
403plan_limitAllowed in principle, over the plan's limit (regions, Free project count, a cell at capacity when minting through the control plane)
404not_foundUnknown id, or an id in another organisation
409conflictState does not allow it (e.g. delete a project with running nodes, demote the last owner)
429rate_limitedBack off per Retry-After
502upstreamThe cell, the provider or the payment processor did not answer; message carries the cell's error

Cell status codes (token endpoint, moderation, players)#

The cell answers with the engine's codes, upper-case: VALIDATION, UNAUTHORIZED, FORBIDDEN, NOT_FOUND, QUOTA_EXCEEDED (429 — the plan's concurrent-session cap or a channel's max_participants is reached), RATE_LIMITED. A connect refused by the cap reaches the SDK as QUOTA_EXCEEDED.

Rate limits#

ScopeLimit
Control plane, per client (IP, CF-Connecting-IP behind Cloudflare)600 requests / minute
Sign-in, registration, password reset, per client20 / 5 minutes
Cell POST /v1/tokens, per SDK keyper-key limits on the cell; ask if you need more than a few hundred per minute

Sizes and TTLs#

ItemLimit
Request body256 KB
Player token60 minutes (cell setting, not per request)
Console session30 days
API tokenoptional expiry, default none
Invite link7 days
Audit retention12 months
Usage rows24 months