Webhook events
email.sent
Amazon SES accepted the email for delivery.
When it fires
email.sent fires once per email when Amazon SES accepts it. Acceptance is not proof of inbox delivery; wait for email.delivered. Emails the installation sends for its own account (sign-in links, invitations) never emit team webhooks.
Payload
json
{
"type": "email.sent",
"created_at": "2026-09-29T10:00:00.000Z",
"data": {
"created_at": "2026-09-29T09:59:59.000Z",
"email_id": "YOUR_EMAIL_ID",
"message_id": "SES_MESSAGE_ID",
"from": "hello@example.com",
"to": ["you@example.net"],
"subject": "Welcome",
"tags": {}
}
}Every email.* event for outgoing mail shares these data fields:
| Field | Description |
|---|---|
created_at | When the email was created. |
email_id | The email's ID, as returned by the send API. |
message_id | The SES message ID. Present once SES has accepted the email, so it is absent from email.scheduled and from an email.failed raised before sending. |
from, subject | The stored sender and subject. |
to | The relevant recipients. Delivery, delay, bounce and complaint events narrow this to the reported recipient; other events normally use the stored To list. |
tags | An object of tag names to values. Empty when the email has no tags. |
broadcast_id | Present when the email belongs to a broadcast. |
template_id | Present when the email was sent from a template. |
Handle the event
Verify the signature and deduplicate by svix-id.