Webhook events
email.received
An incoming email was stored for a receiving domain.
When it fires
email.received fires once when an incoming message for a domain with receiving enabled has been stored and parsed. The payload carries metadata only. Fetch the body with retrieve received email and attachments with list received attachments, using data.email_id.
Payload
json
{
"type": "email.received",
"created_at": "2026-09-29T10:00:00.000Z",
"data": {
"email_id": "YOUR_RECEIVED_EMAIL_ID",
"created_at": "2026-09-29T09:59:59.000Z",
"from": "you@example.net",
"to": ["inbox@example.com"],
"cc": [],
"bcc": [],
"received_for": ["inbox@example.com"],
"message_id": "<message@example.net>",
"subject": "Hello",
"attachments": [
{
"id": "YOUR_ATTACHMENT_ID",
"filename": "invoice.pdf",
"content_type": "application/pdf",
"content_disposition": "attachment",
"content_id": null
}
]
}
}| Field | Description |
|---|---|
email_id | The received email's ID for the receiving API. |
created_at | When the message arrived. |
from, to, cc, bcc, subject | Parsed from the message headers. |
received_for | The envelope recipients on your domain the message was delivered for. |
message_id | The Message-ID header. |
attachments | One entry per attachment with id, filename, content_type, content_disposition, and content_id. Sizes and download URLs are not included. |
Handle the event
Verify the signature and deduplicate by svix-id.