Skip to content

Errors

All errors return JSON with a detail field describing the problem:

{
"detail": "Rate limit exceeded"
}

Validation errors (422) include the offending field path:

{
"detail": [
{
"loc": ["body", "from"],
"msg": "from address must use a verified domain",
"type": "value_error"
}
]
}
CodeMeaningAction
200Success
201Resource created
204Success, no body
400Bad requestFix the request body or parameters.
401UnauthorizedCheck your Authorization header — missing, malformed, or revoked key.
403ForbiddenYour key is valid but lacks permission for this endpoint (e.g. sending_access calling /pools/*).
404Not foundResource doesn’t exist or you can’t see it.
409ConflictDuplicate resource (e.g. domain already added, contact already in list).
413Payload too largeRequest body exceeded the limit (CSV uploads cap at 100MB).
422UnprocessableValidation failed — see detail for the field.
429Too many requestsBack off; respect X-RateLimit-Reset.
500Internal errorRetry with exponential backoff; if persistent, check status page.
503Service unavailableRedis or Postgres is degraded. Retry.

from domain not verified. Returns 400 with detail: "Domain not verified: example.com". Verify your domain before sending.

Recipient on suppression list. Returns 200 with the email status set to suppressed. Not an error — the request succeeded; the send was prevented.

Idempotency-key replay. Returns the original 200 response, not 409. The dedupe is silent.

Webhook delivery failure. 3AVA Mail retries failed webhook deliveries 5× with exponential backoff (1s, 4s, 16s, 1m, 5m). After that the delivery is marked failed and visible in the dashboard.