Errors

Every Delivrie API error, what causes it and how to fix it, with the JSON error format and which errors are safe to retry.

Errors use standard HTTP status codes and a JSON body:

{
  "statusCode": 422,
  "name": "validation_error",
  "message": "The from domain mail.acme.com is not verified yet (status: pending)."
}

Branch on name in code and show message to people: it's written to say exactly what went wrong. Every request, including failed ones, appears in Logs with its request and response bodies.

Error reference

StatusnameCauseFix
401missing_api_keyNo Authorization headerAdd Authorization: Bearer dlv_...
401invalid_api_keyThe key doesn't exist or was deletedCheck the key; create a new one in API keys
403restricted_api_keyA sending-only key called another endpoint, or sent from a domain it isn't allowed to useUse a full access key, or send from the key's domain
403plan_limit_reachedYou've reached your plan's domain or webhook limitRemove one, or upgrade in Billing
403sending_pausedSending is paused because your bounce or complaint rate went over the limit (see Deliverability)Fix the cause, then email support@delivrie.io to resume
403insufficient_scopeAn MCP or OAuth connection wasn't granted this scopeReconnect and approve the scope
404not_foundNothing with that id in this teamCheck the id, and that the key belongs to the right team
409domain_existsThe domain is already in this teamUse the existing domain
409domain_in_useAnother team owns the domainClaim it from the Domains page if it's yours
422validation_errorA field is missing or invalid, or the from domain isn't verifiedRead message; it names the field
429daily_quota_exceededFree plan: 133 emails todayWait until midnight UTC, buy credits or upgrade
429monthly_quota_exceededFree plan: 4,000 emails this monthBuy credits or upgrade
429spending_cap_reachedThis send would take overage past your spending capRaise or remove the cap in Billing
500application_errorSomething failed on our sideRetry with the same idempotency key
503sending_not_configuredSending is temporarily unavailableRetry later; check status

Common validation_error messages

MessageWhat to do
Request body must be valid JSONSend a JSON body with Content-Type: application/json
Missing from / to / subject fieldAdd the field
Provide html or textAdd a body, or send a template
The from domain X is not verifiedAdd and verify the domain in Domains, or fix a typo in from
X can only send to members of your teamYou're using onboarding@delivrie.io. Verify your own domain to email anyone
to can have at most 50 addressesSplit the send, or use batch sending
Attachments are limited to 40 MB per emailSend a link to the file instead
Attachment path isn't supported yetSend base64 content
scheduled_at must be an ISO 8601 date or a phrase...Use 2026-12-01T09:00:00Z or a phrase like in 1 hour
Template X has no published versionPublish the template
Tag names and values can only contain...Use letters, numbers, _ and - only

Retrying

Retry 5xx errors and network failures with the same Idempotency-Key. Don't retry 4xx errors, including quota 429s; they won't succeed until something changes. See Idempotency and retries.

Errors in the SDK

The Node.js SDK returns errors instead of throwing: const { data, error } = await delivrie.emails.send(...). error has the same statusCode, name and message. Problems that never reach the API have statusCode: 0 and the name network_error, timeout or aborted.

More guides