Errors
Every error response shares one consistent JSON envelope.
JSON
{
"error": {
"type": "invalid_request_error",
"code": "missing_required_field",
"message": "The `start_time` parameter is required.",
"param": "start_time",
"doc_url": "https://docs.chronapilot.com/errors/missing-required-field",
"request_id": "req_1A2b3C4d5E6f"
}
}Error types
| Type | Status | Meaning |
|---|---|---|
| api_error | 5xx | Internal server error. Retry with backoff. |
| authentication_error | 401 | Missing or invalid credentials. |
| authorization_error | 403 | Authenticated but unauthorized for this operation. |
| invalid_request_error | 400 | Malformed request — bad body, bad params. |
| rate_limit_error | 429 | You hit a rate limit. Retry after retry_after_seconds. |
| idempotency_error | 409 | Same idempotency key used with a different body. |
| connection_error | 410 | A provider connection has expired and refresh failed. |
| webhook_signature_error | — | Returned by SDK signature verification helpers when a delivered webhook fails verification. |
Request IDs
Every error includes a request_id. Search for it in the dashboard's logs view (or include it in any support email) to retrieve the full request, response, and timing trace.
Browse by code
See the error catalog for every error code, what triggers it, and how to recover.