Every email event, delivered to your backend
Real-time POST requests for delivery, opens, clicks, bounces, and complaints — HMAC-signed, retried automatically, and queryable via API.
{ "ms": 847, "provider": "ses", "to": "alex@acme.com" }
Delivery health
Endpoint
https://acme.com/api/webhooksEvents subscribed
8 types
Signing secret
••••••••
Deliveries today
4,812
Failure rate
0.03%
HMAC-SHA256 signatures
Every payload includes X-Sendbound-Signature. Verify in one line with our SDK or any HMAC library. Replay attacks are rejected automatically.
72-hour retry logic
Failed deliveries retry with exponential backoff: 10s, 5m, 30m, 2h, 8h, and 24h. Full retry history is visible per event.
Granular event filtering
Subscribe to exactly the events you need. Reduce noise, cut processing costs, and keep your endpoint fast and focused.
SECURITY FIRST
Verify every payload in one line
Webhook signing proves a request came from Sendbound and hasn't changed in transit. Every delivery carries an HMAC-SHA256 signature and timestamp — the SDK validates both before your handler sees the event.
Stale timestamps are rejected to prevent replay attacks. Keep your handler small: verify, return 2xx, then queue the work.
SENDBOUND_WEBHOOK_SECRET
Your per-endpoint signing secret
x-sendbound-signature
HMAC-SHA256 of body + timestamp
x-sendbound-timestamp
Rejects requests older than 5 min
Incoming request
const event = verifyWebhook(req.body, { secret: process.env.WEBHOOK_SECRET, signature: req.headers['x-sb-signature'], timestamp: req.headers['x-sb-timestamp'], });
COMPLETE COVERAGE
Every event, every edge case
Subscribe to exactly the signals your system needs. Mix and match per endpoint.
Delivery
18,113
events today
delivery rate
99.6%
Engagement
5,821
events today
open rate
39.7%
Inbound
1,047
events today
routed correctly
100%
System
3
events today
this month
0 errors
RELIABILITY
Never miss an event
Exponential retries protect your integration through outages and deploys — without you writing a single line of retry logic.
Exponential retry schedule
Endpoint recovered at 30m — event delivered successfully
0s
First attempt
10s
Retry #1
5m
Retry #2
30m
Retry #3
2h
Retry #4
8h
Retry #5
24h
Retry #6
72h
Marked failed
Max retry window
72 hours
Backoff strategy
Exponential
Attempts logged
Every one
<100ms
median delivery latency
99.97%
webhook delivery rate
72 hrs
automatic retry window
10+
event types supported
INTEGRATIONS
Plug into your existing stack
Copy a snippet and you're wired up. Real events, real payloads, zero abstraction.
Salesforce
Log delivery & opens on contact timeline
if (event.type === 'email.opened') {
await sf.updateContact(event.data.to, {
Last_Email_Open__c: new Date(),
});
}Segment
Auto-suppress bounces and complaints
if (event.type === 'email.bounced') {
await segment.suppress(event.data.to);
await db.contacts.update({ bounced: true });
}Slack
Alert your team on complaints instantly
if (event.type === 'email.complained') {
await slack.postMessage('#ops', {
text: `Complaint: ${event.data.to}`,
});
}HOW WE COMPARE
Signing, retries, filtering, and a portal — all included
Not sold separately. Not a paid add-on.
| Feature | Sendbound | Svix | Hookdeck | Postmark |
|---|---|---|---|---|
| HMAC-SHA256 signing | ✓ | ✓ | ✓ | ✓ |
| 72-hour auto-retry | ✓ | ✗ | ✓ | ✓ |
| Granular event filtering | ✓ | ✓ | ✓ | Partial |
| Developer portal | ✓ | ✓ | ✓ | ✗ |
| Replay any event | ✓ | ✓ | ✓ | ✗ |
| Per-attempt delivery log | ✓ | ✓ | ✓ | ✗ |
| SDK verify helper | ✓ | ✓ | ✗ | ✗ |
| Included in email plan | ✓ | ✗ | ✗ | ✓ |
Webhook questions, answered
How do I verify webhook signatures?
Use the SDK helper with your endpoint secret, raw body, signature, and timestamp. It validates the HMAC-SHA256 signature and rejects stale timestamps automatically before your handler runs.
What happens if my endpoint is down?
We retry with exponential backoff: 10s, 5m, 30m, 2h, 8h, 24h — up to 72 hours. Every attempt, response code, and payload is logged and visible in the event dashboard.
Can I replay failed events?
Yes. Replay a single event from its detail page, or batch-replay a filtered date range after fixing an endpoint issue. Replays are signed identically to the original delivery.
How do I subscribe to only what I need?
Choose exact event types per endpoint when you create it. Delivery, engagement, inbound, and system events are independently togglable — zero noise, lower processing cost.
Is there a rate limit?
Events are delivered as they occur. Sendbound queues bursts safely. Your endpoint can return 2xx immediately and process asynchronously with no risk of missing events.
Can I test webhooks locally?
Send a signed test event from the dashboard and tunnel a local port. The test event is indistinguishable from production — same structure, same signature, same headers.
