Using the API
Errors
Errors use a consistent shape and standard HTTP status codes.
JSON
{
"error": {
"type": "invalid_request_error",
"code": "scope_denied",
"message": "This key does not have the agents:triage scope.",
"param": null,
"request_id": "req_18c…"
}
}| HTTP | code |
What happened | What to do |
|---|---|---|---|
| 400 | invalid_request |
Malformed body or a field failed validation (param says which) |
Fix the request |
| 400 | schema_violation |
Structured input does not match the documented schema | Check the model page |
| 400 | context_unresolved |
Required context could not be matched to clinical concepts | Rephrase or send concept ids |
| 400 | context_length_exceeded |
Input longer than the model's input limit | Shorten or summarise the input |
| 401 | invalid_api_key |
Missing, unknown, revoked or expired key | Check the key; create a new one if needed |
| 403 | scope_denied |
Key lacks the scope for this model | Add the scope to the key in Graphite |
| 403 | scope_not_in_plan |
Your plan does not include this model | Upgrade in Graphite → Billing |
| 403 | environment_mismatch |
Sandbox key on production data or vice versa | Use the right key |
| 403 | key_suspended |
Key suspended by Augsidius (e.g. unpaid invoice, abuse) | Contact support |
| 403 | ip_not_allowed |
Request IP is not on the key's allowlist | Update the allowlist |
| 404 | model_not_found |
Unknown model id | See GET /v1/models |
| 404 | not_found |
Unknown session or resource | Check the id; sessions expire after 6 h idle |
| 404 | session_not_found |
Care-model session_id unknown, expired or from another project |
Start a new session (omit session_id) |
| 409 | idempotency_conflict |
Same Idempotency-Key with a different body |
Use a new key |
| 413 | payload_too_large |
Body over 256 KB | Split the input |
| 429 | rate_limited |
Too many requests per minute | Back off; see x-ratelimit-reset-requests |
| 429 | exposure_limit |
Daily clinical-item limit for this key reached | Wait until 00:00 UTC or contact support |
| 429 | quota_exceeded |
Monthly units used up on a plan without overage, or a hard spend cap reached | Upgrade or raise the cap |
| 501 | not_available |
Model is documented but not launched yet | Watch the Changelog |
| 503 | upstream_unavailable |
A component is temporarily unavailable | Retry with backoff |
Retrying
Retry 429 and 5xx with exponential backoff and jitter (for example 1 s, 2 s, 4 s, 8 s, max 5 attempts). Use an Idempotency-Key so retries are never billed twice. Do not retry 400, 401, 403 or 404 without changing the request.
Errors during a stream
Once a stream has started, failures arrive as an error event at the end of the stream instead of an HTTP status. See Streaming & formats.
Declining is not an error
When aug-evidence-qa declines a question it returns 200 with message.refusal (see Refusals). When the evidence does not cover a question, the answer says so. Text that cannot be matched to a concept comes back with concept: null. None of these are errors.
