Reference

Webhook events

Every event type emitd delivers, the payload shape, and what each one means.

Every event emitd delivers to your webhook has a type from this list — eleven in total, covering the delivery lifecycle, reputation, engagement, and scheduled sends.

Event types

Delivery lifecycle

EventMeaning
sentThe message was handed to SES and accepted for delivery
deliverySES received a delivery receipt — the recipient's server accepted it
delivery_delayedSES reports the message is delayed at the destination
failedDelivery failed (permanent failure, or the send itself errored)

Reputation

EventMeaning
bounceRecipient rejected the mail (hard bounce also auto-suppresses)
complaintRecipient reported it as spam (also auto-suppresses)
suppressedThe send was blocked by your suppression list — nothing was sent

Engagement (when open/click tracking is enabled)

EventMeaning
openA tracked open
clickA tracked link click

Scheduled sends

EventMeaning
scheduledA message was accepted with a future scheduled_at
cancelledA scheduled message was cancelled before sending

Payload shape

{
  "type": "bounce",
  "message_id": "msg_2h8Kd0Rk9Qa",
  "ses_message_id": "0100018f...",
  "recipients": ["ada@lovelace.io"],
  "timestamp": 1783386190864
}
FieldTypeNotes
typestringOne of the eleven event types above
message_idstringYour emitd message id — join against GET /v1/messages/{id}
ses_message_idstringThe underlying SES message id
recipientsstring[]Affected addresses
timestampintegerEvent time, epoch milliseconds

Delivery guarantees

  • Every delivery carries X-Webhook-Signature: sha256=<hex> — HMAC-SHA256 of the raw body under your webhook secret. Verification code: Webhooks.
  • Non-2xx responses retry at 1 min, 5 min, 30 min, 2 hr, then every 8 hr, for up to 8 total attempts; after that the delivery is marked failed.
  • POST /v1/webhooks/{id}/replay re-delivers on demand.
  • Test-mode sends fire these events too, so your handler can be tested end-to-end in CI (Test mode).

Subscribe with POST /v1/webhooks or the console — the signing secret is returned exactly once at creation.

On this page