Errors
Every error uses the same JSON shape and includes a request_id you can quote when reaching out for support.
Error shape
Error response
{
"error": {
"code": "invalid_request",
"message": "lead_age_days must be greater than or equal to 0",
"request_id": "req_xxx"
}
}Error messages are always sanitized — we never return stack traces or internal details.
HTTP status codes
| Field | Type | Description |
|---|---|---|
| 400 | invalid_request | Validation failed or the JSON body was malformed. |
| 401 | invalid_api_key | Missing, malformed, or unknown API key. |
| 401 | revoked_api_key | The API key has been revoked. |
| 403 | forbidden | The key is valid but not permitted to perform the action. |
| 404 | not_found | The requested resource does not exist. |
| 409 | conflict | The request conflicts with current state (e.g. duplicate name). |
| 413 | payload_too_large | The request body exceeded the size limit. |
| 429 | usage_limit_exceeded | A monthly quota was exceeded. |
| 429 | rate_limit_exceeded | The short-term burst limit was exceeded. |
| 500 | internal_error | An unexpected server error occurred. |
Error codes
Handle errors by branching on error.code rather than the message string, since messages may be refined over time.