Skip to content

Event types

All events share the envelope shown in Managing webhooks; this page covers the data inside it. Every event’s data includes the email_id (except email.received, which references the inbound message instead).

The provider accepted the message.

{ "email_id": "…", "message_id": "<provider id>", "from": "Acme <hi@acme.com>", "to": ["user@example.com"], "subject": "Hello" }

The recipient’s mail server accepted delivery. Data: email_id, message_id, and recipients when reported.

The tracking pixel loaded (open tracking must be on). Data: email_id.

A rewritten link was followed. Data: email_id and the destination link.

Delivery bounced. The richest payload:

{
"email_id": "…",
"message_id": "…",
"recipients": ["user@example.com"],
"bounce_type": "Permanent",
"bounce_sub_type": "General",
"bounce_classification": "hard_bounce",
"bounce_recipients": [ { "…": "per-recipient diagnostic detail" } ]
}

bounce_classification is a stable, provider-neutral value: hard_bounce, soft_bounce, no_email, suppressed, mailbox_full, message_too_large, content_rejected, attachment_rejected, or undetermined. Permanent bounces add the recipient to your suppression list.

The recipient marked the mail as spam. Data: email_id, message_id, recipients. Also suppresses the recipient.

The receiving server deferred delivery (e.g. mailbox full, greylisting); the provider keeps retrying. Data: email_id, message_id, recipients.

The send failed before or at the provider. Data: email_id and an error description.

A queued or scheduled send was blocked at send time because the recipient had become suppressed. Data: email_id, recipient.

Inbound mail arrived on a receiving domain. Data: received_email_id, from, to; fetch the body via GET /emails/received/{id}.