Errors
A small, stable error envelope with machine-readable codes.
What it is
Every error response uses the same envelope:
{
"error": {
"code": "forbidden_scope",
"message": "Missing scope pods:write",
"request_id": "req_2a8…"
}
}Quickstart
# Detect by code, not by message
curl -i https://api.asc.aiarco.com/v1/pods -X POST -d '...' | jq '.error.code'from aiarco import AscError
try:
client.pods.run(...)
except AscError as e:
if e.code == 'forbidden_scope': ...try { await client.pods.run({...}); } catch (e: any) { if (e.code === 'forbidden_scope') {...} }Security
All access is authenticated and scoped. See Auth & scopes and Network controls.
Error codes
| Code | HTTP | Meaning |
|---|---|---|
unauthorized | 401 | No / invalid API key or JWT. |
forbidden_scope | 403 | Key is valid but missing the required scope. |
not_found | 404 | Resource does not exist or you don't have access. |
conflict | 409 | State conflict (e.g. resource already exists). |
validation | 422 | Request body failed schema validation. |
rate_limited | 429 | See Rate limits. Retry after Retry-After seconds. |
quota_exceeded | 429 | Per-tenant quota exhausted. Lift via sales. |
payment_required | 402 | Tenant past due. |
idempotency_conflict | 409 | Same idempotency key, different body. |
unavailable | 503 | Transient — retry with backoff. |
internal | 500 | We made a mistake. Quote request_id to support. |