HELIOS DOCS

Calendly

The Calendly integration lets Helios agents read and change your Calendly scheduling data, contacts, and meeting recaps through its REST API, and run agents automatically on bookings, cancellations, no-shows, routing form submissions, event type and contact changes, and meeting recaps.

What your agents can do

Helios agents use Calendly API v2 to read and update scheduling data. Access depends on the connected user's permissions, token scopes, and Calendly plan.

  • Find open times for an event type, and book a meeting at one through Calendly's Scheduling API
  • Share an event type's booking link, or create a single-use link
  • List upcoming meetings with their invitees and answers, cancel a meeting with a reason, and mark no-shows
  • Create and update event types and their availability
  • Look up and update contacts, and read meeting recaps and transcripts from Calendly Notetaker
  • Look up routing form submissions and the meetings they led to

Calendly's API can't reschedule a meeting. An agent can share the invitee's reschedule link instead. The agent's API tool can only reach api.calendly.com.

Booking meetings

The agent books through Calendly's Scheduling API, POST /invitees. Calendly then sends the same emails and calendar invites as a booking made on the booking page.

  • Plan: the Scheduling API needs a paid Calendly plan, Standard or higher.
  • Booking limits: a trial account can book 5 meetings a day per user. Paid plans below Enterprise allow 10 bookings a minute, 50 an hour, and 100 a day per user. Enterprise allows 500 a minute.
  • Booking questions: the agent must answer every required question on the event type, with the question text exactly as written. An event type with a location also needs the location in the request.

Authentication

MethodTypeDescription
Calendly Personal Access TokenAPI KeyA personal access token from a Calendly user
Your own Calendly OAuth appOAuth 2.0An OAuth app you create in Calendly's developer portal

See Integration authentication for how credentials are stored and injected.

Scopes

Give both methods every scope, so agents can reach the whole API and triggers can receive every event.

ScopeWhat it's for
availability:readRead open times, busy times, and availability schedules
availability:writeChange an event type's availability
event_types:readRead event types and booking links, and list them for the event type filter. Needed for event_type.* events
event_types:writeCreate and update event types, including one-off event types
locations:readRead the user's meeting locations
routing_forms:readRead routing forms and submissions, and list them for the routing form filter. Needed for routing_form_submission.created
shares:writeCreate single-use booking links with custom settings
scheduled_events:readRead meetings, invitees, and no-shows. Needed for invitee.* and invitee_no_show.* events
scheduled_events:writeBook meetings through the Scheduling API, cancel meetings, and mark no-shows
scheduling_links:writeCreate single-use booking links
groups:readRead groups and their members
organizations:readRead the organization, its members, teams, and invitations, and the user's role
users:readRead users, and check the connection
webhooks:read, webhooks:writeList, create, and delete the trigger webhooks
contacts:readRead contacts. Needed for contact.* events
contacts:writeCreate, update, and delete contacts
meeting_recaps:readRead meeting recaps and transcripts. Needed for meeting_recap.* events
meeting_recaps:writeUpdate and delete meeting recaps

These admin scopes reach features that only organization owners and admins can use:

ScopeWhat it's for
activity_log:readRead the organization's activity log. Needs the Enterprise plan
data_compliance:writeDelete invitee and meeting data for privacy requests. Needs the Enterprise plan
organizations:writeInvite members to the organization and remove them
outgoing_communications:readRead the emails and text messages Calendly sent. Needs the Enterprise plan

A :write scope includes the matching :read scope.

Calendly Personal Access Token

Any Calendly user can create a personal access token. For triggers that cover every member's meetings, and for routing form triggers, use a token from an organization owner or admin.

  1. In Calendly, open the Integrations page and select the API & Webhooks tile.
  2. Select Get a token now under Personal Access Tokens. If you already have a token, select Generate new token under Your personal access tokens.
  3. Name the token and check all six scope groups: Scheduling, User management, Contacts, Notetaker, Security & Compliance and Webhooks. That selects every scope in both tables above.
  4. Select Create Token. Calendly emails a verification code to the account's address. Enter it to finish.
  5. Select Copy token. Calendly doesn't show it again.
  6. In Helios, choose Calendly Personal Access Token and paste the token into Personal Access Token.
  7. Save.

Calendly revokes the token if the user's login email, password, or login method changes. Create a new token, enter it through Manage, and save.

Calendly records every change made with the token as the user who owns it.

Your own Calendly OAuth app

The developer account is separate from your Calendly user account.

  1. Go to developer.calendly.com, click Sign Up in the top right, and sign up with GitHub or Google.

  2. Create a new OAuth application. Choose web as the kind of application and Production as the environment.

  3. Set the redirect URI to:

    https://api.heliosapp.com/integrations/calendly/oauth_callback
  4. On the app's Scopes tab, check all six scope groups: Scheduling, User management, Contacts, Notetaker, Security & Compliance and Webhooks. To change the scopes later, open the app from My Apps and use the same tab.

  5. On the next step, copy the Client ID, Client Secret, and Webhook signing key. Calendly shows the secret and the signing key only once.

  6. In Helios, choose Your own Calendly OAuth app and enter the three values in Client ID, Client Secret, and Webhook Signing Key.

  7. Check Admin access if an organization owner or admin will approve the app and agents need the admin scopes.

  8. Save, then approve access in Calendly. Approve as an organization owner or admin for triggers that cover the whole organization.

Calendly signs every webhook of an OAuth app with the app's signing key, which is why Helios needs it. If you lose the signing key, ask Calendly at [email protected]. If you lose the client secret, Calendly can't show it again, so create a new app and enter its values through Manage.

Access tokens last two hours, and Helios renews them with the refresh token. Calendly issues a new refresh token on every renewal, and Helios stores it. Calendly revokes the tokens if the approving user's login email, password, or login method changes. Connect again if that happens, or after you change the app's scopes or Admin access.

Triggers

Calendly can start a Workflow when something happens in your account. Helios registers webhook subscriptions in Calendly when you save the connection, so there is nothing to set up in Calendly. They need the webhooks:write scope, and each event needs the read scope listed in Scopes.

When you delete the connection, Helios attempts to remove its webhooks. If cleanup fails, for example because the token was revoked or Calendly is unavailable, the connection is still deleted. Remove any remaining webhook subscriptions in Calendly.

Calendly webhooks need a paid Calendly plan: Standard, Teams, or Enterprise. On the Free plan, Calendly refuses to create the webhook. The connection still works for agents, but no events reach Helios.

What the webhooks cover depends on who connects:

  • An organization owner or admin: one webhook covers the whole organization. A second webhook covers the owner's or admin's own meeting recaps, because Calendly sends meeting recap events only to webhooks for one user.
  • Any other member: one webhook covers only that member's meetings, event types, contacts, and recaps. Routing form submissions aren't available, because Calendly sends them only to organization webhooks.

If the token lacks the read scope of some events, Helios registers the webhook for the other events. The trigger picker shows the events a connection can't receive as unavailable, with the reason. They stay unavailable until the connection changes. After you enter a token with the missing scopes, or after the user becomes an owner or admin, save the connection again.

EventDescriptionFilters
invitee.createdAn invitee booked a meeting or rescheduled to a new timeevent type, part of a reschedule
invitee.canceledA meeting was canceled or rescheduled away from its timeevent type, part of a reschedule
invitee_no_show.createdA host marked an invitee as a no-showevent type
invitee_no_show.deletedA host removed an invitee's no-show markevent type
routing_form_submission.createdSomeone submitted one of the organization's routing formsrouting form
event_type.createdAn event type was creatednone
event_type.updatedAn event type was changedevent type
event_type.deletedAn event type was deletedevent type
contact.createdA contact was added by a booking, by hand or through the APInone
contact.updatedA contact's details changednone
contact.deletedA contact was deletednone
meeting_recap.createdCalendly Notetaker finished a recap of the connected user's meetingnone
meeting_recap.updatedThe summary, action items, discussion or share link of the connected user's meeting recap changednone
meeting_recap.deletedA recap of the connected user's meeting was deletednone

All filters are optional, and you pick their values from a menu.

  • Event type matches meetings and no-shows of the event types you pick. On event_type.updated and event_type.deleted, it matches the event type that changed.
  • Part of a reschedule separates reschedules from new bookings and real cancellations. A reschedule sends invitee.canceled for the old time and invitee.created for the new one. Set it to No to skip both, or Yes to match only reschedules.
  • Routing form matches submissions of the forms you pick. The menu needs a connection from an organization owner or admin.

Deliveries are verified with the HMAC-SHA256 Calendly-Webhook-Signature header. Helios rejects deliveries signed more than three minutes ago.

Calendly's delivery rules: when deliveries fail, Calendly retries for up to 24 hours. If no delivery succeeds in that time, it disables the webhook. Save the connection again to create a new one.

An agent that books a meeting starts another invitee.created run, and an agent that cancels one starts another invitee.canceled run. An agent that changes a contact or an event type starts another contact.updated or event_type.updated run. Use the filters, or say in the prompt which events to ignore. See Guarding against events you don't want.

Check that it works

  • The connection: after you save, the connection's status shows Connected. Error means Calendly rejected the token. See Common errors.
  • A trigger:
    1. Add invitee.created to a workflow with no filters.
    2. Book a test meeting on one of your booking pages.
    3. Check that a run starts. Then open the connection in Helios and click Webhook events to see the event.

Common errors

What you seeCauseFix
The connection's status shows ErrorThe token was revoked, or the user's login email, password, or login method changedCreate a new token and enter it through Manage, or connect the OAuth app again
An invalid scope error on Calendly's approval pageThe OAuth app is missing a scope Helios asks forSelect every scope in both tables on the app, or uncheck Admin access, then connect again
An event shows as unavailable in the trigger pickerThe token lacks the event's read scope. For routing forms, the connected user isn't an organization owner or adminCreate a token with every scope, or add the scope to the OAuth app and connect again. For routing forms, connect as an owner or admin, or save the connection again after the user becomes one
Routing form triggers need a connection from a Calendly organization owner or adminThe connected user is a member, not an owner or adminConnect with an owner's or admin's token, or approve the OAuth app as one
Access token not found. Please complete the OAuth flow first.The OAuth approval wasn't finishedOpen the connection and connect again
403 with Insufficient scope when the agent calls CalendlyThe token lacks a scope the endpoint needs. The error names it in required_scopesCreate a token with every scope, or add the scope to the OAuth app and connect again. The admin scopes also need Admin access checked
403 Forbidden when the agent books a meetingThe account is on the Free planUpgrade to Standard or higher
403 Forbidden on the activity log, data deletion, or member invitationsThe connected user isn't an organization owner or admin, or the account isn't on the Enterprise planConnect as an owner or admin. The activity log and data deletion also need Enterprise
429 Too Many Requests when the agent books a meetingThe account reached its booking limitWait for the time in X-RateLimit-Reset
No run starts after an eventThe account is on the Free plan, Calendly disabled the webhook after failed deliveries, the connected user isn't an owner or admin and the meeting belongs to someone else, or the filters don't matchFix the cause, then save the connection again so Helios registers new webhooks. Test with no filters

Limits

  • Plans: the API works on every plan, including Free. Webhooks and the Scheduling API need Standard or higher. The activity log, data deletion, and outgoing communications need Enterprise.
  • Rate limits: Calendly allows 500 requests a minute per user on paid plans, and 50 on the Free plan. Bookings have their own limits, listed under Booking meetings. See Calendly's rate limits.

Last updated on