> ## Documentation Index
> Fetch the complete documentation index at: https://novu-c5de82d9-nv-8794-quote-reply-docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Event types

> Reference of every event type Novu emits through webhooks, including message, subscriber, workflow, and delivery events with example payload structures.

Novu supports the following webhook event types:

* **Email events**: Events when Novu receives inbound mail on a verified domain with a webhook route.
* **Message events**: Events about message delivery status changes.
* **Preference event**: Event about subscriber preference changes.
* **Workflow events**: Events about workflow creation, updates, and deletions.

Each event includes detailed information about the affected resource and the changes that occurred.

## Email events

* `email.received`: Triggered when Novu receives an inbound email that matches an [Inbound Email](/platform/inbound-email/overview) **Webhook** route on a verified domain. The payload includes normalized mail content (from, to, subject, text, html, headers, attachments, threading fields) plus domain and route metadata. When the matched route address is only in the SMTP envelope (a **BCC** recipient not present in `to` or `cc`), it appears in `mail.bcc` and `to` is left unchanged; the field is omitted otherwise. Download files from each attachment's `url` before `expiresAt`. See [Attachments](/platform/inbound-email/overview#attachments).

<Note>
  `email.received` is for **user mail** received on your domain. It is not the same as delivery or engagement events from your outbound email provider - see [Email Activity Tracking](/platform/integrations/email/activity-tracking) for those.
</Note>

Every webhook body uses the same envelope. `type` is the event type, `object` is the resource type as a string, and the resource itself is under `data.object`:

```json theme={null}
{
  "id": "evt_67f8a1b2c3d4e5f6a7b8c9d0",
  "type": "email.received",
  "object": "email_inbound",
  "timestamp": "2026-06-30T12:00:01.000Z",
  "environmentId": "development",
  "data": {
    "object": {
      "domain": {
        "id": "domain_id",
        "name": "mail.yourcompany.com",
        "data": {}
      },
      "route": {
        "address": "support",
        "data": { "tenantId": "acme" }
      },
      "mail": {
        "from": [{ "address": "user@example.com", "name": "Jane" }],
        "to": [{ "address": "support@mail.yourcompany.com" }],
        "subject": "Re: Your order",
        "text": "Thanks, that helps!",
        "html": "<p>Thanks, that helps!</p>",
        "messageId": "<message-id@example.com>",
        "inReplyTo": "<original-message-id@novu.co>",
        "references": ["<thread-root@novu.co>"],
        "headers": {},
        "attachments": [
          {
            "filename": "invoice.pdf",
            "contentType": "application/pdf",
            "size": 24576,
            "url": "https://files.example.com/inbound/attachments/invoice.pdf?expires=...",
            "expiresAt": "2026-06-30T18:00:00.000Z"
          }
        ],
        "date": "2026-06-30T12:00:00.000Z"
      }
    }
  }
}
```

## Message events

* `message.archived`: This webhook is triggered when a subscriber archives a message. The payload contains the details of the event.
* `message.delivered`: This webhook is triggered when a message delivery provider acknowledged the message delivery to the end receiving client. The payload contains the details of the event.
* `message.failed`: This webhook is triggered when Novu tries to send the message to the delivery provider and it got failed. The payload contains the details of the event.
* `message.read`: This webhook is triggered when a message has been read by the subscriber. The payload contains the details of the event.
* `message.seen`: This webhook is triggered when a subscriber opens a message. The payload contains the details of the event.
* `message.sent`: This webhook is triggered when Novu sends the message to the delivery provider. The payload contains the details of the event.
* `message.snoozed`: This webhook is triggered when a message is snoozed by the subscriber. The payload contains the details of the event.
* `message.unarchived`: This webhook is triggered when an archived message is unarchived. The payload contains the details of the event.
* `message.unread`: This webhook is triggered when a message is unread or marked as unread by the subscriber. The payload contains the details of the event.
* `message.unsnoozed`: This webhook is triggered when a message is unsnoozed by a subscriber. The payload contains the details of the event.

## Preference event

* `preference.updated`: This webhook is triggered when a subscriber preference is updated. The payload contains the details of the event.

## Workflow events

* `workflow.created`: This webhook is triggered when a workflow is created. The payload contains the details of the event.
* `workflow.deleted`: This webhook is triggered when a workflow is deleted. The payload contains the details of the event.
* `workflow.published`: This webhook is triggered when a `workflow` event occurs, that is when a workflow is synced from dev to prod environment. The payload contains the details of the event.
* `workflow.updated`: This webhook is triggered when a workflow is updated. The payload contains the details of the event.
