Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to Calendly

Scalekit connector
Open markdown

The Calendly connector lets your AI agent act in each user's Calendly account. Each user signs in to Calendly once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 64 tools.

Tools
64
What they doRead · write · destructive
41 · 15 · 841 read15 write8 destructive
Users sign in with
OAuth app
Scalekit's or your own

What you can do

  • View scheduled events: list and fetch meetings with their invitees, mark no-shows, and cancel events
  • Book meetings: check available times for an event type and book a meeting for an invitee
  • Share scheduling links: create single-use scheduling links and customized share pages for event types
  • Manage event types: create, update, and list event types, one-off event types, and their availability
  • Check availability: read users’ availability schedules and busy times within a date range
  • Manage contacts and recaps: create, update, and delete contacts, and read meeting recaps and transcripts

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Calendly connection

    In AgentKit > Connections, create a Calendly connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for Calendly, so you don't need to register an OAuth app. To show your own app on the consent screen, use your own credentials instead.

    Use your own OAuth app

    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 AgentKit.
      • 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 AgentKit > Connections 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.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'calendly'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Calendly:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'calendly_current_user_get',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • calendly_activity_log_listReturns a list of activity log entries for a Calendly organization.Read-only

    List Activity Log Entries

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

    Inputs

    organizationstringrequired
    Organization URI, e.g. https://api.calendly.com/organizations/{uuid}.
    actionstring
    Filter by action type (e.g. user.created, event_type.updated).
    actorstring
    Filter by actor user URI.
    countinteger
    Number of results per page (max 100).
    max_occurred_atstring
    Filter entries occurring before this time (ISO 8601).
    min_occurred_atstring
    Filter entries occurring at or after this time (ISO 8601).
    page_tokenstring
    Token for fetching the next page of results.
    sortstring
    Sort field and direction, e.g. occurred_at:asc or occurred_at:desc.
  • calendly_contact_getRetrieve a specific Calendly contact by UUID.Read-only

    Get Contact

    Retrieve a specific Calendly contact by UUID. Part of the Contacts API (shipped 2026-05-28).

    Inputs

    contact_uuidstringrequired
    The UUID of the contact to retrieve.
  • calendly_contacts_listList Calendly contacts, with optional filters by organization and email.Read-only

    List Contacts

    List Calendly contacts, with optional filters by organization and email. Part of the Contacts API (shipped 2026-05-28).

    Inputs

    countinteger
    Number of results per page (max 100).
    emailstring
    Filter contacts by exact email address.
    organizationstring
    Filter by organization URI, e.g. https://api.calendly.com/organizations/{uuid}.
    page_tokenstring
    Token for fetching the next page of results.
  • calendly_current_user_getReturns the profile of the currently authenticated Calendly user.Read-only

    Get Current User

    Returns the profile of the currently authenticated Calendly user.

    Inputs

    This tool takes no inputs.

  • calendly_event_invitee_getReturns the details of a specific invitee for a scheduled Calendly event.Read-only

    Get Event Invitee

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

    Inputs

    event_uuidstringrequired
    The UUID of the scheduled event.
    invitee_uuidstringrequired
    The UUID of the invitee.
  • calendly_event_invitees_listReturns a list of invitees for a specific scheduled Calendly event.Read-only

    List Event Invitees

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

    Inputs

    uuidstringrequired
    The UUID of the scheduled event.
    countinteger
    Number of results per page (max 100).
    emailstring
    Filter invitees by email address.
    page_tokenstring
    Token for fetching the next page of results.
    statusstring
    Filter invitees by status: active or canceled.
  • calendly_event_type_availability_schedules_listReturns a list of availability schedules for the specified Calendly event type.Read-only

    List Event Type Availability Schedules

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

    Inputs

    event_typestringrequired
    The URI of the event type, e.g. https://api.calendly.com/event_types/xxx.
    userstring
    The URI of the user to filter schedules by, e.g. https://api.calendly.com/users/xxx.
  • calendly_event_type_available_times_listReturns available scheduling times for a specific event type within a given date range.Read-only

    List Event Type Available Times

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

    Inputs

    end_timestringrequired
    End of the availability window in ISO 8601 format.
    event_typestringrequired
    Full URI of the event type, e.g. https://api.calendly.com/event_types/{uuid}.
    start_timestringrequired
    Start of the availability window in ISO 8601 format.

Workflows

Proxy API call
const result = await actions.request({
connectionName: 'calendly',
identifier: 'user_123',
path: '/users/me',
method: 'GET',
});
console.log(result);
Execute a tool
const result = await actions.executeTool({
connector: 'calendly',
identifier: 'user_123',
toolName: 'calendly_activity_log_list',
toolInput: {},
});
console.log(result);