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
| Event | Meaning |
|---|---|
sent | The message was handed to SES and accepted for delivery |
delivery | SES received a delivery receipt — the recipient's server accepted it |
delivery_delayed | SES reports the message is delayed at the destination |
failed | Delivery failed (permanent failure, or the send itself errored) |
Reputation
| Event | Meaning |
|---|---|
bounce | Recipient rejected the mail (hard bounce also auto-suppresses) |
complaint | Recipient reported it as spam (also auto-suppresses) |
suppressed | The send was blocked by your suppression list — nothing was sent |
Engagement (when open/click tracking is enabled)
| Event | Meaning |
|---|---|
open | A tracked open |
click | A tracked link click |
Scheduled sends
| Event | Meaning |
|---|---|
scheduled | A message was accepted with a future scheduled_at |
cancelled | A scheduled message was cancelled before sending |
Payload shape
{
"type": "bounce",
"message_id": "msg_2h8Kd0Rk9Qa",
"ses_message_id": "0100018f...",
"recipients": ["ada@lovelace.io"],
"timestamp": 1783386190864
}| Field | Type | Notes |
|---|---|---|
type | string | One of the eleven event types above |
message_id | string | Your emitd message id — join against GET /v1/messages/{id} |
ses_message_id | string | The underlying SES message id |
recipients | string[] | Affected addresses |
timestamp | integer | Event 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-
2xxresponses 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}/replayre-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.