Errors & codes
HTTP status codes
| Status | Meaning |
|---|---|
| 200 | Success |
| 201 | Resource created (add) |
| 400 | Validation error — fix the request body |
| 401 | Missing / invalid / revoked API key |
| 403 | Plan forbids this operation (e.g. free on API) |
| 404 | Resource not found |
| 422 | infer failed to parse input |
| 429 | Rate limit hit (writes only) |
| 500 | Server error — retry later |
| 507 | Memory storage cap reached |
Envelope
{
"data": null,
"error": {
"code": 429,
"message": "Add rate limit (200/min). Reads are never limited."
},
"meta": { "request_id": "..." }
}
error may include extra fields for specific cases:
| Case | Extra fields |
|---|---|
| 403 free | upgrade_url |
| 429 cap | cap, used |
| 507 store | cap |
| 403 susp | plan_status |
SDK exception mapping
| Status | Python / Node class |
|---|---|
| 400 | ValidationError |
| 401 | AuthError |
| 403 | PlanError |
| 404 | NotFoundError |
| 429 | RateLimitError |
| 507 | StorageCapError |
| other | OraMemoryError |
CLI exit codes
See am CLI → Exit codes.
Retrying
429 and 5xx are safe to retry with exponential back-off. 4xx (other than 429) won't succeed on retry — fix the request first.