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
Onx-api-key-authenticated routes (SDK, CI/CD, evaluations):
- Your
x-api-keyheader is present and matches a valid workspace API key - The key hasn’t been revoked in Settings → API Keys
GET /ingest/traces, tracked-agent management) return a bare 401 with no JSON body when the session is missing or expired.
403 Forbidden
workspaceId belongs to the same workspace as your API key or session.
404 Not Found
409 Conflict: terminal state
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 on500 and 429. Not safe to retry POST /results without idempotency keys. Always set idempotencyKey on every result to avoid duplicate scoring on retry.
