Calendly Scheduling API

The Calendly Scheduling API (v2) is a RESTful API that allows developers to programmatically manage scheduling workflows. It provides endpoints for managing users, organizations, event types, scheduled events, invitees, and routing forms. The API uses JSON for request and response bodies, standard HTTP methods, and supports authentication via personal access tokens and OAuth 2.1.

OpenAPI Specification

calendly-scheduling-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Calendly Scheduling API
  description: >-
    The Calendly Scheduling API (v2) is a RESTful API that allows developers
    to programmatically manage scheduling workflows. It provides endpoints for
    managing users, organizations, event types, scheduled events, invitees,
    routing forms, availability schedules, and webhook subscriptions. The API
    uses JSON for request and response bodies, standard HTTP methods, and
    supports authentication via personal access tokens and OAuth 2.1.
    Developers can use it to create events on behalf of invitees, retrieve
    scheduling data, and integrate Calendly functionality directly into their
    applications.
  version: '2.0.0'
  contact:
    name: Calendly Developer Support
    url: https://developer.calendly.com/
  termsOfService: https://calendly.com/pages/terms
externalDocs:
  description: Calendly API Documentation
  url: https://developer.calendly.com/api-docs
servers:
  - url: https://api.calendly.com
    description: Production Server
tags:
  - name: Activity Log
    description: >-
      Endpoints for retrieving activity log entries for an organization.
  - name: Availability
    description: >-
      Endpoints for viewing available times for event types and managing
      user availability schedules.
  - name: Data Compliance
    description: >-
      Endpoints for handling data compliance requests such as deletion
      and retrieval of invitee data.
  - name: Event Types
    description: >-
      Endpoints for listing, retrieving, and managing event types that define
      the kinds of meetings users can schedule.
  - name: Groups
    description: >-
      Endpoints for listing and retrieving organization groups.
  - name: Invitees
    description: >-
      Endpoints for listing, retrieving, and creating invitees on scheduled
      events.
  - name: Organizations
    description: >-
      Endpoints for managing organization memberships, invitations, and
      organization-level settings.
  - name: Routing Forms
    description: >-
      Endpoints for listing and retrieving routing forms and their
      submissions.
  - name: Scheduled Events
    description: >-
      Endpoints for listing, retrieving, and canceling scheduled events
      (booked meetings).
  - name: Shares
    description: >-
      Endpoints for creating and managing shareable scheduling links.
  - name: Users
    description: >-
      Endpoints for retrieving user information and managing user accounts
      within Calendly.
  - name: Webhook Subscriptions
    description: >-
      Endpoints for creating, listing, retrieving, and deleting webhook
      subscriptions that receive real-time event notifications.
security:
  - bearerAuth: []
paths:
  /users/me:
    get:
      operationId: getCurrentUser
      summary: Get current user
      description: >-
        Returns information about the currently authenticated user, including
        their URI, name, email, scheduling URL, timezone, and organization
        membership.
      tags:
        - Users
      responses:
        '200':
          description: Successfully retrieved the current user
          content:
            application/json:
              schema:
                type: object
                properties:
                  resource:
                    $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /users/{uuid}:
    get:
      operationId: getUser
      summary: Get user
      description: >-
        Returns information about a specific user by their UUID, including
        name, email, scheduling URL, timezone, and organization.
      tags:
        - Users
      parameters:
        - $ref: '#/components/parameters/UserUuid'
      responses:
        '200':
          description: Successfully retrieved the user
          content:
            application/json:
              schema:
                type: object
                properties:
                  resource:
                    $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /event_types:
    get:
      operationId: listEventTypes
      summary: List event types
      description: >-
        Returns a paginated list of event types for the specified user or
        organization. Event types define the kinds of meetings that can be
        scheduled, including their duration, location, and availability.
      tags:
        - Event Types
      parameters:
        - name: user
          in: query
          description: >-
            The URI of the user whose event types to list. Required if
            organization is not specified.
          schema:
            type: string
            format: uri
        - name: organization
          in: query
          description: >-
            The URI of the organization whose event types to list. Required if
            user is not specified.
          schema:
            type: string
            format: uri
        - name: active
          in: query
          description: >-
            Filter by active status. When true, only active event types are
            returned.
          schema:
            type: boolean
        - name: sort
          in: query
          description: >-
            Sort order for results. Use name:asc or name:desc.
          schema:
            type: string
        - $ref: '#/components/parameters/Count'
        - $ref: '#/components/parameters/PageToken'
      responses:
        '200':
          description: Successfully retrieved the list of event types
          content:
            application/json:
              schema:
                type: object
                properties:
                  collection:
                    type: array
                    items:
                      $ref: '#/components/schemas/EventType'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /event_types/{uuid}:
    get:
      operationId: getEventType
      summary: Get event type
      description: >-
        Returns detailed information about a specific event type by its UUID,
        including its name, duration, scheduling URL, and configuration.
      tags:
        - Event Types
      parameters:
        - $ref: '#/components/parameters/EventTypeUuid'
      responses:
        '200':
          description: Successfully retrieved the event type
          content:
            application/json:
              schema:
                type: object
                properties:
                  resource:
                    $ref: '#/components/schemas/EventType'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /one_off_event_types:
    post:
      operationId: createOneOffEventType
      summary: Create one-off event type
      description: >-
        Creates a single-use event type that can be used for a one-time
        scheduling session. One-off event types are not listed on the users
        scheduling page.
      tags:
        - Event Types
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - name
                - host
                - duration
                - date_setting
              properties:
                name:
                  type: string
                  description: >-
                    The name of the one-off event type.
                host:
                  type: string
                  format: uri
                  description: >-
                    The URI of the user who will host the event.
                duration:
                  type: integer
                  description: >-
                    The duration of the event in minutes.
                  minimum: 1
                date_setting:
                  type: object
                  description: >-
                    Date range settings for the one-off event type.
                  properties:
                    type:
                      type: string
                      enum:
                        - date_range
                    start_date:
                      type: string
                      format: date
                    end_date:
                      type: string
                      format: date
                location:
                  type: object
                  description: >-
                    The location configuration for the event.
      responses:
        '201':
          description: Successfully created the one-off event type
          content:
            application/json:
              schema:
                type: object
                properties:
                  resource:
                    $ref: '#/components/schemas/EventType'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /event_type_available_times:
    get:
      operationId: listEventTypeAvailableTimes
      summary: List event type available times
      description: >-
        Returns a list of available time slots for a specific event type within
        a given date range. This endpoint is used to display bookable times to
        potential invitees.
      tags:
        - Availability
      parameters:
        - name: event_type
          in: query
          required: true
          description: >-
            The URI of the event type to check availability for.
          schema:
            type: string
            format: uri
        - name: start_time
          in: query
          required: true
          description: >-
            The start of the time range to check, in UTC format.
          schema:
            type: string
            format: date-time
        - name: end_time
          in: query
          required: true
          description: >-
            The end of the time range to check, in UTC format.
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Successfully retrieved available times
          content:
            application/json:
              schema:
                type: object
                properties:
                  collection:
                    type: array
                    items:
                      $ref: '#/components/schemas/AvailableTime'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /user_busy_times:
    get:
      operationId: listUserBusyTimes
      summary: List user busy times
      description: >-
        Returns a list of time periods during which a user is busy, based on
        their connected calendars. Useful for checking a users availability
        before scheduling.
      tags:
        - Availability
      parameters:
        - name: user
          in: query
          required: true
          description: >-
            The URI of the user whose busy times to retrieve.
          schema:
            type: string
            format: uri
        - name: start_time
          in: query
          required: true
          description: >-
            The start of the time range to check, in UTC format.
          schema:
            type: string
            format: date-time
        - name: end_time
          in: query
          required: true
          description: >-
            The end of the time range to check, in UTC format.
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Successfully retrieved busy times
          content:
            application/json:
              schema:
                type: object
                properties:
                  collection:
                    type: array
                    items:
                      $ref: '#/components/schemas/BusyTime'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /user_availability_schedules:
    get:
      operationId: listUserAvailabilitySchedules
      summary: List user availability schedules
      description: >-
        Returns a list of availability schedules for a specific user. Availability
        schedules define the recurring time windows when a user is available for
        meetings.
      tags:
        - Availability
      parameters:
        - name: user
          in: query
          required: true
          description: >-
            The URI of the user whose availability schedules to retrieve.
          schema:
            type: string
            format: uri
      responses:
        '200':
          description: Successfully retrieved availability schedules
          content:
            application/json:
              schema:
                type: object
                properties:
                  collection:
                    type: array
                    items:
                      $ref: '#/components/schemas/AvailabilitySchedule'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /user_availability_schedules/{uuid}:
    get:
      operationId: getUserAvailabilitySchedule
      summary: Get user availability schedule
      description: >-
        Returns a specific availability schedule by its UUID, including the
        timezone and rules that define available time windows.
      tags:
        - Availability
      parameters:
        - name: uuid
          in: path
          required: true
          description: >-
            The UUID of the availability schedule.
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved the availability schedule
          content:
            application/json:
              schema:
                type: object
                properties:
                  resource:
                    $ref: '#/components/schemas/AvailabilitySchedule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /scheduled_events:
    get:
      operationId: listScheduledEvents
      summary: List scheduled events
      description: >-
        Returns a paginated list of scheduled events for the specified user or
        organization. Scheduled events represent booked meetings with start and
        end times, locations, and associated invitees.
      tags:
        - Scheduled Events
      parameters:
        - name: user
          in: query
          description: >-
            The URI of the user whose scheduled events to list.
          schema:
            type: string
            format: uri
        - name: organization
          in: query
          description: >-
            The URI of the organization whose scheduled events to list.
          schema:
            type: string
            format: uri
        - name: invitee_email
          in: query
          description: >-
            Filter by invitee email address.
          schema:
            type: string
            format: email
        - name: status
          in: query
          description: >-
            Filter by event status.
          schema:
            type: string
            enum:
              - active
              - canceled
        - name: min_start_time
          in: query
          description: >-
            Only return events starting on or after this time, in UTC format.
          schema:
            type: string
            format: date-time
        - name: max_start_time
          in: query
          description: >-
            Only return events starting before this time, in UTC format.
          schema:
            type: string
            format: date-time
        - name: sort
          in: query
          description: >-
            Sort order for results. Use start_time:asc or start_time:desc.
          schema:
            type: string
        - $ref: '#/components/parameters/Count'
        - $ref: '#/components/parameters/PageToken'
      responses:
        '200':
          description: Successfully retrieved the list of scheduled events
          content:
            application/json:
              schema:
                type: object
                properties:
                  collection:
                    type: array
                    items:
                      $ref: '#/components/schemas/ScheduledEvent'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /scheduled_events/{uuid}:
    get:
      operationId: getScheduledEvent
      summary: Get scheduled event
      description: >-
        Returns detailed information about a specific scheduled event by its
        UUID, including start and end times, event type, location, and
        cancellation details if applicable.
      tags:
        - Scheduled Events
      parameters:
        - $ref: '#/components/parameters/ScheduledEventUuid'
      responses:
        '200':
          description: Successfully retrieved the scheduled event
          content:
            application/json:
              schema:
                type: object
                properties:
                  resource:
                    $ref: '#/components/schemas/ScheduledEvent'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /scheduled_events/{uuid}/cancellation:
    post:
      operationId: cancelScheduledEvent
      summary: Cancel scheduled event
      description: >-
        Cancels a scheduled event. Optionally include a reason for the
        cancellation. This will trigger invitee.canceled webhook events
        for all subscribed endpoints.
      tags:
        - Scheduled Events
      parameters:
        - $ref: '#/components/parameters/ScheduledEventUuid'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                reason:
                  type: string
                  description: >-
                    The reason for canceling the event.
                  maxLength: 10000
      responses:
        '200':
          description: Successfully canceled the scheduled event
          content:
            application/json:
              schema:
                type: object
                properties:
                  resource:
                    $ref: '#/components/schemas/Cancellation'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /scheduled_events/{event_uuid}/invitees:
    get:
      operationId: listEventInvitees
      summary: List event invitees
      description: >-
        Returns a paginated list of invitees for a specific scheduled event.
        Invitee data includes name, email, timezone, and answers to custom
        questions from the booking page.
      tags:
        - Invitees
      parameters:
        - name: event_uuid
          in: path
          required: true
          description: >-
            The UUID of the scheduled event.
          schema:
            type: string
        - name: status
          in: query
          description: >-
            Filter by invitee status.
          schema:
            type: string
            enum:
              - active
              - canceled
        - name: sort
          in: query
          description: >-
            Sort order for results. Use created_at:asc or created_at:desc.
          schema:
            type: string
        - $ref: '#/components/parameters/Count'
        - $ref: '#/components/parameters/PageToken'
      responses:
        '200':
          description: Successfully retrieved the list of invitees
          content:
            application/json:
              schema:
                type: object
                properties:
                  collection:
                    type: array
                    items:
                      $ref: '#/components/schemas/Invitee'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /scheduled_events/{event_uuid}/invitees/{invitee_uuid}:
    get:
      operationId: getEventInvitee
      summary: Get event invitee
      description: >-
        Returns detailed information about a specific invitee for a scheduled
        event, including their name, email, timezone, and answers to custom
        questions on the event booking page.
      tags:
        - Invitees
      parameters:
        - name: event_uuid
          in: path
          required: true
          description: >-
            The UUID of the scheduled event.
          schema:
            type: string
        - name: invitee_uuid
          in: path
          required: true
          description: >-
            The UUID of the invitee.
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved the invitee
          content:
            application/json:
              schema:
                type: object
                properties:
                  resource:
                    $ref: '#/components/schemas/Invitee'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /invitees:
    post:
      operationId: createEventInvitee
      summary: Create event invitee
      description: >-
        Creates a new invitee for a scheduled event, effectively booking a
        meeting on behalf of the invitee. This is the core endpoint of the
        Scheduling API, enabling programmatic event creation without redirects,
        iframes, or the Calendly-hosted UI. Requires a paid Calendly plan.
      tags:
        - Invitees
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - event_type
                - start_time
                - invitee
              properties:
                event_type:
                  type: string
                  format: uri
                  description: >-
                    The URI of the event type to book.
                start_time:
                  type: string
                  format: date-time
                  description: >-
                    The start time for the event in UTC. Must correspond to a
                    valid available time slot.
                invitee:
                  type: object
                  required:
                    - name
                    - email
                  properties:
                    name:
                      type: string
                      description: >-
                        The full name of the invitee.
                    email:
                      type: string
                      format: email
                      description: >-
                        The email address of the invitee.
                    timezone:
                      type: string
                      description: >-
                        The IANA timezone of the invitee.
                  description: >-
                    The invitee details for the booking.
                questions_and_answers:
                  type: array
                  items:
                    type: object
                    properties:
                      question_uuid:
                        type: string
                        description: >-
                          The UUID of the custom question.
                      answer:
                        type: string
                        description: >-
                          The answer to the custom question.
                  description: >-
                    Answers to custom questions on the event type booking page.
      responses:
        '201':
          description: Successfully created the invitee and booked the event
          content:
            application/json:
              schema:
                type: object
                properties:
                  resource:
                    $ref: '#/components/schemas/Invitee'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /webhook_subscriptions:
    get:
      operationId: listWebhookSubscriptions
      summary: List webhook subscriptions
      description: >-
        Returns a paginated list of webhook subscriptions for the specified
        user or organization. Each subscription defines the events to listen
        for and the callback URL to notify.
      tags:
        - Webhook Subscriptions
      parameters:
        - name: user
          in: query
          description: >-
            The URI of the user whose webhook subscriptions to list.
          schema:
            type: string
            format: uri
        - name: organization
          in: query
          required: true
          description: >-
            The URI of the organization whose webhook subscriptions to list.
          schema:
            type: string
            format: uri
        - name: scope
          in: query
          required: true
          description: >-
            The scope of the webhook subscription. Use user for subscriptions
            scoped to a specific user, or organization for organization-wide
            subscriptions.
          schema:
            type: string
            enum:
              - user
              - organization
        - $ref: '#/components/parameters/Count'
        - $ref: '#/components/parameters/PageToken'
      responses:
        '200':
          description: Successfully retrieved webhook subscriptions
          content:
            application/json:
              schema:
                type: object
                properties:
                  collection:
                    type: array
                    items:
                      $ref: '#/components/schemas/WebhookSubscription'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createWebhookSubscription
      summary: Create webhook subscription
      description: >-
        Creates a new webhook subscription to receive real-time notifications
        when scheduling events occur. You can subscribe to invitee.created,
        invitee.canceled, and routing_form_submission.created events.
      tags:
        - Webhook Subscriptions
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - url
                - events
                - organization
                - scope
              properties:
                url:
                  type: string
                  format: uri
                  description: >-
                    The URL where webhook payloads will be delivered.
                events:
                  type: array
                  items:
                    type: string
                    enum:
                      - invitee.created
                      - invitee.canceled
                      - routing_form_submission.created
                  description: >-
                    The list of event types to subscribe to.
                  minItems: 1
                organization:
                  type: string
                  format: uri
                  description: >-
                    The URI of the organization for the subscription.
                user:
                  type: string
                  format: uri
                  description: >-
                    The URI of the user for user-scoped subscriptions.
                scope:
                  type: string
                  enum:
                    - user
                    - organization
                  description: >-
                    The scope of the webhook subscription.
                signing_key:
                  type: string
                  description: >-
                    A secret key used to sign webhook payloads for
                    verification.
      responses:
        '201':
          description: Successfully created the webhook subscription
          content:
            application/json:
              schema:
                type: object
                properties:
                  resource:
                    $ref: '#/components/schemas/WebhookSubscription'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /webhook_subscriptions/{uuid}:
    get:
      operationId: getWebhookSubscription
      summary: Get webhook subscription
      description: >-
        Returns detailed information about a specific webhook subscription
        by its UUID, including the callback URL, subscribed events, and scope.
      tags:
        - Webhook Subscriptions
      parameters:
        - $ref: '#/components/parameters/WebhookSubscriptionUuid'
      responses:
        '200':
          description: Successfully retrieved the webhook subscription
          content:
            application/json:
              schema:
                type: object
                properties:
                  resource:
                    $ref: '#/components/schemas/WebhookSubscription'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteWebhookSubscription
      summary: Delete webhook subscription
      description: >-
        Deletes a webhook subscription by its UUID. Once deleted, the
        subscription will no longer receive event notifications.
      tags:
        - Webhook Subscriptions
      parameters:
        - $ref: '#/components/parameters/WebhookSubscriptionUuid'
      responses:
        '204':
          description: Successfully deleted the webhook subscription
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /organization_memberships:
    get:
      operationId: listOrganizationMemberships
      summary: List organization memberships
      description: >-
        Returns a paginated list of organization memberships. Each membership
        represents a users role and status within an organization.
      tags:
        - Organizations
      parameters:
        - name: organization
          in: query
          required: true
          description: >-
            The URI of the organization whose memberships to list.
          schema:
            type: string
            format: uri
        - name: user
          in: query
          description: >-
            Filter by user URI.
          schema:
            type: string
            format: uri
        - name: email
          in: query
          description: >-
            Filter by user email address.
          schema:
            type: string
            format: email
        - $ref: '#/components/parameters/Count'
        - $ref: '#/components/parameters/PageToken'
      responses:
        '200':
          description: Successfully retrieved organization memberships
          content:
            application/json:
              schema:
                type: object
                properties:
                  collection:
                    type: array
                    items:
                      $ref: '#/components/schemas/OrganizationMembership'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /organization_memberships/{uuid}:
    get:
      operationId: getOrganizationMembership
      summary: Get organization membership
      description: >-
        Returns detailed information about a spec

# --- truncated at 32 KB (85 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/calendly/refs/heads/main/openapi/calendly-scheduling-api-openapi.yml