Error Reference
Standard error response format and common error codes.
Error response format
All errors return a JSON object with an error field:
error response
{
"error": "Human-readable error message",
"upgrade": "POST /v1/billing/upgrade to get a checkout URL"
}The optional upgrade field appears when the error is due to a plan limitation that can be resolved by upgrading.
HTTP status codes
200— Success201— Resource created400— Bad request (invalid input, missing required fields)401— Unauthorized (missing or invalid API key)403— Forbidden (plan limit, scoped key, email not verified)404— Resource not found409— Conflict (duplicate resource)413— Payload too large (file or message size limit)429— Rate limited (daily send limit or API rate limit)500— Internal server error503— Service unavailable (dependency down)
Common error scenarios
Rate limiting (429)
response
{
"error": "Daily send limit exceeded. Limit resets at midnight UTC.",
"upgrade": "POST /v1/billing/upgrade to get a checkout URL"
}Check the X-RateLimit-Remaining header to monitor your remaining quota before hitting the limit.
Plan limits (403)
response
{
"error": "Free plan limited to 1 mailbox. Upgrade to create more.",
"upgrade": "POST /v1/billing/upgrade to get a checkout URL"
}Suppressed address (400)
response
{
"error": "Recipient address is on the suppression list: [email protected]"
}Remove the address from the suppression list if you believe it's now valid.