Skip to content
All docs pages

Errors

Every error is an RFC 9457 problem, with Resend’s fields alongside, so Resend’s SDKs read it too:

JSON
{
  "type": "https://heraldmail.dev/docs/errors#daily_quota_exceeded",
  "title": "daily quota exceeded",
  "status": 429,
  "detail": "This project has reached today's limit of 1,000 recipients.",
  "name": "daily_quota_exceeded",
  "statusCode": 429,
  "message": "This project has reached today's limit of 1,000 recipients."
}

The message says what happened, then what to do. Act on name, which never changes.

NameStatusWhat to do
missing_api_key401Send your key as Authorization: Bearer hrld_….
invalid_api_key401The key is wrong, revoked or expired: make a new one in Console.
restricted_api_key403The key lacks the scope this needs: make one with more, or use another.
ip_not_allowed403The key is limited to other addresses.
project_suspended403The project’s sending is paused by the platform team. Nothing is sent; contact them.
not_found404No such thing in this project and mode.
marketing_on_hold409The project’s Proclamations are held (a breaker tripped, Gmail’s spam rate, or someone stopped them). Dispatches still go.
suppression_kept409That address was suppressed by the person’s own choice (a complaint, an unsubscribe or an erasure): only they can change it.
concurrent_idempotent_requests409A request with this Idempotency-Key is still being handled. Wait, then retry.
validation_error422The request isn’t right: the message says which field, and why.
invalid_idempotent_request422This Idempotency-Key was used with a different request. Use a new key.
payload_too_large413The request is over 60 MB.
rate_limit_exceeded429Over 50 requests a second for this key: wait for Retry-After.
daily_quota_exceeded429The project has sent its recipients for the day (counted from midnight UTC).
project_provisioning503A brand-new project is still being set up. Try again in a minute.
internal_server_error500Our fault. Retry with the same Idempotency-Key, and quote the x-request-id if it persists.

Retrying safely

Retry a 429 or a 5xx after the time in Retry-After, with the same Idempotency-Key: an email Herald already accepted isn’t sent twice. Don’t retry a 4xx otherwise; it will fail the same way. The SDK does all of this for you.