Webhooks

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

EventFires 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

EventFires 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

EventFires 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).

Envelope fields
typestringoptional

The event type, e.g. email.delivered, contact.created, or domain.updated.

created_atstringoptional

ISO 8601 time the delivery was dispatched.

dataobjectoptional

The 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"
  }
}
Each request also carries 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.