Reference · Tools

Cal.com Trigger

Starts workflow when Cal.com booking events occur

Webhook trigger Productivity v1

The Cal.com Trigger starts a workflow the moment a booking event happens in Cal.com — created, cancelled, rescheduled, or a meeting ending — and passes the full webhook payload through, including attendee, organizer and event-type details. It registers the webhook for you against Cal.com cloud or a self-hosted instance. A typical build is sending a prep email and creating a CRM task the moment a demo is booked.

Node type
Webhook trigger
Parameters
3
Outputs
Output
Credentials
Cal.com API

Cal.com Trigger

Triggers on Cal.com booking events

Overview

Receives webhook notifications from Cal.com when booking events occur, such as new bookings, cancellations, reschedulings, or meeting endings. Outputs the full Cal.com webhook payload including booking details, attendee information, organizer data, and event metadata. Supports both Cal.com cloud and self-hosted instances. Useful for automating follow-ups, syncing calendar data, sending notifications, and triggering workflows based on scheduling activity.

Category: Productivity
Tool Name: cal_trigger
Version: 1

Appearance: Icon: lucide-CalendarCheck | Color: #292929

Node Type

Trigger — webhook (receives incoming HTTP callbacks)

Input / Output

DirectionPort(s)
InputNone (trigger node)
OutputOutput

Credentials

This tool requires Cal.com API credentials. See the Credentials Guide for setup instructions.

Parameters

ParameterTypeRequiredDefaultDescription
EventsmultiOptionsYes[]Which Cal.com events to listen for.
Options: BOOKING_CANCELLED (a Cal event is canceled), BOOKING_CREATED (a new Cal event is created), BOOKING_RESCHEDULED (a Cal event is rescheduled), MEETING_ENDED (a Cal event or meeting has ended)
API VersionoptionsNo2The Cal.com API version. Determines which webhook endpoints are used (/hooks for v1, /webhooks for v2).
Options: 1 (Before v2.0), 2 (v2.0 onwards)
OptionscollectionNo{}Optional extra settings. Add only the fields you need.
— App IDstringNoThe ID of the App to monitor.
— Event Type IDstringNoThe ID of the EventType to monitor. Obtain from Cal.com event types settings.
— Payload TemplatestringNoTemplate to customize the webhook payload sent by Cal.com.

Output Data

Each delivered event produces one output item. The booking details Cal.com nests under payload are flattened onto the top level of the item, so you address them directly.

  • triggerEvent — the Cal.com event, e.g. BOOKING_CREATED
  • createdAt — when Cal.com recorded the event
  • The booking fields, flattened: id, uid, title, description, startTime, endTime, status, attendees[] (email, name, timeZone, locale), organizer (id, name, email, timeZone, language), location, destinationCalendar, cancellationReason, rejectionReason, metadata, responses
  • _trigger — always cal_webhook
  • _timestamp — ISO 8601 timestamp of when the request arrived
  • _webhookEvent — the same value as triggerEvent

Deliveries whose event is not in your Events selection are acknowledged but do not start the workflow.

Reference the payload downstream by expression, e.g. {{ $json.attendees[0].email }} or {{ $json.startTime }}.

Usage Examples

  • Start a workflow when a new Cal.com booking is created
  • Trigger a notification when a Cal.com booking is cancelled
  • Sync rescheduled Cal.com meetings to a CRM
  • Send a follow-up email when a Cal.com meeting ends

Example Configuration

Listen for booking creation and cancellation events:

{
  "type": "cal_trigger",
  "parameters": {
    "events": ["BOOKING_CREATED", "BOOKING_CANCELLED"],
    "version": 2
  }
}

Monitor only a specific event type:

{
  "type": "cal_trigger",
  "parameters": {
    "events": ["BOOKING_CREATED", "BOOKING_RESCHEDULED"],
    "version": 2,
    "options": {
      "eventTypeId": "evt_123456789",
      "appId": "cal-app-001"
    }
  }
}

Use a custom payload template:

{
  "type": "cal_trigger",
  "parameters": {
    "events": ["BOOKING_CREATED", "MEETING_ENDED"],
    "version": 2,
    "options": {
      "eventTypeId": "evt_987654321",
      "payloadTemplate": "{\"customField\": \"{{event.title}}\", \"timestamp\": \"{{event.startTime}}\"}"
    }
  }
}

Core booking monitoring — the most common setup:

{
  "type": "cal_trigger",
  "parameters": {
    "events": ["BOOKING_CREATED", "BOOKING_CANCELLED", "BOOKING_RESCHEDULED"],
    "version": 2
  }
}

Monitor bookings for one consultation event type:

{
  "type": "cal_trigger",
  "parameters": {
    "events": ["BOOKING_CREATED"],
    "version": 2,
    "options": {
      "eventTypeId": "evt_consultation_30min"
    }
  }
}

Monitor events coming from a specific Cal.com app integration:

{
  "type": "cal_trigger",
  "parameters": {
    "events": ["BOOKING_CREATED", "BOOKING_CANCELLED"],
    "version": 2,
    "options": {
      "appId": "zoom-integration-001",
      "eventTypeId": "evt_zoom_meeting"
    }
  }
}

All events, with a customized payload:

{
  "type": "cal_trigger",
  "parameters": {
    "events": [
      "BOOKING_CREATED",
      "BOOKING_CANCELLED",
      "BOOKING_RESCHEDULED",
      "MEETING_ENDED"
    ],
    "version": 2,
    "options": {
      "payloadTemplate": "{\"event_type\": \"{{eventType}}\", \"booking_id\": \"{{booking.id}}\", \"attendee_email\": \"{{attendee.email}}\"}"
    }
  }
}

Trigger Behavior

  • Activation: When the workflow is activated, a webhook endpoint is registered with the service.
  • Deactivation: The webhook is automatically unregistered when the workflow is deactivated.
  • Payload: The incoming webhook payload is parsed and output as workflow items.
  • Verification: Supports signature verification where applicable.

Tips

Cal.com Trigger listens for webhook events from Cal.com. Configure which events to listen for (booking created, cancelled, rescheduled, or meeting ended) and optionally filter by App ID, Event Type, or customize the payload template. When an event occurs, the full Cal.com payload is passed to the workflow.

Important Notes

  • At least one event must be selected in events.
  • eventTypeId should match the ID from your Cal.com event types settings.
  • Custom payload templates use Cal.com’s templating syntax with double curly braces. Because the platform also evaluates {{ … }} expressions, keep the template on a single parameter and do not mix it with workflow expressions.
  • Version 2 is recommended for new setups as it uses the latest webhook endpoints.
  • Self-hosted Cal.com works too — set Host on the Cal.com API credential and the node registers the webhook against your instance instead of https://api.cal.com.
  • Only your selected events start the workflow. Cal.com may deliver more than you subscribed to; anything outside events is acknowledged and dropped.

Frequently asked questions

Does it work with a self-hosted Cal.com instance?

Yes. Set Host on the Cal.com API credential and the node registers the webhook against your own instance rather than api.cal.com. Leave it unset to use Cal.com cloud.

Will the workflow fire for events I did not subscribe to?

No. Cal.com may deliver more events than you selected, but anything outside the events you chose is acknowledged and dropped without starting a run. At least one event must be selected or the trigger has nothing to listen for.

Why does my custom payload template break?

Cal.com templates use double curly braces, and the workflow engine evaluates the same syntax for its own expressions. Keep the template confined to that one parameter and do not mix workflow expressions into it.

Which webhook version should I choose?

Version 2 for new setups — it uses Cal.com's current webhook endpoints. Version 1 remains for existing integrations that were built against the older payload shape.

Build with the Cal.com Trigger node

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Cal.com API credentials first.

Open BusyBot

Last updated . Spotted something wrong? Tell us.