Webhooks
Subscribe to delivery and contact events via webhook.
Webhooks deliver real-time notifications to your server when delivery events occur. Sendbound sends an HTTP POST to your endpoint for each event.
Webhook object
{
"id": "wh_01HV...",
"url": "https://yourapp.com/hooks/sendbound",
"events": ["email.delivered", "email.bounced"],
"active": true,
"createdAt": "2026-01-20T09:00:00Z"
}Event types
| Event | Trigger |
|---|---|
email.delivered | Email accepted by recipient server |
email.opened | Recipient opened the email |
email.clicked | Recipient clicked a tracked link |
email.bounced | Permanent delivery failure |
email.spam | Recipient marked as spam |
contact.created | New contact added |
contact.unsubscribed | Contact unsubscribed |
Webhook payload
{
"event": "email.delivered",
"timestamp": "2026-04-15T10:30:00Z",
"data": {
"emailId": "em_01HV3K...",
"to": "jane@example.com",
"subject": "Your order has shipped"
}
}Every request includes an X-Sendbound-Signature HMAC-SHA256 header. Verify it with your webhook secret before processing the event.
List webhooks
Create a webhook
| Field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | Your HTTPS endpoint URL |
events | string[] | Yes | Event types to subscribe to |
Get a webhook
Update a webhook
Delete a webhook
Returns 204 No Content.
Verifying signatures
import crypto from 'crypto';
function verifyWebhook(rawBody, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(rawBody)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature),
);
}
