Webhooks

Activity on an advanced (multichannel) campaign

Sent to URLs registered with type: advanced.

  • EMAIL_SENT: email step sent (the documented name MAIL_SENT never fires).
  • OPENED, CLICKED, UNSUBSCRIBED: same tracking rules as legacy email, delivered 30 to 60 seconds later; contact without id, no sender.
  • MAIL_REPLIED: first email reply, with reply, sentiment, sender, senderName, messageId, campaignId.
  • BOUNCED: bounce detected; no campaign field, step 0.
  • VISITED, INVITED, ACCEPTED, MESSAGE_SENT (text in content), INMAIL_SENT, LIKED: LinkedIn actions.
  • LINKEDIN_REPLIED: LinkedIn reply with reply and sentiment; campaignId, linkedinUrlProfile and linkedinId only when detected in real time.
  • WHATSAPP_MESSAGE_SENT, WHATSAPP_REPLIED: WhatsApp message sent, reply received (reply).
  • CAMPAIGN_ENDING: see the campaignEnding webhook.

Never sent: SENT, MAIL_SENT, FOLLOWED, TASK_COMPLETED, TASK_FAILED, FAILED_ACTION, EXCLUDED, RE_REPLY_EMAIL, RE_REPLY_LINKEDIN. Only the real time LinkedIn path retries (once, network errors).

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.

postWebhookadvancedCampaignActivity

Payload

event'EMAIL_SENT' | 'OPENED' | 'CLICKED' | 'MAIL_REPLIED' | 'BOUNCED' | 'UNSUBSCRIBED' | 'VISITED' | 'INVITED' | 'ACCEPTED' | 'MESSAGE_SENT' | 'INMAIL_SENT' | 'LIKED' | 'LINKEDIN_REPLIED' | 'WHATSAPP_MESSAGE_SENT' | 'WHATSAPP_REPLIED' | 'CAMPAIGN_ENDING' required

Events delivered for advanced (multichannel) campaigns (type: advanced). The email sent event is EMAIL_SENT (not SENT, not MAIL_SENT). CAMPAIGN_ENDING is delivered with a different body (see the campaignEnding webhook).

campaignstring

Campaign name. Missing on BOUNCED (bug).

campaignIdstring

Only on MAIL_REPLIED and on LinkedIn replies or acceptances detected in real time.

senderNamestring

MAIL_REPLIED only.

senderstring

MAIL_REPLIED only: address of the Emelia mailbox that received the reply.

datestring date-time required

ISO 8601 UTC. Processing time for most events; message time for LinkedIn and WhatsApp replies; 30 to 60 seconds after the fact for OPENED, CLICKED and UNSUBSCRIBED.

stepinteger required

Indicative only. Actions: position of the step in its branch (0 for the first step after the start). OPENED, CLICKED, UNSUBSCRIBED: same but counting the start node (EMAIL_SENT 0 then OPENED 1 for the same email). MAIL_REPLIED: index among the email steps. BOUNCED, WHATSAPP_REPLIED, LINKEDIN_REPLIED and most ACCEPTED: 0.

replystring

MAIL_REPLIED, LINKEDIN_REPLIED, WHATSAPP_REPLIED.

contentstring

MESSAGE_SENT only: text of the LinkedIn message sent.

messageIdstring

MAIL_REPLIED only.

linkstring

CLICKED only.

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.