Event

trigger.calendly_event
TriggerBusiness appsconnection requiredruns in-engine

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.

FieldTypeRequiredDefaultConstraintsExample
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.
arrayNo["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.
stringNouserone 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.

FieldTypeExample
event
The Calendly event name, e.g. invitee.created. Branch on this when the trigger subscribes to more than one.
stringinvitee.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.
string2026-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.
stringhttps://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.
stringjane@example.com
invitee_name
The invitee's name on an invitee.* event; empty on the others.
stringJane Doe
status
The resource's status where it has one — 'active' or 'canceled' for an invitee. Empty otherwise.
stringactive
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.