Skip to main content

Calendly integration

Trigger workflows from booked meetings and manage scheduled events on behalf of your clients' Calendly accounts.

What it does

The Calendly integration lets your agency react the moment a client's calendar fills, and act on Calendly scheduled events without leaving TaskJuice. Connect a Calendly account once and your workflows can list and read scheduled events, cancel a booking, browse event types, look up an invitee, and listen in real time as invitees book, cancel, or no-show across every workspace you operate.

Connect a Calendly account

  1. Open your workspace in TaskJuice and navigate to Connections.
  2. Choose Calendly and click Connect.
  3. Sign in to the Calendly account that owns the workspace you want to wire up and approve the requested access.
  4. TaskJuice returns you to the workspace with the connection ready to use in any workflow.

To revoke access, open your Calendly account, navigate to Integrations and API, and remove the TaskJuice authorization. See the Calendly OAuth guide for the full grant flow.

Triggers

Add a Calendly trigger to a workflow and publish. That is the whole setup.

TaskJuice creates the webhook subscription in the connected Calendly account for you: it points the subscription at an address only your workspace can receive on, subscribes it to the events your published workflows need, and attaches a signing key it generates and keeps. There is no subscription to create in Calendly, no URL to copy, and no signing key to invent.

While the trigger panel says setup is underway, TaskJuice is talking to Calendly. It normally finishes within a minute of publishing.

The three triggers:

  • calendly/invitee-created fires when an invitee books a Calendly scheduled event (invitee.created). The activation payload carries the event name, the originating user URI, and the full invitee object with questions and answers.
  • calendly/invitee-canceled fires when an invitee cancels a booking (invitee.canceled). Use it to update CRMs, notify Slack, or kick off recovery sequences.
  • calendly/invitee-no-show-created fires when an invitee is marked as a no-show on a scheduled event (invitee_no_show.created).

Every inbound POST is authenticated by recomputing HMAC-SHA256 over the concatenation of the signed timestamp, a literal period, and the raw request body, then comparing the hex digest against the value Calendly sends in the Calendly-Webhook-Signature header (formatted as t=<unix-ts>,v1=<hmac>). Activations that fail the signature or fall outside the replay window are rejected before they reach your workflow.

Which bookings you receive

TaskJuice registers the subscription against the Calendly user you connected, not the whole organization. You receive that account's bookings, and nothing from colleagues who share the organization. To cover several people, connect each of their accounts — one connection per Calendly user.

This also means the connection needs no admin rights in Calendly. Any Calendly user can authorize TaskJuice and get working triggers.

If registration does not finish

A failed attempt does not surface straight away: the panel keeps showing "Setting up Calendly…" while TaskJuice is still retrying, and an error message replaces it only after repeated failures. When one does, it tells you what happened and what to do. The three worth knowing in advance:

  • "Calendly rejected the connection. Reconnect your Calendly account, then republish." The OAuth authorization was revoked, or the token can no longer be refreshed. Open Connections, reconnect the account, and republish.
  • "Calendly did not confirm the registration. Registration retries automatically — no action needed." Calendly did not confirm in time. TaskJuice keeps retrying on its own, backing off between attempts; the panel clears when it succeeds.
  • "Automatic setup stopped after repeated failures. Contact support — other triggers are unaffected." Something has kept failing long enough that waiting is no longer the answer. TaskJuice still re-checks once a day behind this message, but contact support rather than wait it out.

What happens when you unpublish or disconnect

Calendly has no endpoint for changing a subscription after it is created, so TaskJuice re-registers whenever the set of events your published workflows need changes — deleting the old subscription and creating a replacement. The signing key stays the same across that swap: it belongs to the connection rather than to any one subscription, so TaskJuice reuses the key it already holds instead of minting a new one. Only the subscription's Calendly URI changes. This is invisible in normal use; it is why an event-set change is not quite instant the way it is for integrations that can be edited in place.

Unpublishing everything leaves the subscription in place and stops the events reaching your workflow; republishing within 90 days brings it straight back. Disconnecting the Calendly connection queues the subscription for deletion from the account: the delete usually lands within a minute, and if Calendly cannot be reached, TaskJuice keeps retrying on its own, backing off between attempts.

A subscription you made yourself is replaced, not adopted

Calendly never discloses an existing subscription's signing key, so TaskJuice cannot verify deliveries from a subscription it did not create. If it finds one pointing at your delivery URL, it replaces it with one of its own on the next publish.

Actions

  • calendly/get-current-user returns the currently authenticated Calendly user, including the user URI required by every list endpoint.
  • calendly/list-scheduled-events lists scheduled events for a user URI with optional status and time filters, paginated by next_page_token.
  • calendly/get-scheduled-event retrieves a single scheduled event by UUID.
  • calendly/cancel-scheduled-event cancels a scheduled event with an optional reason shown to invitees.
  • calendly/list-event-types lists event types owned by a user URI, paginated by next_page_token.
  • calendly/get-event-invitee retrieves a single invitee on a scheduled event, including questions and answers.
  • calendly/list-webhook-subscriptions lists webhook subscriptions scoped to an organization or user URI.

Known limitations

  • Calendly enforces a per-token rate limit. When a 429 status is returned, TaskJuice surfaces it as a retryable error so the workflow can back off and retry.
  • Webhook subscriptions are scoped at creation time and cannot be re-scoped. TaskJuice registers against the connected user, so covering several people means one connection per Calendly user.
  • Calendly has no endpoint for updating a webhook subscription. Any change to the set of events your workflows need is a delete-and-recreate. The signing key carries across unchanged — it belongs to the connection, not to any one subscription — so only the subscription's Calendly URI changes. TaskJuice handles both halves; nothing about it is yours to manage.
  • Webhook signatures use a 5-minute replay window. Activations whose signed timestamp falls outside that window are rejected.
  • A queued deletion that can never complete — most commonly because the Calendly authorization was revoked before you disconnected — is retried for several days and then written off, which can leave the subscription sitting in Calendly. If you revoke TaskJuice's access in Calendly first, check the account's webhook subscriptions afterwards and remove any leftover yourself.
  • Webhook management is shared across your whole TaskJuice account, one managed subscription per app. If two of your workspaces hold connections to two different Calendly accounts, whichever workspace published most recently is the account TaskJuice manages — the other account's subscription is left behind permanently: it keeps delivering, but TaskJuice no longer updates it and does not remove it, even when you disconnect that connection. If you stop using the older account, remove its subscription in Calendly yourself.
  • The TaskJuice integration targets the Calendly v2 REST API. Fields surfaced only on private or beta endpoints are not exposed.
Was this helpful?