Skip to documentation

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
      }
    ]
  }
}
FieldDescription
email_idThe received email's ID for the receiving API.
created_atWhen the message arrived.
from, to, cc, bcc, subjectParsed from the message headers.
received_forThe envelope recipients on your domain the message was delivered for.
message_idThe Message-ID header.
attachmentsOne 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.