error field, optionally a
details object with structured context.
Status codes
Send rejection reasons
WhenPOST /send returns 200 with rejected recipients, each rejected
entry includes a reason. These are the values you may see:
When the whole request is rejected (not just one recipient),
status is
429 and the body has the same shape with accepted: 0.
Retry guidance
Common errors and fixes
404 identity not found in org
404 identity not found in org
Most often a typo in the handle, or the request was made with a key
from a different org. Confirm the handle in
Dashboard → Identities and that the key
prefix matches an active key in the same org.
409 Idempotency-Key reuse
409 Idempotency-Key reuse
The same key was used with a different body. Either you actually meant
to send a different message — in which case use a new key — or the
retry that triggered this is using a slightly different body (often a
reformatted timestamp or a re-rendered template). Make the body
deterministic for retries.
429 cap_exceeded on a fresh-looking identity
429 cap_exceeded on a fresh-looking identity
Daily caps are per-identity, set by tier, and reset at midnight UTC. A
Starter tier identity is capped at 150/day. Check
Dashboard → Identities → the identity detail
page shows current usage on a rolling graph.
429 no_accounts
429 no_accounts
Every backing mailbox is either at its per-mailbox daily cap or has
dropped below the health threshold. This usually means the identity is
pulling more than its tier supports — bumping tier provisions more
mailboxes. If health is the issue, the dashboard will surface it on
the identity detail page.
Webhooks stop arriving
Webhooks stop arriving
Three possibilities:
- Endpoint paused. Your URL returned
410 Gone, or three consecutive failed deliveries triggered an automatic pause. Re-enable from the dashboard. - Secret rotated. Your verifier is using the old secret and rejecting deliveries. Update your secret env var.
- DNS / TLS. The endpoint URL stopped resolving or its TLS certificate expired. Test with curl from outside your network.
seq you
persisted to backfill missed events, then fix the underlying issue.