Error codes

The standard error envelope, what each status means, and how to respond
Report issue

Every error returns the same shape. requestId matches the x-request-id response header, so quote it when reporting a problem.

1{
2 "error": {
3 "message": "Missing required scope: update:users",
4 "status": 403,
5 "requestId": "6f1c0a3e-6d0f-4f2b-9a1e-2b7a5c0d9e11"
6 }
7}

In non-production environments the envelope may carry a details field with validation issues or the upstream Auth0 response. It is suppressed for server errors in production.

Status codes

StatusMeaningWhat to do
400The request failed validationFix the request; details names the fields
401Missing, expired, or invalid tokenGet a new token; check the audience and tenant
403Valid token without the required scopeRequest the scope for the client
404No such resourceConfirm the identifier and the tenant
409Conflicts with an existing recordLook up the existing record first
429Rate limitedBack off and retry; see Rate limits
500Unhandled error in the proxyRetry once, then report with the request id
502Auth0 unreachable, or the proxy’s own credentials were rejectedRetry with backoff; escalate if it persists
503The identity provider could not be reached to verify a tokenRetry with backoff

A 401 from Auth0 to the proxy surfaces as 502, not 401. A 401 you receive always refers to your own token.

Which errors are worth retrying

StatusRetryNotes
400, 401, 403, 404, 409NoRetrying repeats the same failure
429YesHonor Retry-After
500, 502, 503YesExponential backoff with jitter, and a cap

Common messages

MessageCause
Missing bearer tokenNo Authorization header, or a malformed one
Token expiredThe cached token outlived its lifetime
Token claim "aud" is invalidToken requested for a different audience
Missing required scope: <scope>The client is not granted that scope
Request validation failedBody or query did not match the schema

Reporting a problem

Include the request id, the timestamp with its timezone, the environment, the method and path, and the status you received. The request id is the fastest way to find the matching log line.