admin scope, so new routes are locked by default. Edits to maps, rules, scopes and tool mappings also need the admin or editor role when made by a person (Roles).
Who gets in
Scopes
Keys look like
clr_<prefix>_<secret>; only a SHA-256 hash is stored. Session tokens look like clt_… and are HMAC-signed. Send either as Authorization: Bearer <credential>.
Limits
- Rate limits per key or token (token bucket): for example
agent20/s with bursts of 100,llm5/s. Minting browser tokens and starting voice conversations have tighter limits. Over the limit:429withRetry-After. - Failed logins are limited per IP: after 10 bad credentials the IP is slowed to one try every 10 seconds.
- Body size is capped (1 MB by default, 4 MB for voice clips):
413. - WebSocket: at most 2 connections per session and 6 per key or token.
- CORS: only the configured web origins, no cookies.
Errors
401 missing, invalid or expired credential · 403 wrong scope · 429 rate limited · 413 body too large.
Health check
GET /healthz is public and returns only {ok, auth, version}. Configuration details and recent model calls are at /admin/healthz, admin only.
Accounts and device sign-in have their own limits: see Sign-in and Device sign-in.