error.type field — clients should branch on type,
not on status code.
Envelope fields
Error types and status codes
We conflate “not found” and “no permission” by design. A 404 from
/v1/evaluations/{id} means either “no such row” or “you lack membership on
its team” — we don’t disclose which, to avoid leaking the existence of
resources to outsiders.X-Request-Id
Every response — success or error — carries an X-Request-Id header.
Error responses also embed the same value in error.request_id so it
survives a copy-paste from a screenshot.
Common error codes
A non-exhaustive list oferror.code values you may encounter. Codes
are stable; new ones are added without a version bump.
evaluation_not_found
evaluation_not_found
The evaluation id does not exist, or the caller has no permission. 404.
evaluation_no_access
evaluation_no_access
Cross-team request — the resource exists but lives on a team the caller is not
a member of. The
details field carries the resource team name and the
caller’s email so the UI can render a “switch account” empty state. 403.missing_required_scope
missing_required_scope
An
ak_live_* or OAuth principal lacks the scope this route demands. The
message names the scope. 403.idempotency_key_reused
idempotency_key_reused
The supplied
Idempotency-Key matches a prior request, but the request body
differs. 409. See Idempotency.plan_upgrade_required
plan_upgrade_required
The route is gated to a higher pricing tier. Today this fires on webhook
endpoints for Free / Team callers. 403.
rate_limit_exceeded
rate_limit_exceeded
Per-tier RPM cap hit. Read
Retry-After. 429. See Rate
limits.quota_exceeded
quota_exceeded
Monthly quota for autouser ratings, human ratings, or evaluations exhausted.
429. Carries no
Retry-After — the quota resets at the start of the next
billing period.Handling errors
Branch onerror.type first, error.code second. Never branch on the
HTTP status — the mapping is stable but the field is the contract.
Reporting a bug
Emailcontact@autousers.ai with the request_id, the route, and the
local time of the request. Do not paste the request body — we can pull
it. Do not paste the API key — we cannot help if you do, and will
revoke the key on receipt.