Webhook Event Types and Payloads
Event Types
| ID |
Event |
Description |
| 1 |
Paused |
Send paused |
| 2 |
Canceled |
Send canceled |
| 3 |
Failed |
Send attempt failed |
| 4 |
Submitted |
Email submitted to ESP |
| 5 |
Initiated |
Email queued for processing |
| 6 |
Retry |
Retrying after failure |
| 7 |
Sent |
ESP confirmed delivery |
| 8 |
SoftBounced |
Temporary delivery failure (4xx) |
| 9 |
HardBounced |
Permanent delivery failure (5xx) |
| 10 |
Complained |
Recipient reported spam |
| 11 |
Suppressed |
Blocked by suppression list |
| 12 |
Unsubscribed |
Recipient unsubscribed |
| 13 |
Opened |
Recipient opened email |
| 14 |
Clicked |
Recipient clicked link |
Base Payload (all events)
Every event includes these fields:
| Field |
Description |
type |
Event type string |
createdAt |
ISO 8601 timestamp |
messageId |
Unique run ID |
recipient |
Recipient email |
senderDomain |
Object: domain, id |
sendIntegration |
Object: name, id |
esp |
ESP name |
source |
Source type (e.g., ScheduledEmail) |
sourceId |
Source identifier |
emailContent |
Object: name, id, template (name, id), fromName (name, id), subjectLine (name, id) |
Event-Specific Fields
| Event |
Extra Fields |
| Failed |
error.reason — error message |
| SoftBounced |
bounce.type ("soft"), bounce.message — bounce reason |
| HardBounced |
bounce.type ("hard"), bounce.message — bounce reason |
| Unsubscribed |
unsubscribe.reason — reason if provided |
| Opened |
client.ipAddress, client.userAgent |
| Clicked |
client.ipAddress, client.link, client.userAgent |
Example Payload (Sent)
{
"type": "Sent",
"createdAt": "2026-04-02T10:00:05Z",
"messageId": "run-abc123",
"recipient": "user@example.com",
"senderDomain": {
"domain": "mail.yourdomain.com",
"id": "sd-123"
},
"sendIntegration": {
"name": "My SendGrid",
"id": "si-456"
},
"esp": "SendGrid",
"source": "ScheduledEmail",
"sourceId": "se-789",
"emailContent": {
"name": "April Newsletter",
"id": "ec-101",
"template": {
"name": "Newsletter Template",
"id": "t-201"
},
"fromName": {
"name": "Company Name",
"id": "fn-301"
},
"subjectLine": {
"name": "Check out our latest news",
"id": "sl-401"
}
}
}
Example Payload (HardBounced)
{
"type": "HardBounced",
"createdAt": "2026-04-02T10:00:05Z",
"messageId": "run-abc123",
"recipient": "invalid@example.com",
"senderDomain": { "domain": "mail.yourdomain.com", "id": "sd-123" },
"sendIntegration": { "name": "My SendGrid", "id": "si-456" },
"esp": "SendGrid",
"source": "ScheduledEmail",
"sourceId": "se-789",
"emailContent": {
"name": "April Newsletter",
"id": "ec-101",
"template": { "name": "Newsletter Template", "id": "t-201" },
"fromName": { "name": "Company Name", "id": "fn-301" },
"subjectLine": { "name": "Check out our latest news", "id": "sl-401" }
},
"bounce": {
"type": "hard",
"message": "550 Mailbox not found"
}
}
Example Payload (Clicked)
{
"type": "Clicked",
"createdAt": "2026-04-02T10:16:00Z",
"messageId": "run-abc123",
"recipient": "user@example.com",
"senderDomain": { "domain": "mail.yourdomain.com", "id": "sd-123" },
"sendIntegration": { "name": "My SendGrid", "id": "si-456" },
"esp": "SendGrid",
"source": "ScheduledEmail",
"sourceId": "se-789",
"emailContent": {
"name": "April Newsletter",
"id": "ec-101",
"template": { "name": "Newsletter Template", "id": "t-201" },
"fromName": { "name": "Company Name", "id": "fn-301" },
"subjectLine": { "name": "Check out our latest news", "id": "sl-401" }
},
"client": {
"ipAddress": "203.0.113.42",
"link": "https://example.com/offer",
"userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)"
}
}