Errors
Agent error taxonomy
Every CertifiedData agent endpoint returns structured errors. Use error_code for branching, retry_after_seconds for backoff, and request_id for support correlation.
Response shape
Error envelope
{
"ok": false,
"error_code": "rate_limit_exceeded",
"error": "Anonymous sandbox limit: 10 runs / 24h per IP.",
"retry_after_seconds": 3600,
"documentation_url": "https://certifieddata.io/agents/errors#rate_limit_exceeded",
"request_id": "req_01HXYZ..."
}Error codes
| error_code | HTTP | Retryable |
|---|---|---|
| authentication_required | 401 | no |
| invalid_api_key | 401 | no |
| forbidden_ownership | 403 | no |
| plan_required | 402 | no |
| rate_limit_exceeded | 429 | yes |
| quota_exceeded | 402 | maybe |
| invalid_input | 400 | no |
| prompt_injection_detected | 400 | no |
| engine_not_available | 400 | no |
| cert_level_not_available | 400 | no |
| policy_evaluation_failed | 422 | no |
| insufficient_funds | 402 | no |
| rail_unavailable | 503 | yes |
| signature_invalid | 400 | no |
| challenge_expired | 410 | no |
| challenge_already_used | 409 | no |
| key_revoked | 410 | no |
| artifact_not_found | 404 | no |
| sandbox_expired | 410 | no |
| internal_error | 500 | yes |
| dependency_unavailable | 503 | yes |
Retry strategy
- retryable=yes: exponential backoff, base 2s, max 30s, cap 6 attempts.
- retryable=maybe: inspect context (quota vs. transient) before retrying.
- retryable=no: do not retry — fix input, auth, or plan.
- Honor
Retry-Afterandretry_after_secondswhen present.