Skip to documentation

Webhook events

email.bounced

The recipient's mail server rejected the email.

When it fires

email.bounced fires when Amazon SES reports that a recipient's mail server rejected the email. Opensend emits one event per bounced recipient; data.to holds only that recipient. A Permanent bounce also adds the address to the team's suppression list and emits suppression.added. Transient and Undetermined bounces do not suppress the address.

Payload

json
{
  "type": "email.bounced",
  "created_at": "2026-09-29T10:00:00.000Z",
  "data": {
    "created_at": "2026-09-29T09:59:59.000Z",
    "email_id": "YOUR_EMAIL_ID",
    "message_id": "SES_MESSAGE_ID",
    "from": "hello@example.com",
    "to": ["you@example.net"],
    "subject": "Welcome",
    "tags": {},
    "bounce": {
      "type": "Permanent",
      "subType": "General",
      "message": "smtp; 550 5.1.1 user unknown"
    }
  }
}

bounce.type is Permanent, Transient, or Undetermined. bounce.subType is the SES bounce subtype, such as General, NoEmail, or MailboxFull. bounce.message holds the diagnostic codes in the SES bounce notification, joined with ; , and is empty when there were none. The other data fields are the common email fields described in email.sent.

Handle the event

Verify the signature and deduplicate by svix-id.