eusend
Reference

Error Codes

All errors follow a consistent JSON format with a human-readable message and a machine-readable code.

All errors follow a consistent JSON format with a human-readable message and a machine-readable code.

error response shape
{
  "error": "Invalid API key",
  "code": "UNAUTHORIZED"
}
CodeStatusDescription
UNAUTHORIZED401API key is missing, invalid, or revoked.
FORBIDDEN403API key does not have permission for this action.
NOT_FOUND404The requested resource does not exist.
VALIDATION_ERROR400Request body failed validation. Check the error message for details.
CONFLICT409Resource already exists (e.g. duplicate domain).
RATE_LIMITED429Too many requests. Back off and retry.
DAILY_LIMIT_EXCEEDED429Daily send ceiling reached; resets at midnight UTC. On the Free plan the cap is a flat 100/day and does not change with account age. On a paid plan the ceiling is derived from your own sending and lifts as soon as you have a clean delivery record.
PLAN_LIMIT_EXCEEDED403Action not allowed on your current plan (e.g. domain or contact limit reached, or sending a broadcast to an audience on the free plan).
DOMAIN_NOT_VERIFIED403A domain in the request is not verified for your organisation. Usually the sender domain. Also returned by POST /broadcasts/:id/test when a RECIPIENT is neither a team member's account email nor on one of your verified domains — a test send may only reach inboxes you control.
ALL_SUPPRESSED422All recipient addresses are on the suppression list.
RECIPIENT_DOMAIN_UNDELIVERABLE422A recipient's domain can never receive mail — it publishes no mail exchanger (no MX, an RFC 7505 null MX, and no A/AAAA to fall back on), or it is an RFC 2606 reserved name such as example.com or anything under .invalid/.test. Usually a typo or a documentation placeholder. Live sends only; test-mode keys are not checked. Nothing was sent and no quota was used.
SENDING_SUSPENDED403Account suspended due to a high bounce or complaint rate in the last 7 days. Contact support@eusend.dev to reinstate.
ACCOUNT_RESTRICTED403The account is held pending review because it resembles one we have previously had to stop. Not a verdict on anything you have sent — a restricted account is held before its first send. Shared office networks, VPNs and mobile carriers all produce false matches; email support@eusend.dev and a human reviews it the same day.
SENDER_NOT_PERMITTED403The from header was refused for one of two reasons. Either the display name claims to be a brand your sending domain has no relationship to (for example Adobe Support <billing@yourdomain.com>) — send it again with a display name that matches the domain you have verified. Or the account is temporarily limited to sender identities it has already used, in which case the message names the from value that was refused; existing senders keep working and support@eusend.dev can add a new one. In both cases only this message was refused, not the account.
MONTHLY_LIMIT_EXCEEDED429Monthly send budget reached. With metered billing off (the default) this is your monthly quota — enable it in billing settings to keep sending. With it on, this is the hard ceiling: the point at which the overage would have cost the price of the next volume up (twice your quota at the top volume, where there is no next one), which support must raise.
LIST_SEND_HELD403This send goes past the 500-recipient allowance an unreviewed account has for list sending. Recipients within the allowance were delivered; the rest waits for a one-time review. Retrying will not clear it; contact support@eusend.dev.
BROADCAST_HELD403Fan-out is paused. Either this broadcast used its unreviewed allowance and the remainder is waiting on a review — it resumes from where it stopped once cleared, and unlike a paused broadcast, sending again will not restart it — or fan-out is paused account-wide while we review recent sending, which clears on its own within a day. Transactional sends and test copies are unaffected in both cases.
SERVICE_PAUSED503Sending is temporarily paused platform-wide. Retry after a short delay.
ATTACHMENT_STORAGE_ERROR503An attachment could not be stored. The send did not happen — retry the request.
BAD_REQUEST400The request was malformed and could not be processed.
PAYLOAD_TOO_LARGE413The request body exceeds the 16 MB limit. Note that base64-encoded attachments are ~33% larger than the underlying files.
INTERNAL_ERROR500An unexpected server error occurred. Retry after a short delay.