Error Codes

The Simbee API uses standard HTTP status codes and returns errors in a consistent JSON format.

Error response format

All error responses include a message field. Validation errors additionally include an errors array with field-level details.

Standard error

{
  "message": "Not found"
}

Validation error

{
  "message": "Validation failed",
  "errors": [
    { "field": "email", "message": "is required" },
    { "field": "password", "message": "is too short (minimum 8 characters)" }
  ]
}

Validation error (analytics endpoints)

Analytics endpoints (Python/FastAPI) use the OpenAPI validation format:

{
  "detail": [
    {
      "loc": ["body", "client_id"],
      "msg": "field required",
      "type": "value_error.missing"
    }
  ]
}

HTTP status codes

Success codes

CodeMeaningUsed for
200OKGET, PUT, PATCH, DELETE responses
201CreatedPOST that creates a new resource
204No ContentDELETE with no response body

Client error codes

CodeMeaningCommon causes
400Bad RequestMalformed JSON, invalid query parameters, vector dimension mismatch
401UnauthorizedMissing or expired JWT, invalid credentials on /auth/token
403ForbiddenInsufficient role/scopes for the requested operation
404Not FoundResource does not exist or has been soft-deleted
409ConflictDuplicate external_id, duplicate vocabulary entry
422Unprocessable EntityValidation failed — missing required fields, invalid values
429Too Many RequestsRate limited by Envoy gateway or per-endpoint limits

Server error codes

CodeMeaningAction
500Internal Server ErrorUnexpected error. Retry with backoff. If persistent, contact support.
502Bad GatewayUpstream service unavailable. Retry after a few seconds.
503Service UnavailableService is temporarily down or overloaded. Retry with exponential backoff.

Rate limiting

The API enforces rate limits at the Envoy gateway level. When rate limited, you receive a 429 response with headers indicating the limit:

HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1718100000

Back off and retry after the X-RateLimit-Reset timestamp.

Retry guidance

CodeRetry?Strategy
400NoFix the request
401Yes, onceRe-authenticate, then retry with new token
403NoCheck your role and scopes
404NoCheck the resource ID
409NoResolve the conflict (duplicate ID)
422NoFix validation errors in the request body
429YesWait until X-RateLimit-Reset
500YesExponential backoff, max 3 retries
502YesRetry after 1-2 seconds
503YesExponential backoff, max 5 retries