Event types
The full set of webhook events MailBlastr emits, the JSON payload shape, and a sample request body.
Events span three resource families — email, contact, and domain — each delivered with a dotted type such as email.delivered or contact.created. The tables below list every event you can subscribe to; click an event for its full per-event payload.
Email events
| Event | Fires when |
|---|---|
| `email.sent` | The send request succeeded and the message was handed off to the sending infrastructure. |
| `email.delivered` | The receiving mail server accepted the message for the recipient. |
| `email.delivery_delayed` | Delivery was temporarily delayed (e.g. the recipient's inbox is full or the receiving server had a transient issue) and will be retried. |
| `email.bounced` | The recipient's mail server permanently rejected the message. The recipient is added to your suppression list. |
| `email.complained` | The message was delivered but the recipient marked it as spam. The recipient is added to your suppression list. |
| `email.opened` | The recipient opened the email (requires open tracking on the domain). |
| `email.clicked` | The recipient clicked a tracked link (requires click tracking on the domain). |
| `email.failed` | The email failed to send due to an error — e.g. an invalid recipient, a domain-verification problem, or a reached daily sending quota. |
| `email.scheduled` | A future-dated send (via scheduled_at or a natural-language schedule) was accepted and queued for its send time. |
| `email.suppressed` | A send was skipped because the recipient is on your account suppression list (typically from a prior hard bounce or complaint). |
| `email.received` | An inbound email arrived at one of your verified domains (Inbound). Retrieve it at GET /emails/receiving/:id. |
Contact events
| Event | Fires when |
|---|---|
| `contact.created` | A contact was successfully created in one of your audiences. Not fired for contacts added by a bulk CSV import. |
| `contact.updated` | A contact was successfully updated — for example its name changed, or it was subscribed or unsubscribed. |
| `contact.deleted` | A contact was successfully deleted from one of your audiences. |
Domain events
| Event | Fires when |
|---|---|
| `domain.created` | A domain was successfully created in your account (before its DNS records are verified). |
| `domain.updated` | A domain changed — most commonly as its verification status advances toward verified. |
| `domain.deleted` | A domain was successfully deleted from your account. |
Payload envelope
Every event — regardless of family — is delivered in the same envelope. The resource-specific fields live under data; its shape depends on the event type (see each event page above).
typestringoptionalThe event type, e.g. email.delivered, contact.created, or domain.updated.
created_atstringoptionalISO 8601 time the delivery was dispatched.
dataobjectoptionalThe event-specific payload. For email events this includes email_id, from, to, subject, and event-specific detail (e.g. a bounce, click, or suppressed object); for contact/domain events it carries the contact or domain object.
Sample payload
{
"type": "email.delivered",
"created_at": "2026-06-23T10:15:32.118Z",
"data": {
"email_id": "49a3999c-0ce1-4ea6-ab68-afcd6dc2e794",
"campaign_id": null,
"from": "Acme <news@yourdomain.com>",
"to": ["recipient@example.com"],
"subject": "What's new in June",
"created_at": "2026-06-23T10:15:31.880Z"
}
}X-Mailblastr-Event (the event type) and X-Mailblastr-Attempt (the delivery attempt number, starting at 1) headers, plus the Svix signature headers used to verify the request. Because deliveries can be retried, dedupe on the svix-id header.