Webhooks
EmailSendX sends HTTP POST requests to your endpoint when email events occur — in real time. Use webhooks to sync data to your CRM, update contact statuses in your database, trigger support tickets on complaints, and more.
Webhooks require a paid plan
How Webhooks Work
When a tracked email event occurs — a delivery, an open, a click, a bounce — EmailSendX sends a JSON POST request to the URL you configure. Your endpoint receives the event in real time, without polling.
Webhooks are ideal for:
- Updating your CRM or database when contacts open, click, or unsubscribe
- Triggering a Zendesk ticket when a complaint event fires
- Removing bounced contacts from your billing system
- Logging email activity to your data warehouse in real time
- Sending Slack notifications when a campaign finishes sending
Setting Up a Webhook
Configure webhook endpoints in your workspace dashboard:
- Go to Settings → Webhooks → Add Webhook.
- Enter your endpoint URL. It must be HTTPS and publicly accessible.
- Optionally add a description to remember what this webhook is for.
- Select which event types to subscribe to. You can select all or a specific subset.
- Click Save. EmailSendX will immediately send a test ping to verify the endpoint responds.
You can register up to 10 webhook endpoints per workspace. Each endpoint can subscribe to any combination of event types.
Endpoint must respond within 30 seconds
Payload Format
All webhook deliveries are JSON POST requests with Content-Type: application/json. Every payload follows the same envelope structure with an event-specific data object.
{
"event": "email.delivered",
"workspaceId": "ws_acme_corp_id",
"timestamp": "2026-04-15T10:01:23Z",
"data": {
"emailId": "email_abc123",
"campaignId": "clx_camp_april_nl_id",
"campaignName": "April Newsletter",
"contactId": "clx1a2b3c4d5e6f7g8h9i0j",
"contactEmail": "john@example.com",
"sentAt": "2026-04-15T10:00:00Z",
"deliveredAt": "2026-04-15T10:01:23Z"
}
}| Field | Type | Description |
|---|---|---|
| event | string | Event type (e.g. email.delivered, contact.created) |
| workspaceId | string | The workspace that generated this event |
| timestamp | string | ISO 8601 UTC timestamp when the event occurred |
| data | object | Event-specific payload — fields vary by event type |
Retry Policy
If your endpoint returns a non-2xx response or doesn't respond within 30 seconds, EmailSendX automatically retries the delivery with exponential backoff:
| Attempt | Retry delay |
|---|---|
| 1st retry | 30 seconds after initial failure |
| 2nd retry | 2 minutes after 1st retry |
| 3rd retry | 10 minutes after 2nd retry |
| 4th retry | 30 minutes after 3rd retry |
| 5th retry | 1 hour after 4th retry |
| After 5 retries | Delivery marked as failed — visible in dashboard |
Failed deliveries and their retry history are visible in Settings → Webhooks → Delivery Log. You can manually re-trigger a failed delivery from there — useful for debugging without needing to re-send a campaign.
Available Events
EmailSendX currently emits 9 webhook event types:
email.deliveredEmail was accepted by the recipient's mail serveremail.openedRecipient opened the email (image pixel loaded)email.clickedRecipient clicked a tracked link in the emailemail.bouncedEmail was rejected by the recipient's server (hard or soft bounce)email.complainedRecipient marked the email as spamemail.unsubscribedRecipient unsubscribed via email link or one-click unsubscribecontact.createdA new contact was added to the workspacecontact.updatedA contact's status or properties were changedcampaign.sentA campaign finished sending to all recipients
See the Event Reference for full payload documentation and field definitions for each event type.
Ready to receive webhook events?
Set up your first webhook endpoint in Settings → Webhooks and start reacting to email events in real time.