Skip to documentation

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:

FieldDescription
created_atWhen the email was created.
email_idThe email's ID, as returned by the send API.
message_idThe 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, subjectThe stored sender and subject.
toThe relevant recipients. Delivery, delay, bounce and complaint events narrow this to the reported recipient; other events normally use the stored To list.
tagsAn object of tag names to values. Empty when the email has no tags.
broadcast_idPresent when the email belongs to a broadcast.
template_idPresent when the email was sent from a template.

Handle the event

Verify the signature and deduplicate by svix-id.