Skip to main content

Webhook event triggers

Choose calendar, email, LinkedIn, WhatsApp, and Telegram campaign events for each outbound webhook.

intermediate7 min readUpdated

Open in Tantra

These open the app in a new tab. You may be asked to sign in.

Overview

Each webhook endpoint subscribes only to the campaign actions you select on the Webhooks page. Calendar, email, LinkedIn, WhatsApp, and Telegram actions are grouped separately. LinkedIn, WhatsApp, and Telegram remain visible but require their corresponding active add-on.

Delivery contract

Every event is an HTTPS POST with JSON and these headers:

HeaderValue
Content-Typeapplication/json
X-Tantra-EventEvent type, such as email.replied
X-Tantra-Event-IdUnique event identifier

A 2xx response counts as delivered. Treat delivery as at-least-once and deduplicate with X-Tantra-Event-Id.

Selectable events

You choose these when you create or edit an endpoint, under Actions to trigger this webhook. They are grouped by channel, and each group explains what it covers.

Create webhook dialog with the trigger groups for calendar, email and LinkedIn

Calendar and email actions are ticked by default. Social actions are not, so a new endpoint receives RSVP and email activity until you change it, and receives nothing from LinkedIn, WhatsApp, or Telegram until you tick those boxes. A channel whose add-on is inactive stays visible but cannot be selected.

The tick boxes are labelled in plain language. This is how each one maps to the event you receive:

ChannelTick boxEventFires when
CalendarRSVP = Yescalendar.rsvp.yesA guest changes their RSVP to accepted
CalendarRSVP = Nocalendar.rsvp.noA guest changes their RSVP to declined
CalendarRSVP = Maybecalendar.rsvp.maybeA guest changes their RSVP to tentative
EmailEmail bouncedemail.bouncedA bounce or spam complaint is detected
EmailEmail clickedemail.clickedA human clicks a tracked campaign link
EmailEmail repliedemail.repliedA genuine email reply is detected
EmailUnsubscribedemail.unsubscribedA recipient unsubscribes
LinkedInConnection acceptedlinkedin.connection.acceptedA campaign invitation is accepted
LinkedInMessage repliedlinkedin.message.repliedA campaign lead sends an inbound reply
WhatsAppMessage repliedwhatsapp.message.repliedA campaign lead sends an inbound reply
TelegramMessage repliedtelegram.message.repliedA campaign lead sends an inbound reply

Calendar does not expose or emit a “Needs action” webhook. Polling an unchanged calendar event also emits nothing.

Social reply events are limited to conversations linked to a Tantra sequence. An unrelated conversation in the unified inbox does not fire a campaign webhook. LinkedIn acceptance is emitted once: the real-time callback is primary, while a periodic reconciliation job is the fallback if that callback is missed.

Common payload fields

Payloads use a common envelope:

  • eventId, eventType, occurredAt, and channel
  • guest: name plus email or LinkedIn profile URL when available
  • sender: sender mailbox email when the event has one
  • campaign: id, name, creation date, and campaign tags
  • webinar: Zoom webinar identifiers or WebinarGeek broadcast id when linked
  • Event-specific fields such as url, snippet, connectionId, or calendar event dates

Calendar RSVP example:

{
  "eventId": "a1b2c3d4...",
  "eventType": "calendar.rsvp.yes",
  "occurredAt": "2026-09-15T09:30:00.000Z",
  "channel": "calendar",
  "guest": {
    "name": "Alice Example",
    "email": "alice@example.com",
    "response": "yes",
    "previousResponseStatus": "needsaction"
  },
  "sender": { "email": "sender@example.com" },
  "campaign": {
    "id": "campaign_123",
    "name": "Product Launch",
    "date": "2026-09-01T08:00:00.000Z",
    "tags": ["webinar", "product-launch"]
  },
  "event": {
    "id": "google_event_123",
    "name": "Product Launch Webinar",
    "start": "2026-09-15T10:00:00.000Z",
    "end": "2026-09-15T11:00:00.000Z",
    "timeZone": "Asia/Kolkata"
  },
  "webinar": { "provider": "zoom", "zoomWebinarId": "12345678901" }
}

LinkedIn reply example:

{
  "eventId": "d4c3b2a1...",
  "eventType": "linkedin.message.replied",
  "occurredAt": "2026-09-15T09:35:00.000Z",
  "channel": "linkedin",
  "guest": {
    "name": "Alice Example",
    "profileUrl": "https://www.linkedin.com/in/alice-example"
  },
  "campaign": { "id": "campaign_123", "name": "Product Launch", "tags": ["webinar"] },
  "messageId": "msg_123",
  "snippet": "Yes, I would like to learn more.",
  "repliedAt": "2026-09-15T09:35:00.000Z"
}

Connect to an automation tool

  1. Create an incoming webhook in n8n, Zapier, Make, or your own service.
  2. Register that URL on Webhooks.
  3. Select only the actions the workflow handles.
  4. Route on X-Tantra-Event and deduplicate on X-Tantra-Event-Id.
  5. Return 2xx quickly and perform slower work after responding.

Troubleshooting

SymptomCauseFix
A social action is disabledIts channel add-on is inactiveActivate it under Billing → Add-ons
No calendar event arrivesThe guest has not changed to Yes, No, or Maybe since the last snapshotChange a guest RSVP and wait for calendar reconciliation
No social reply arrivesThe conversation is not linked to a sequence, the add-on is inactive, or provider callback routing is unhealthyCheck the campaign enrollment, add-on, channel account, and callback endpoint
The same event arrives twiceA delivery was retriedDeduplicate on X-Tantra-Event-Id

Was this article helpful?

Related articles