Errors & Rate Limits
HTTP status codes
| Code | Meaning |
|---|---|
200 | Success. |
400 | Bad request — check the request body or parameters. |
401 | Unauthorized — missing or invalid API key/token. |
403 | Forbidden — key lacks the required scope or the account is not active. |
404 | Resource not found. |
409 | Conflict — the resource already exists or is in the wrong state. |
422 | Validation error — the response detail lists the issues. |
429 | Rate limit exceeded. |
500 | Server error — retry with backoff. |
Error format
Most errors return a simple detail message:
{
"detail": "Domain not verified"
}
Validation errors may return an array of Pydantic-style errors:
{
"detail": [
{"loc": ["body", "from_email"], "msg": "invalid email address", "type": "value_error"}
]
}
Rate-limited requests return:
{
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Please slow down.",
"retry_after": 60
}
Rate limits
Limits depend on the endpoint and your account configuration. If the API returns 429, wait for the duration in Retry-After before trying again. Queue send requests and use exponential backoff instead of retrying in a tight loop.