Fires when the receiving server rejects the message. Severity is expressed by bounce_type and provider details by bounce_code and bounce_message.

Payload

{
  "id": "evt_xxxxx",
  "event": "email.bounced",
  "timestamp": "2026-03-28T09:01:10Z",
  "data": {
    "message_id": "msg_email_xxxx",
    "channel_id": "ch_email_yyyy",
    "to": "invalid@example.com",
    "bounce_type": "hard",
    "bounce_code": "550",
    "bounce_message": "5.1.1 The email account that you tried to reach does not exist.",
    "bounced_at": "2026-03-28T09:01:10Z"
  }
}
data.message_id
string
Identifier of the outbound message that bounced.
data.channel_id
string
Email channel used for the send.
data.to
string
Recipient address that bounced.
data.bounce_type
string
hard or soft — see table below.
data.bounce_code
string
SMTP or provider bounce code when available.
data.bounce_message
string
Human-readable explanation from the receiving server or provider.
data.bounced_at
string
ISO 8601 time when the bounce was recorded.
bounce_typeMeaning
hardPermanent failure — address does not exist or is blocked. Contact suppressed automatically.
softTemporary failure — mailbox full, server unavailable. Retried by the provider.
Hard bounces automatically set the contact status to BOUNCED and suppress the address from future sends.