Error envelope
Errors always use the standard envelope: an error object with a stable code, a human-readable message, and optional details, alongside ok: false.
{
"error": {
"code": "insufficient_scope",
"details": { "missing": ["brand:ads:launch"] },
"message": "This token is missing required scopes."
},
"ok": false
}
Status codes
| Status | Code | Meaning |
|---|---|---|
| 401 | unauthorized | Missing or invalid bearer token |
| 403 | insufficient_scope | Token lacks a required scope |
| 403 | forbidden | Your role cannot perform this action |
| 404 | not_found | Route or resource does not exist |
| 405 | method_not_allowed | Method not supported — see the Allow header |
| 413 | request_too_large | Request body exceeds the size limit |
| 422 | invalid_* | Payload failed validation |
| 503 | *_not_configured | Auth backend unavailable |
Scope failures also set a WWW-Authenticate header naming the required scopes, so clients can request a correctly-scoped token.
Limits
Request bodies are capped at 10 MiB; larger payloads are rejected with 413 request_too_large and the limit echoed in details.maxBytes. Media uploads (creator videos, images) have their own dedicated endpoints with different limits documented on those resources.
