Handle stable codes, not prose.
Errors use {"error":{"code":"…","message":"…"}}. Scope failures also include required_scope. Responses do not expose cross-account resource existence.
Request and authentication
invalid_request
|
Malformed or semantically invalid request. |
invalid_recipient
|
Recipient validation failed. |
invalid_subject
|
Subject validation failed. |
invalid_idempotency_key
|
Idempotency key is invalid. |
invalid_api_key
|
Missing, malformed, revoked, unknown, or wrong credential type. |
insufficient_scope
|
Management key lacks the exact required scope. |
account_suspended
|
Account fails closed. |
unsupported_media_type
|
Mutation requires JSON. |
method_not_allowed
|
Method is outside the route contract. |
Email and content
domain_not_ready, sender_not_ready, sender_not_allowed, email_not_found, idempotency_conflict, payload_too_large, invalid_attachment, too_many_attachments, attachment_too_large, attachments_too_large, mime_too_large, rate_limit_exceeded, and queue_limit_exceeded.
Management resources
domain_not_found and sender_not_found cover unknown, deleted, malformed, and foreign-account identifiers. Conflicts include domain_conflict, domain_limit_exceeded, domain_has_senders, sender_conflict, sender_limit_exceeded, sender_domain_limit_exceeded, and sender_not_allowed.
Availability
service_unavailable is safe to retry with bounded backoff when the operation is naturally idempotent. internal_error is not a signal to blindly repeat mutations. Respect Retry-After where present.
Tenvio Docs