Skip to content
AI Inbx
Esc
navigateopen⌘Jpreview
On this page

email.bounced

Delivery failed. Creates a suppression automatically.

Delivery failed. Creates a suppression automatically, so the next send to that address never leaves.

Payload

PropType
email_idstring

eml_…

Typestring
thread_idstring

The conversation.

Typestring
domain_idstring | null

The domain it was sent from, or null when sent through a mailbox.

Typestring | null
mailbox_idstring | null

The mailbox it was sent through, or null when sent from a domain.

Typestring | null
suppression_keystring | null

The list the send named, when it named one.

Typestring | null
recipientsstring[]

Which recipients bounced.

Typestring[]
permanentboolean

true for a hard bounce — the address doesn't exist. false for a soft one — full mailbox, temporary failure.

Typeboolean
reasonstring

What the receiving server said.

Typestring

Handling it

if (event.type === "email.bounced" && event.data.permanent) {
  await markUndeliverable(event.data.recipients, event.data.reason)
}

A permanent bounce means the address is wrong — stop showing it as valid in your own UI. A soft bounce is usually transient and not worth acting on.

The suppression a hard bounce writes goes on the workspace’s * list whatever space_id the event carries — the address exists for nobody, so no space should try it either.

Last updated on September 9, 2026

Was this page helpful?