Skip to content
Talk to an Engineer Dashboard

Connect to Calendly. Access user profile, events, and scheduling workflows.

Calendly logo

Supports authentication: OAuth 2.0

Register your Scalekit environment with the Calendly connector so Scalekit handles the OAuth flow and token lifecycle for your users. Follow every step below from start to finish — by the end you will have a working connection.

  1. Create a Calendly OAuth application

    You need a Calendly OAuth app to get the Client ID and Client Secret that Scalekit will use to authorize your users.

    Go to the Calendly Developer Portal:

    • Open developer.calendly.com in your browser.
    • Click Log In at the top right and sign in with your Calendly account (the same account you use to log in to calendly.com).
    • After signing in, you land on the developer portal home page.

    Create a new app:

    • In the top navigation bar, click My Apps.

    • Click the Create New App button (top right of the page).

    • Fill in the form:

      FieldWhat to enter
      App NameA recognizable name for your integration, e.g. My AI Scheduling Agent
      App DescriptionBrief description, e.g. AI agent for managing scheduling
      Homepage URLYour app’s public URL. For testing you can use https://localhost
      Grant TypeSelect Authorization Code — this is required for OAuth 2.0
    • Leave Redirect URIs blank for now. You will add it in the next step.

    • Click Create App.

    After the app is created, Calendly takes you to the app’s OAuth Settings page. Keep this tab open.

    Create a new OAuth app in Calendly Developer Portal

  2. Copy the redirect URI from Scalekit

    Scalekit gives you a callback URL that Calendly will redirect users back to after they authorize your app. You need to register this URL in your Calendly OAuth app.

    In the Scalekit dashboard:

    • Go to app.scalekit.com and sign in.
    • In the left sidebar, click Agent Auth.
    • Click Create Connection.
    • Search for Calendly and click Create.
    • A connection details panel opens. Find the Redirect URI field — it looks like:
      https://<YOUR_ENV>.scalekit.cloud/sso/v1/oauth/conn_<ID>/callback
    • Click the copy icon next to the Redirect URI to copy it to your clipboard.

    Copy the redirect URI from Scalekit dashboard

  3. Register the redirect URI in Calendly

    Switch back to the Calendly Developer Portal tab you left open.

    • Make sure you are on the OAuth Settings page of your app.
    • Scroll down to the Redirect URIs section.
    • Click in the text box and paste the redirect URI you copied from Scalekit.
    • Click Add URI — the URI appears in the list above the input box.
    • Click Save Changes at the bottom of the page.

    Add the Scalekit redirect URI in Calendly OAuth Settings

  4. Enable OAuth scopes

    Scopes control which Calendly API resources your app can access on behalf of the user. You must enable the same scopes in your Calendly app that you will request in Scalekit.

    • On the OAuth Settings page, scroll to the Scopes section.

    • Check the box next to each scope you need:

      ScopeAccess grantedPlan required
      defaultUser profile, event types, scheduled events, availabilityAll plans
      activity_log:readAudit log entries (read-only)Enterprise only
    • For most integrations, checking default is sufficient.

    • Click Save Changes.

  5. Copy your Client ID and Client Secret

    Still on the OAuth Settings page in Calendly:

    • Scroll to the OAuth Credentials section at the top.
    • Client ID — this is shown in plain text. Click Copy ID to copy it.
    • Client Secret — click Reveal to show the secret, then copy it.

    Paste both values somewhere safe (a password manager or secrets vault). You will enter them into Scalekit in the next step.

  6. Add credentials in Scalekit

    Switch back to the Scalekit dashboard tab.

    • Go to Agent AuthConnections and click the Calendly connection you created in Step 2.

    • Fill in the credentials form:

      FieldValue
      Client IDPaste the Client ID from Step 5
      Client SecretPaste the Client Secret from Step 5
      PermissionsEnter the scopes you enabled in Step 4, e.g. default
    • Click Save.

    Add credentials in Scalekit dashboard

    Your Calendly connection is now configured. Scalekit will use these credentials to run the OAuth flow whenever a user connects their Calendly account.

Connect a user’s Calendly account and make API calls on their behalf — Scalekit handles OAuth and token management automatically.

Proxy API Calls

import { ScalekitClient } from '@scalekit-sdk/node';
import 'dotenv/config';
const connectionName = 'calendly'; // get your connection name from connection configurations
const identifier = 'user_123'; // your unique user identifier
// Get your credentials from app.scalekit.com → Developers → Settings → API Credentials
const scalekit = new ScalekitClient(
process.env.SCALEKIT_ENV_URL,
process.env.SCALEKIT_CLIENT_ID,
process.env.SCALEKIT_CLIENT_SECRET
);
const actions = scalekit.actions;
// Authenticate the user
const { link } = await actions.getAuthorizationLink({
connectionName,
identifier,
});
console.log('🔗 Authorize Calendly:', link);
process.stdout.write('Press Enter after authorizing...');
await new Promise(r => process.stdin.once('data', r));
// Make a request via Scalekit proxy
const result = await actions.request({
connectionName,
identifier,
path: '/users/me',
method: 'GET',
});
console.log(result);

Returns a list of activity log entries for a Calendly organization. Requires Enterprise plan.

NameTypeRequiredDescription
actionstringNoFilter by action type (e.g. user.created, event_type.updated).
actorstringNoFilter by actor user URI.
countintegerNoNumber of results per page (max 100).
max_occurred_atstringNoFilter entries occurring before this time (ISO 8601).
min_occurred_atstringNoFilter entries occurring at or after this time (ISO 8601).
organizationstringYesOrganization URI, e.g. https://api.calendly.com/organizations/&#123;uuid&#125;.
page_tokenstringNoToken for fetching the next page of results.
sortstringNoSort field and direction, e.g. occurred_at:asc or occurred_at:desc.

Returns the profile of the currently authenticated Calendly user.

Deletes all Calendly event data within the specified time range for compliance purposes. This is a destructive operation.

NameTypeRequiredDescription
end_timestringYesEnd of the time range for event data deletion in ISO 8601 format.
start_timestringYesStart of the time range for event data deletion in ISO 8601 format.

Deletes all Calendly invitee data for the specified email addresses for compliance purposes. This is a destructive operation.

NameTypeRequiredDescription
emailsarray<string>YesArray of invitee email addresses whose data should be deleted.

Returns the details of a specific invitee for a scheduled Calendly event.

NameTypeRequiredDescription
event_uuidstringYesThe UUID of the scheduled event.
invitee_uuidstringYesThe UUID of the invitee.

Returns a list of invitees for a specific scheduled Calendly event.

NameTypeRequiredDescription
countintegerNoNumber of results per page (max 100).
emailstringNoFilter invitees by email address.
page_tokenstringNoToken for fetching the next page of results.
statusstringNoFilter invitees by status: active or canceled.
uuidstringYesThe UUID of the scheduled event.

calendly_event_type_availability_schedules_list

Section titled “calendly_event_type_availability_schedules_list”

Returns a list of availability schedules for the specified Calendly event type.

NameTypeRequiredDescription
event_typestringYesThe URI of the event type, e.g. https://api.calendly.com/event_types/xxx.
userstringNoThe URI of the user to filter schedules by, e.g. https://api.calendly.com/users/xxx.

calendly_event_type_availability_schedules_update

Section titled “calendly_event_type_availability_schedules_update”

Updates the availability schedules (rules) for the specified Calendly event type.

NameTypeRequiredDescription
event_typestringYesThe URI of the event type whose availability schedules to update, e.g. https://api.calendly.com/event_types/xxx.
rulesarray<object>YesArray of availability rule objects. Each rule has type, intervals, and wday fields.
timezonestringNoTimezone for the availability rules (e.g. America/New_York).

Returns available scheduling times for a specific event type within a given date range.

NameTypeRequiredDescription
end_timestringYesEnd of the availability window in ISO 8601 format.
event_typestringYesFull URI of the event type, e.g. https://api.calendly.com/event_types/&#123;uuid&#125;.
start_timestringYesStart of the availability window in ISO 8601 format.

Creates a new event type in a Calendly organization for a specified host.

NameTypeRequiredDescription
colorstringNoHex color code for the event type, e.g. ‘#FF5733’.
descriptionstringNoOptional description of the event type.
durationintegerYesDuration of the event in minutes.
hoststringYesThe URI of the user who will host this event type, e.g. https://api.calendly.com/users/xxx.
namestringYesName of the event type.
organizationstringYesThe URI of the organization this event type belongs to, e.g. https://api.calendly.com/organizations/xxx.

Returns the details of a specific Calendly event type by its UUID.

NameTypeRequiredDescription
uuidstringYesThe UUID of the event type.

Returns a list of memberships (hosts) associated with the specified Calendly event type.

NameTypeRequiredDescription
countintegerNoNumber of results to return per page.
event_typestringYesThe URI of the event type, e.g. https://api.calendly.com/event_types/xxx.
page_tokenstringNoToken for paginating to the next set of results.

Updates an existing Calendly event type. Only the fields provided will be updated.

NameTypeRequiredDescription
colorstringNoHex color code for the event type, e.g. ‘#FF5733’.
descriptionstringNoUpdated description for the event type.
durationintegerNoUpdated duration of the event in minutes.
namestringNoUpdated name of the event type.
uuidstringYesThe UUID of the event type to update.

Returns a list of event types for a user or organization. Provide either user or organization URI.

NameTypeRequiredDescription
activebooleanNoIf true, only return active event types.
countintegerNoNumber of results to return per page (max 100).
organizationstringNoFilter by organization URI, e.g. https://api.calendly.com/organizations/&#123;uuid&#125;.
page_tokenstringNoToken for fetching the next page of results.
userstringNoFilter by user URI, e.g. https://api.calendly.com/users/&#123;uuid&#125;.

Returns a single Calendly group record by UUID.

NameTypeRequiredDescription
uuidstringYesThe UUID of the group to retrieve.

Returns a single Calendly group relationship record by UUID.

NameTypeRequiredDescription
uuidstringYesThe UUID of the group relationship to retrieve.

Returns a list of group relationships in the specified Calendly organization.

NameTypeRequiredDescription
countintegerNoNumber of results to return per page.
organizationstringYesThe URI of the organization whose group relationships to list, e.g. https://api.calendly.com/organizations/xxx.
page_tokenstringNoToken for paginating to the next set of results.

Returns a list of groups in the specified Calendly organization.

NameTypeRequiredDescription
countintegerNoNumber of results to return per page. Default is 20.
organizationstringYesThe URI of the organization whose groups to list, e.g. https://api.calendly.com/organizations/xxx.
page_tokenstringNoToken for paginating to the next set of results.
sortstringNoSort order for the results, e.g. ‘created_at:asc’ or ‘created_at:desc’.

Creates a new invitee for a scheduled Calendly event.

NameTypeRequiredDescription
emailstringYesEmail address of the invitee.
eventstringYesThe URI of the scheduled event to add this invitee to, e.g. https://api.calendly.com/scheduled_events/xxx.
namestringYesFull name of the invitee.
timezonestringNoIANA timezone string for the invitee, e.g. ‘America/New_York’.

Marks a specific invitee as a no-show for a scheduled Calendly event.

NameTypeRequiredDescription
inviteestringYesThe full URI of the invitee, e.g. https://api.calendly.com/scheduled_events/&#123;event_uuid&#125;/invitees/&#123;invitee_uuid&#125;.

Removes the no-show mark from an invitee on a scheduled Calendly event.

NameTypeRequiredDescription
uuidstringYesThe UUID of the invitee no-show record.

Returns a specific invitee no-show record by UUID.

NameTypeRequiredDescription
uuidstringYesThe UUID of the invitee no-show record.

Returns a list of meeting locations available in the specified Calendly organization or for a specific user.

NameTypeRequiredDescription
countintegerNoNumber of results to return per page.
organizationstringNoThe URI of the organization to filter locations by, e.g. https://api.calendly.com/organizations/xxx.
page_tokenstringNoToken for paginating to the next set of results.
userstringYesThe URI of the user to filter locations by, e.g. https://api.calendly.com/users/xxx.

Creates a one-off event type in Calendly with a specific date, host, and optional co-hosts.

NameTypeRequiredDescription
co_hostsarray<string>NoArray of user URIs for co-hosts, e.g. [‘https://api.calendly.com/users/xxx’].
date_settingobjectYesObject defining the date setting for the one-off event. Must include ‘type’ (e.g. ‘date_range’) and ‘start_date’/‘end_date’ or ‘date’.
descriptionstringNoOptional description for the one-off event type.
durationintegerYesDuration of the event in minutes.
hoststringYesThe URI of the user who will host this event type, e.g. https://api.calendly.com/users/xxx.
locationobjectNoOptional location object, e.g. {"kind": "physical", "location": "123 Main St"}.
namestringYesName of the one-off event type.

Returns the details of a specific Calendly organization by its UUID.

NameTypeRequiredDescription
uuidstringYesThe UUID of the organization.

Sends an invitation for a user to join a Calendly organization.

NameTypeRequiredDescription
emailstringYesEmail address of the user to invite.
uuidstringYesThe UUID of the organization.

Returns the details of a specific invitation sent to join a Calendly organization.

NameTypeRequiredDescription
org_uuidstringYesThe UUID of the organization that sent the invitation.
uuidstringYesThe UUID of the invitation to retrieve.

Revokes a pending invitation to a Calendly organization.

NameTypeRequiredDescription
invitation_uuidstringYesThe UUID of the invitation to revoke.
org_uuidstringYesThe UUID of the organization.

Returns a list of pending invitations for a Calendly organization.

NameTypeRequiredDescription
countintegerNoNumber of results per page (max 100).
emailstringNoFilter by invitee email address.
page_tokenstringNoToken for fetching the next page of results.
statusstringNoFilter by invitation status: pending, accepted, or declined.
uuidstringYesThe UUID of the organization.

Removes a user from a Calendly organization by deleting their membership.

NameTypeRequiredDescription
uuidstringYesThe UUID of the organization membership to remove.

Returns details of a specific organization membership by UUID.

NameTypeRequiredDescription
uuidstringYesThe UUID of the organization membership.

Returns a list of organization memberships. Filter by organization URI or user URI.

NameTypeRequiredDescription
countintegerNoNumber of results per page (max 100).
emailstringNoFilter by member email address.
organizationstringNoFilter by organization URI, e.g. https://api.calendly.com/organizations/&#123;uuid&#125;.
page_tokenstringNoToken for fetching the next page of results.
userstringNoFilter by user URI, e.g. https://api.calendly.com/users/&#123;uuid&#125;.

Returns a list of outgoing communications (emails and notifications) for the specified Calendly organization.

NameTypeRequiredDescription
countintegerNoNumber of results to return per page.
organizationstringYesThe URI of the organization whose outgoing communications to list, e.g. https://api.calendly.com/organizations/xxx.
page_tokenstringNoToken for paginating to the next set of results.
sortstringNoSort order for the results, e.g. ‘created_at:asc’ or ‘created_at:desc’.

Returns the details of a specific Calendly routing form by its UUID.

NameTypeRequiredDescription
uuidstringYesThe UUID of the routing form.

Returns the details of a specific routing form submission by its UUID.

NameTypeRequiredDescription
uuidstringYesThe UUID of the routing form submission.

calendly_routing_form_submission_get_by_uuid

Section titled “calendly_routing_form_submission_get_by_uuid”

Returns a single routing form submission by UUID.

NameTypeRequiredDescription
uuidstringYesThe UUID of the routing form submission to retrieve.

Returns a list of all routing form submissions across the specified Calendly organization.

NameTypeRequiredDescription
countintegerNoNumber of results.
formstringYesThe URI of the routing form to list submissions for.
page_tokenstringNoToken for next page.

Returns a list of routing forms for a Calendly organization.

NameTypeRequiredDescription
countintegerNoNumber of results per page (max 100).
organizationstringYesOrganization URI, e.g. https://api.calendly.com/organizations/&#123;uuid&#125;.
page_tokenstringNoToken for fetching the next page of results.

Returns a sample webhook payload for the specified event type, useful for testing webhook integrations.

NameTypeRequiredDescription
eventstringYesThe webhook event type to get sample data for, e.g. ‘invitee.created’.
organizationstringYesThe URI of the organization, e.g. https://api.calendly.com/organizations/xxx.
scopestringYesThe scope of the webhook, either ‘organization’ or ‘user’.
userstringNoThe URI of the user, required when scope is ‘user’, e.g. https://api.calendly.com/users/xxx.

Cancels a scheduled Calendly event. Optionally includes a reason for cancellation.

NameTypeRequiredDescription
reasonstringNoOptional reason for the cancellation.
uuidstringYesThe UUID of the scheduled event to cancel.

Returns the details of a specific scheduled event by its UUID.

NameTypeRequiredDescription
uuidstringYesThe UUID of the scheduled event.

Returns a list of scheduled events for a user or organization, with optional time range and status filters.

NameTypeRequiredDescription
countintegerNoNumber of results per page (max 100).
max_start_timestringNoFilter events starting before this time (ISO 8601).
min_start_timestringNoFilter events starting at or after this time (ISO 8601).
organizationstringNoFilter by organization URI, e.g. https://api.calendly.com/organizations/&#123;uuid&#125;.
page_tokenstringNoToken for fetching the next page of results.
sortstringNoSort field and direction, e.g. start_time:asc or start_time:desc.
statusstringNoFilter by event status: active or canceled.
userstringNoFilter by user URI, e.g. https://api.calendly.com/users/&#123;uuid&#125;.

Creates a single-use or limited-use scheduling link for a specified Calendly event type.

NameTypeRequiredDescription
max_event_countintegerYesMaximum number of events that can be booked using this scheduling link.
ownerstringYesThe URI of the event type that owns this scheduling link, e.g. https://api.calendly.com/event_types/xxx.
owner_typestringYesThe type of owner for the scheduling link. Use ‘EventType’.

Creates a shareable scheduling page for a Calendly event type with optional customizations like duration, date range, and availability rules.

NameTypeRequiredDescription
availability_ruleobjectNoOptional availability rule object to override default scheduling availability.
durationintegerNoOverride event duration in minutes for this share.
end_datestringNoThe end date (YYYY-MM-DD) after which the share will no longer accept bookings.
event_typestringYesThe URI of the event type to create a share for, e.g. https://api.calendly.com/event_types/xxx.
hide_locationbooleanNoWhether to hide the event location from the scheduling page.
max_booking_timeintegerNoMaximum number of days in the future that can be booked via this share.
namestringNoCustom name for this share.
start_datestringNoThe start date (YYYY-MM-DD) from which the share will accept bookings.

Returns a single availability schedule for a Calendly user by UUID.

NameTypeRequiredDescription
uuidstringYesThe UUID of the availability schedule to retrieve.

Returns a list of availability schedules for the specified Calendly user.

NameTypeRequiredDescription
userstringYesThe URI of the user whose availability schedules to list, e.g. https://api.calendly.com/users/xxx.

Returns a list of busy time blocks for a Calendly user within the specified time range.

NameTypeRequiredDescription
end_timestringYesEnd of the time range in ISO 8601 format.
start_timestringYesStart of the time range in ISO 8601 format.
userstringYesThe URI of the user whose busy times to list, e.g. https://api.calendly.com/users/xxx.

Returns the profile of a specific Calendly user by their UUID.

NameTypeRequiredDescription
uuidstringYesThe UUID of the user.

Creates a new webhook subscription to receive Calendly event notifications at a callback URL.

NameTypeRequiredDescription
eventsstringYesJSON array of event names to subscribe to, e.g. [“invitee.created”,“invitee.canceled”].
organizationstringYesOrganization URI to scope the subscription.
scopestringYesScope of the webhook: user or organization.
signing_keystringNoOptional signing key used to sign webhook payloads for verification.
urlstringYesThe HTTPS callback URL that will receive webhook payloads.
userstringNoUser URI if scope is user-level.

Deletes a Calendly webhook subscription, stopping future event notifications.

NameTypeRequiredDescription
uuidstringYesThe UUID of the webhook subscription to delete.

Returns the details of a specific Calendly webhook subscription.

NameTypeRequiredDescription
uuidstringYesThe UUID of the webhook subscription.

Returns a list of webhook subscriptions for a user or organization.

NameTypeRequiredDescription
countintegerNoNumber of results per page (max 100).
organizationstringNoFilter by organization URI, e.g. https://api.calendly.com/organizations/&#123;uuid&#125;.
page_tokenstringNoToken for fetching the next page of results.
scopestringNoFilter by webhook scope: user or organization.
userstringNoFilter by user URI, e.g. https://api.calendly.com/users/&#123;uuid&#125;.