Event
Registers a Calendly webhook subscription at publish and starts one run per delivery, verified against Calendly's HMAC signature. Emits {event, created_at, resource_uri, invitee_email, payload}.
Start a run when a Calendly booking is made, cancelled or marked no-show.
Connection
- Required
- Yes — the node will not save without one
- Auth type
- Bearer token
- Providers
- Calendly
- Secret shape
- the Calendly personal access token (or an OAuth access token)
- Resolved by
- config.connection_id, else node.connection_id
- Note
- Webhooks need a paid Calendly plan (Standard or higher); on a free plan the subscription is refused at publish with Calendly's own message. The organization and user URIs are read from /users/me, so nothing has to be pasted in. Publishing also needs MANTLE_APP_PUBLIC_BASE_URL set to an https URL Calendly can reach.
Configuration
2 fields, none required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.
| Field | Type | Required | Default | Constraints | Example |
|---|---|---|---|---|---|
events Which Calendly events to subscribe to. One subscription covers all of them, and it is deleted again when the workflow is unpublished or disabled. | array | No | ["invitee.created"] | 1–11 characters; array of string | — |
scope Whose bookings to listen to. 'user' is the token owner's own calendar; 'organization' is everybody in the organization and needs the token owner to be an admin or owner of it. | string | No | user | one of "user", "organization" | — |
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"events": [
"invitee.created"
],
"scope": "user"
}Output
One shape.
calendly event
The flattened Calendly delivery. `payload`'s keys depend on the event type, so the shape is open below the declared fields.
Extra keys beyond the ones listed can appear.
| Field | Type | Example |
|---|---|---|
event The Calendly event name, e.g. invitee.created. Branch on this when the trigger subscribes to more than one. | string | invitee.created |
created_at When Calendly raised the event (ISO 8601, microsecond precision). Part of the idempotency key — Calendly sends no delivery id of its own. | string | 2026-07-02T12:00:00.000000Z |
created_by URI of the Calendly user the subscription belongs to, or empty where the event has no acting user. | string | — |
resource_uri Canonical URI of the resource the event is about — the invitee for invitee.*, the no-show record for invitee_no_show.*, the submission for routing_form_submission.created. Fetch it back through the Calendly API for anything `payload` does not carry. | string | https://api.calendly.com/scheduled_events/BBBBBBBBBBBBBBBB/invitees/CCCCCCCCCCCCCCCC |
invitee_email The invitee's email address on an invitee.* event; empty on the event types that are not about an invitee. | string | jane@example.com |
invitee_name The invitee's name on an invitee.* event; empty on the others. | string | Jane Doe |
status The resource's status where it has one — 'active' or 'canceled' for an invitee. Empty otherwise. | string | active |
payload Calendly's own resource body, verbatim — an Invitee for invitee.*, a no-show record for invitee_no_show.*, a submission for routing_form_submission.created. Its keys depend on the event, which is why this shape is open. | object | — |
{
"created_at": "2026-07-02T12:00:00.000000Z",
"created_by": "https://api.calendly.com/users/AAAAAAAAAAAAAAAA",
"event": "invitee.created",
"invitee_email": "jane@example.com",
"invitee_name": "Jane Doe",
"payload": {
"email": "jane@example.com",
"name": "Jane Doe",
"scheduled_event": {
"end_time": "2026-07-10T15:30:00.000000Z",
"name": "30 Minute Meeting",
"start_time": "2026-07-10T15:00:00.000000Z",
"uri": "https://api.calendly.com/scheduled_events/BBBBBBBBBBBBBBBB"
},
"status": "active",
"uri": "https://api.calendly.com/scheduled_events/BBBBBBBBBBBBBBBB/invitees/CCCCCCCCCCCCCCCC"
},
"resource_uri": "https://api.calendly.com/scheduled_events/BBBBBBBBBBBBBBBB/invitees/CCCCCCCCCCCCCCCC",
"status": "active"
}Notes
- Publishing creates the subscription in Calendly; unpublishing, disabling or archiving deletes it. A workflow that is off is off at Calendly too.
- Each delivery is verified against Calendly's HMAC-SHA256 over '{timestamp}.{body}' and refused outside Calendly's 3-minute tolerance.
- Calendly sends no delivery id, so the idempotency key is built from the event name, the resource URI and created_at — all three of them Calendly's own values, and all three stable across a retry.
- Calendly disables a subscription whose endpoint keeps failing. Nothing here notices — the subscription does not expire, so the renewal sweep skips it — and the fix is to publish again, which re-registers.
Related Calendly nodes
See Event run in a workflow.
In a technical demo we add the Calendly connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.