<!-- BusyBot node reference — https://busybot.net/tools/cal-trigger/ -->

> Node: Cal.com Trigger (`cal_trigger`) · Webhook trigger · v1
> Category: Productivity · Credentials: Cal.com API (`calApi`)
> Updated: 2026-08-16

# 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

| Direction | Port(s) |
|-----------|--------|
| Input | None (trigger node) |
| Output | `Output` |

## Credentials

This tool requires **Cal.com API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/cal-api/) for setup instructions.

### Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Events | `multiOptions` | Yes | `[]` | 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 Version | `options` | No | `2` | The 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) |
| Options | `collection` | No | `{}` | Optional extra settings. Add only the fields you need. |
| — App ID | `string` | No | — | The ID of the App to monitor. |
| — Event Type ID | `string` | No | — | The ID of the EventType to monitor. Obtain from Cal.com event types settings. |
| — Payload Template | `string` | No | — | Template 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:

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

Monitor only a specific event type:

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

Use a custom payload template:

```json
{
  "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:

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

Monitor bookings for one consultation event type:

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

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

```json
{
  "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:

```json
{
  "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.