Errors & retries

Problem responses, request IDs and retry behavior.

Problem responses

Errors use application/problem+json. Retain the body’s requestId or the X-Request-ID response header when investigating a failed request.

Example · missing credential
{
  "type": "https://api.boxobserver.com/problems/authentication-required",
  "title": "Request rejected",
  "status": 401,
  "detail": "A bearer API key or Clerk session token is required.",
  "requestId": "example-request-id"
}

Status codes

StatusMeaningClient action
400Invalid filter, ID, cursor or date rangeCorrect the request.
401Missing, invalid, expired or revoked credentialObtain a valid credential; do not loop retries.
403Origin or access rejectedCheck access and browser-origin configuration.
404Resource unavailable within your access, or route not foundCheck the path and identifier.
429Rate limit exceededRespect Retry-After.
500Unexpected server errorUse a bounded retry and retain the request ID.
503Public access disabled, dependency unavailable or configuration missingCheck the response detail and current access status.

Retries

All documented resource operations are GET requests. Retry transient failures with exponential backoff and jitter, and cap both attempts and total elapsed time. Do not retry validation or authorization failures unchanged.

If the service temporarily returns Public data access is not enabled., the operational kill switch is active. Repeated requests will not enable access.

Private data-service calls have a ten-second timeout and receive request cancellation. A browser cancelling a request does not guarantee that a database query already executing is stopped.

CORS and errors

A disallowed browser origin receives 403. For allowed origins, preflight permits GET and OPTIONS with Authorization and Content-Type headers. Keep tokens in headers and never put them in a URL.