Webhooks
Activity on a legacy email campaign
Sent to URLs registered with type: email (or without type).
- SENT: right after a sequence email is sent (test sends excluded). Network errors retried up to 5 times; the send waits for your endpoint.
- OPENED: tracking pixel loaded, at most once per email and contact, delivered 30 to 60 seconds later. Needs open tracking.
- CLICKED: tracked link clicked, at most once per link and email, delivered 30 to 60 seconds later; two clicks of the same contact on the same step queued within that delay can be merged into the last one. With open tracking on, a click is ignored until an open was recorded.
- REPLIED: first reply of the contact detected in the mailbox (later replies are not sent), with reply text, AI classification, sending mailbox and Message-ID. Network errors retried up to 5 times.
- BOUNCED: bounce detected (non delivery report or refusal at send time). No campaign field and step always 0. Network errors retried up to 5 times.
- UNSUBSCRIBED: the contact confirms on the unsubscribe page (or a one click unsubscribe POST is received); once per contact.
- INTERESTED: contact marked as interested by a user in the legacy web app (not through the REST API).
- CAMPAIGN_ENDING: accepted at registration, never sent for email campaigns.
Delivery. One POST per event and per registered URL, header Content-Type: application/json, JSON body, no signature or secret header, default User-Agent of the HTTP library. No timeout is set. Your response (status and body) is ignored: an HTTP error is never retried. Network errors are retried only for some events (see each list). No event ID, no ordering guarantee, no replay; a URL registered twice receives everything twice. Absent fields are omitted, never null.
postWebhookemailCampaignActivity
Payload
Response
Any response is accepted. Emelia ignores the status and the body.
Changes
Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.