> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Calendly Integration for AI Agents & Workflows

> Calendly scheduling platform integration for managing events, invitees, event types, and scheduling links. Automate meeting scheduling workflows and access scheduling data.

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/zKB2qsP6Q61VNLfB/logos/calendly.svg?fit=max&auto=format&n=zKB2qsP6Q61VNLfB&q=85&s=a8ac528b0da1f16a1c5effa58313e805" alt="Calendly logo" width="72" height="72" data-path="logos/calendly.svg" />

## Overview

Add **Calendly** to any ModuleX agent or workflow. Scheduling-platform integration for Calendly: events, invitees, event types, scheduling links, availability, organization members, groups, and webhook subscriptions. All against `api.calendly.com`.

<Info>
  **Categories**: Scheduling & Events · Productivity · Calendar · Productivity · Meetings · **Auth**: OAuth 2.0, Personal Access Token · **Actions**: 11
</Info>

## Authentication

<Tabs>
  <Tab title="OAuth 2.0">
    ### OAuth 2.0 Authentication

    Authenticate using Calendly OAuth 2.0 flow

    #### Required Credentials

    | Field         | Description                | Required | Format |
    | ------------- | -------------------------- | -------- | ------ |
    | Client ID     | Calendly App Client ID     | Yes      | `-`    |
    | Client Secret | Calendly App Client Secret | Yes      | `-`    |

    #### OAuth Configuration

    * **Authorization URL**: `https://auth.calendly.com/oauth/authorize`
    * **Token URL**: `https://auth.calendly.com/oauth/token`
    * **Scopes**: `default`
  </Tab>

  <Tab title="Personal Access Token">
    ### Personal Access Token

    Authenticate using a Calendly Personal Access Token

    #### Required Credentials

    | Field                          | Description                         | Required | Format |
    | ------------------------------ | ----------------------------------- | -------- | ------ |
    | Calendly Personal Access Token | Your Calendly Personal Access Token | Yes      | `-`    |
  </Tab>
</Tabs>

## Available Actions

<AccordionGroup>
  <Accordion title="get_current_user — Get information about the currently authenticated Calendly user including name, email, and organization">
    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "resource": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Resource"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetCurrentUserOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_events — List scheduled events for a user or organization with filtering options">
    ### Parameters

    <ResponseField name="user" type="string">
      User URI to filter events. Defaults to the authenticated user.
    </ResponseField>

    <ResponseField name="organization" type="string">
      Organization URI to filter events
    </ResponseField>

    <ResponseField name="invitee_email" type="string">
      Filter by invitee email
    </ResponseField>

    <ResponseField name="status" type="string">
      Filter by event status ('active' or 'canceled')
    </ResponseField>

    <ResponseField name="min_start_time" type="string">
      Minimum start time (ISO 8601)
    </ResponseField>

    <ResponseField name="max_start_time" type="string">
      Maximum start time (ISO 8601)
    </ResponseField>

    <ResponseField name="count" type="integer">
      Number of results to return (max 100) (Default: `20`)
    </ResponseField>

    <ResponseField name="page_token" type="string">
      Token for pagination
    </ResponseField>

    <ResponseField name="sort" type="string">
      Sort order ('start\_time:asc' or 'start\_time:desc')
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        },
        "next_page_token": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Page Token"
        },
        "next_page": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Page"
        },
        "events": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Events",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListEventsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_event — Get detailed information about a specific scheduled event">
    ### Parameters

    <ResponseField name="event_uuid" type="string" required>
      The UUID of the event to retrieve
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "resource": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Resource"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetEventOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_event_invitees — List all invitees for a specific scheduled event">
    ### Parameters

    <ResponseField name="event_uuid" type="string" required>
      The UUID of the event
    </ResponseField>

    <ResponseField name="email" type="string">
      Filter by invitee email
    </ResponseField>

    <ResponseField name="status" type="string">
      Filter by invitee status ('active' or 'canceled')
    </ResponseField>

    <ResponseField name="count" type="integer">
      Number of results to return (max 100) (Default: `20`)
    </ResponseField>

    <ResponseField name="page_token" type="string">
      Token for pagination
    </ResponseField>

    <ResponseField name="sort" type="string">
      Sort order ('created\_at:asc' or 'created\_at:desc')
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        },
        "next_page_token": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Page Token"
        },
        "next_page": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Page"
        },
        "invitees": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Invitees",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListEventInviteesOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_event_types — List all event types for a user or organization">
    ### Parameters

    <ResponseField name="user" type="string">
      User URI to filter event types
    </ResponseField>

    <ResponseField name="organization" type="string">
      Organization URI to filter event types
    </ResponseField>

    <ResponseField name="active" type="boolean">
      Filter by active status
    </ResponseField>

    <ResponseField name="count" type="integer">
      Number of results to return (max 100) (Default: `20`)
    </ResponseField>

    <ResponseField name="page_token" type="string">
      Token for pagination
    </ResponseField>

    <ResponseField name="sort" type="string">
      Sort order ('name:asc' or 'name:desc')
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        },
        "next_page_token": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Page Token"
        },
        "next_page": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Page"
        },
        "event_types": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Event Types",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListEventTypesOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_scheduling_link — Create a single-use scheduling link for an event type">
    ### Parameters

    <ResponseField name="owner" type="string" required>
      URI or UUID of the event type
    </ResponseField>

    <ResponseField name="max_event_count" type="integer">
      Maximum events that can be scheduled with this link (Default: `1`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "booking_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Booking Url"
        },
        "owner": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Owner"
        },
        "owner_type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Owner Type"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateSchedulingLinkOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_invitee_no_show — Mark an invitee as a no-show for a scheduled event">
    ### Parameters

    <ResponseField name="invitee_uri" type="string" required>
      URI of the invitee to mark as no-show
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "resource": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Resource"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateInviteeNoShowOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_user_availability_schedules — List availability schedules for a specific user">
    ### Parameters

    <ResponseField name="user" type="string" required>
      URI or UUID of the user
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "schedules": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Schedules",
          "type": "array"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListUserAvailabilitySchedulesOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_organization_members — List members of an organization">
    ### Parameters

    <ResponseField name="organization" type="string">
      Organization URI. Defaults to the authenticated user's organization.
    </ResponseField>

    <ResponseField name="user" type="string">
      Filter by user URI
    </ResponseField>

    <ResponseField name="count" type="integer">
      Number of results to return (max 100) (Default: `20`)
    </ResponseField>

    <ResponseField name="page_token" type="string">
      Token for pagination
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        },
        "next_page_token": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Page Token"
        },
        "next_page": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Page"
        },
        "members": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Members",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListOrganizationMembersOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_groups — List groups within an organization">
    ### Parameters

    <ResponseField name="organization" type="string" required>
      Organization URI to list groups for
    </ResponseField>

    <ResponseField name="count" type="integer">
      Number of results to return (max 100) (Default: `20`)
    </ResponseField>

    <ResponseField name="page_token" type="string">
      Token for pagination
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        },
        "next_page_token": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Page Token"
        },
        "next_page": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Page"
        },
        "groups": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Groups",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListGroupsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_webhook_subscriptions — List webhook subscriptions for an organization or user">
    ### Parameters

    <ResponseField name="organization" type="string" required>
      Organization URI
    </ResponseField>

    <ResponseField name="scope" type="string" required>
      Scope ('organization' or 'user')
    </ResponseField>

    <ResponseField name="user" type="string">
      User URI (required if scope is 'user')
    </ResponseField>

    <ResponseField name="count" type="integer">
      Number of results to return (max 100) (Default: `20`)
    </ResponseField>

    <ResponseField name="page_token" type="string">
      Token for pagination
    </ResponseField>

    <ResponseField name="sort" type="string">
      Sort order ('created\_at:asc' or 'created\_at:desc')
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        },
        "next_page_token": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Page Token"
        },
        "next_page": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Page"
        },
        "webhooks": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Webhooks",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListWebhookSubscriptionsOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* Auto-resolves missing `user` / `organization` filters via a side
  call to `/users/me` (same as legacy). This costs one extra request
  per call but matches Calendly's expected pattern when the operator
  doesn't pass a filter explicitly.
* Count parameters are clamped to 100 (Calendly's max page size).
* `owner` / `user` parameters accept either a bare UUID or a full
  Calendly URI; bare UUIDs are promoted to the canonical
  `https://api.calendly.com/<resource>/<uuid>` form.
* Failures (non-2xx, exceptions) surface as `success=False` + `error`.

## Related integrations

<CardGroup cols={3}>
  <Card title="Cal.com" href="/integrations/tools/cal-com" />

  <Card title="ClickUp" href="/integrations/tools/clickup" />

  <Card title="Fellow" href="/integrations/tools/fellow" />
</CardGroup>

## Links

* [Calendly](https://calendly.com)
