Docs/Webhooks/Overview

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

Webhook functionality is available on Starter plans and above. The Hobby (free) plan does not include webhook support. Upgrade your plan to unlock webhooks.

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:

  1. Go to Settings → Webhooks → Add Webhook.
  2. Enter your endpoint URL. It must be HTTPS and publicly accessible.
  3. Optionally add a description to remember what this webhook is for.
  4. Select which event types to subscribe to. You can select all or a specific subset.
  5. 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

Your endpoint must return a 2xx HTTP status code within 30 seconds. If processing takes longer, respond immediately with 200 and process the payload asynchronously (e.g., push it to a queue).

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.

json
{
  "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"
  }
}
FieldTypeDescription
eventstringEvent type (e.g. email.delivered, contact.created)
workspaceIdstringThe workspace that generated this event
timestampstringISO 8601 UTC timestamp when the event occurred
dataobjectEvent-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:

AttemptRetry delay
1st retry30 seconds after initial failure
2nd retry2 minutes after 1st retry
3rd retry10 minutes after 2nd retry
4th retry30 minutes after 3rd retry
5th retry1 hour after 4th retry
After 5 retriesDelivery 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 server
  • email.openedRecipient opened the email (image pixel loaded)
  • email.clickedRecipient clicked a tracked link in the email
  • email.bouncedEmail was rejected by the recipient's server (hard or soft bounce)
  • email.complainedRecipient marked the email as spam
  • email.unsubscribedRecipient unsubscribed via email link or one-click unsubscribe
  • contact.createdA new contact was added to the workspace
  • contact.updatedA contact's status or properties were changed
  • campaign.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.