{
"object": "Event",
"id": "evt_7c1d2e3f4a5b46c7d8e9f0a1b2c3d4e5",
"type": "email.new",
"created_at": "2026-10-06T09:12:03Z",
"account_id": "acc_ba1fa6938d8548298e8ce62e4b4b4e99",
"endpoint_id": "we_e3f1a2b4c5d64e7f8a9b0c1d2e3f4a5b",
"data": {
"email": {
"$ref": "#/components/examples/Email/value"
}
}
}Webhooks
Event
Every call to your endpoint carries one event in this envelope. data depends on type:
type | data |
|---|---|
email.new, email.new.bounce, email.update, email.delete, email.draft.new, email.draft.delete | { "email": Email } |
email.folder.create, email.folder.update, email.folder.delete | { "folder": Folder } |
tracking.open, tracking.click | { tracking_id, label, message_id, email_id, date, ip, user_agent, url } (url on clicks) |
account.add, account.reconnect | { "account": Account, "state": "…" } |
account.remove | { "account": { id, user_id, name, provider } } |
account.status.running, .errored, .disconnected | { status, previous_status, status_detail } |
account.initial_sync.running, .completed, .failed | { "initial_sync": InitialSync } |
Headers: X-Email-Engine-Signature (sha256= + hex HMAC-SHA256 of the raw body, keyed
with the endpoint’s secret), X-Email-Engine-Event (the type), X-Email-Engine-Delivery
(the same on every retry).
WEBHOOK
event
{
"object": "Event",
"id": "evt_7c1d2e3f4a5b46c7d8e9f0a1b2c3d4e5",
"type": "email.new",
"created_at": "2026-10-06T09:12:03Z",
"account_id": "acc_ba1fa6938d8548298e8ce62e4b4b4e99",
"endpoint_id": "we_e3f1a2b4c5d64e7f8a9b0c1d2e3f4a5b",
"data": {
"email": {
"$ref": "#/components/examples/Email/value"
}
}
}Authorizations
Your access token, from your dashboard under API keys.
Body
application/json
Allowed value:
"Event"evt_…, the same on every endpoint the event goes to.
Available options:
email.new, email.new.bounce, email.update, email.delete, email.draft.new, email.draft.delete, email.folder.create, email.folder.update, email.folder.delete, tracking.open, tracking.click, account.add, account.reconnect, account.remove, account.status.running, account.status.errored, account.status.disconnected, account.initial_sync.running, account.initial_sync.completed, account.initial_sync.failed The endpoint this call is for.
Response
200
Any 2xx answer acknowledges the call. Anything else is retried.