Webhook events
email.failed
The email could not be sent.
When it fires
email.failed fires when Opensend gives up on an email before or during sending, or when Amazon SES rejects it or cannot render it. failed.reason says why, for example Domain is not ready to send, The sending domain was removed, The broadcast audience was removed, or the rejection message from SES.
One special case: when an email carries a topic and only some recipients are unsubscribed from it, the email is still sent to the others. Opensend then emits email.failed with data.to limited to the dropped recipients and the reason The recipients are not subscribed to this topic.
Payload
{
"type": "email.failed",
"created_at": "2026-09-29T10:00:00.000Z",
"data": {
"created_at": "2026-09-29T09:59:59.000Z",
"email_id": "YOUR_EMAIL_ID",
"from": "hello@example.com",
"to": ["you@example.net"],
"subject": "Welcome",
"tags": {},
"failed": {
"reason": "Domain is not ready to send"
}
}
}message_id is present only when SES had already accepted the email, as with an SES rejection. The other data fields are the common email fields described in email.sent.
Handle the event
Verify the signature and deduplicate by svix-id. A failed email is not resent automatically.