Errors

The API uses conventional HTTP status codes.

The API uses conventional HTTP status codes. Errors return a JSON body with error.code, error.message, and a request_id you can attach to support tickets.

StatusDescription
400Bad request. Invalid parameters or missing required fields. The error.code tells you exactly what to fix: invalid_json (malformed body — the message pinpoints the offending snippet and reminds you every string, including email addresses, needs double quotes), validation_error with per-field messages (e.g. message content is required: html, text or template), template_not_found (the template id doesn't exist on your account), or an unregistered / unverified sender domain on a send.
401Unauthorized. Missing or invalid API key, or a revoked key.
402Payment required. Not enough verification credits for a live POST /v3/validate or POST /v3/validate/bulk (error.code: insufficient_credits). Buy a credit pack and retry; test keys are exempt.
403Forbidden. Suspended or deleted account, a plan limit was reached (domains, API keys, webhook endpoints, dedicated-IP pools), a verify/delete on a domain shared from another workspace (owner-only), or a sandbox send to a recipient that isn't on the confirmed test allow-list.
404Not found. The resource doesn't exist or belongs to another account. (A send referencing an unknown template id returns 400 template_not_found with instructions.)
409Conflict. A request with the same Idempotency-Key is still being processed. Wait for the original to finish, then retry — you'll get the cached response.
429Rate limited. Your per-account request rate, a route-level limit, or a sending / verification quota was exceeded. Back off and retry.
500Server error. Retry with exponential backoff. Idempotency keys keep retries safe.
503Sending paused. Live sending has been paused on the account by our team — check the Console or contact support.