Skip to main content

Response format

All error responses follow the same shape:
errors is an array of field-level validation errors when applicable (e.g. request body validation failures). It is empty for most errors.

HTTP status codes


Common errors

401 Unauthorized

On x-api-key-authenticated routes (SDK, CI/CD, evaluations):
Check that:
  • Your x-api-key header is present and matches a valid workspace API key
  • The key hasn’t been revoked in Settings → API Keys
Session-cookie routes (browser UI, e.g. GET /ingest/traces, tracked-agent management) return a bare 401 with no JSON body when the session is missing or expired.

403 Forbidden

The caller is authenticated, but doesn’t have the required access. Verify the workspaceId belongs to the same workspace as your API key or session.

404 Not Found

The requested resource doesn’t exist or belongs to a different workspace.

409 Conflict: terminal state

Returned by POST /results when the run has already been finalized or failed. Check the run status with GET /runs/:id before submitting more results.

400 Bad Request


Rate limits

There is currently no enforced per-key or per-route rate limit on the ingest, CI/CD, or custom evaluation APIs. Don’t rely on this. Design your integration to be resilient to a limit being introduced later, and avoid tight retry loops.

Retrying

Safe to retry on 500 and 429. Not safe to retry POST /results without idempotency keys. Always set idempotencyKey on every result to avoid duplicate scoring on retry.