Everything an AI agent can do with the Calendly API.

A reference guide for building AI agents: every method, how to authenticate, and the permissions each one needs.

Endpoints28
API versionv2
Last updated22 June 2026
Orientation

How the Calendly API works.

The Calendly API is how an app or AI agent works with a Calendly account: listing event types, reading scheduled events and their invitees, booking a meeting, canceling one, and managing the people in an organization. Access is granted through a personal access token or an OAuth token, and a set of scopes in a resource:action shape decides which areas a call can read or write. A booking or a cancellation can emit an event that Calendly delivers to a registered webhook.

28Endpoints
9Capability groups
18Read
10Write
12Permissions
Authentication
Calendly authenticates calls with a Bearer token in the Authorization header, either a personal access token for an internal app or an OAuth access token for an app acting on behalf of many users. Calendly uses OAuth 2.1 with authorization code and PKCE. The OAuth token response also returns the user's owner and organization URIs, which most endpoints need as filters.
Permissions
Access is governed by scopes in a resource:action shape, like event_types:read, scheduled_events:write, organizations:write, and webhooks:write, where a write scope implicitly includes its read. A new token grants nothing until scopes are requested and approved, while a legacy token from before scoped permissions keeps full access until it is refreshed. A missing scope returns a 403 Permission Denied.
Versioning
The v2 API has no dated version to pin and no version header. It is a single, continuously updated API, and new capabilities arrive additively through developer announcements, like the Scheduling API for booking by API and scoped OAuth permissions. There is no breaking-change version timeline to track.
Data model
Calendly is resource-oriented JSON over HTTPS at https://api.calendly.com, where every object is identified by a URI rather than a bare id. The core objects are users, organizations and their memberships, event types, scheduled events, and the invitees on them, with availability and scheduling-link helpers around booking. Lists are cursor-paginated, and a booking or cancellation can emit an event delivered by webhook.
Connect & authenticate

Connection & authentication methods.

How an app or AI agent connects to Calendly determines what it can reach. There is a route for making calls, a route for receiving events, and a hosted server that exposes Calendly tools to agents, and each is governed by the token behind it and the scopes that token carries.

Ways to connect

REST API

The REST API answers at https://api.calendly.com. It takes JSON request and response bodies, uses standard HTTP methods, and identifies resources by URI. Lists are cursor-paginated through a page_token, with a default page size of 20 and a maximum of 100. It is a single, continuously updated v2 API with no dated version header.

Best forConnecting an app or AI agent to Calendly.
Governed byThe token and the scopes it carries.
Docs ↗

Webhooks

Calendly POSTs an event to an HTTPS URL registered through the Create Webhook Subscription endpoint. A subscription is scoped to a user or the whole organization and chooses which events to receive, like invitee.created or invitee.canceled. The receiver verifies the Calendly-Webhook-Signature header against the subscription's signing key. Webhooks require a paid Standard, Teams, or Enterprise plan.

Best forReceiving Calendly events at an app or AI agent.
Governed byThe webhooks:write scope and the subscription's signing key.
Docs ↗

MCP server

A hosted Model Context Protocol server at https://mcp.calendly.com exposes Calendly tools to AI agents and MCP clients, mapped to the public v2 API. It authenticates with OAuth 2.1 authorization code plus PKCE using Dynamic Client Registration, so a client self-registers for a client_id at runtime rather than pasting in pre-provisioned credentials, and uses the mcp:scheduling:read and mcp:scheduling:write scopes. Tools cover retrieving event types, finding available times, changing availability, getting booking links, creating scheduled events, and canceling appointments.

Best forConnecting an AI agent to Calendly through MCP.
Governed byThe OAuth grant and the mcp:scheduling scopes it carries.
Docs ↗
Authentication

Personal access token

A personal access token is created in the account's API and Webhooks settings and acts as that single user. It is sent as a Bearer token in the Authorization header. A new token grants no API access until scopes are requested and approved; a legacy token issued before scoped permissions keeps full access until refreshed. It is the simpler choice for an internal integration used by one team.

TokenBearer personal access token
Best forInternal apps used by a single team.
Docs ↗

OAuth 2.0

OAuth lets an app act on behalf of any Calendly user who authorizes it. The user is sent to https://auth.calendly.com/oauth/authorize with a client_id, redirect_uri, response_type=code, and a space-separated list of scopes, and the returned code is exchanged for an access token. The token response also carries the user's owner and organization URIs. Calendly uses OAuth 2.1 with authorization code and PKCE.

TokenOAuth access token (Bearer)
Best forPublic apps serving many Calendly users.
Docs ↗
Capability map

What an AI agent can do in Calendly.

The Calendly API is split into areas an agent can act on, like event types, scheduled events, invitees, availability, and the organization's members. Each area has its own methods and its own scopes, and a write can book a meeting, cancel an event, or remove a person from the organization.

Endpoint reference

Every Calendly API method.

Filter by method, access, or permission, or search any path. Select a row for version detail, rate limits, the related webhook event, and the source.

MethodEndpointWhat it doesAccessPermissionVersion

Users

Read the current user and read a user by their unique reference.2

With OAuth, the owner and organization URIs also come back in the access token response.

Acts onuser
Permission (capability)users:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onuser
Permission (capability)users:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Event types

List event types for a user or organization, read a single event type, and create a one-off event type.3

Pass either a user or an organization parameter to set the scope of the list.

Acts onevent type
Permission (capability)event_types:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onevent type
Permission (capability)event_types:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

event_types:write also covers creating and updating standard event types.

Acts onevent type
Permission (capability)event_types:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Scheduled events

List and read scheduled events (meetings), and cancel one.3

Filter by user, organization, invitee email, status, and time range.

Acts onscheduled event
Permission (capability)scheduled_events:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onscheduled event
Permission (capability)scheduled_events:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Cancels the meeting and notifies invitees; rescheduling is not a direct API call.

Acts onscheduled event
Permission (capability)scheduled_events:write
VersionAvailable since the API’s base version
Webhook eventinvitee.canceled
Rate limitStandard limits apply

Invitees & booking

List and read the invitees on a scheduled event, and book a meeting by creating an invitee.3

Returns invitee names, emails, answers to custom questions, and tracking parameters.

Acts oninvitee
Permission (capability)scheduled_events:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Used to fetch the full invitee detail referenced from a webhook payload.

Acts oninvitee
Permission (capability)scheduled_events:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Part of the Scheduling API, generally available 16 Oct 2025; the Calendly account must be on a paid plan.

Acts oninvitee
Permission (capability)scheduled_events:write
VersionIntroduced 2025-10-16
Webhook eventinvitee.created
Rate limitStandard limits apply

Availability

List an event type's available times, a user's busy times, and a user's availability schedules.4

The range is capped at 7 days per request.

Acts onavailable time
Permission (capability)availability:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

The range is capped at 7 days per request.

Acts onbusy time
Permission (capability)availability:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onavailability schedule
Permission (capability)availability:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onavailability schedule
Permission (capability)availability:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply
Create a single-use scheduling link that an invitee can use once to book.1

An unused link expires after 90 days. Built on a chosen event type.

Acts onscheduling link
Permission (capability)scheduling_links:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Organization & members

List and read the organization's members, remove a member, and list, send, read, or revoke invitations.7

Filter by organization, user, or email.

Acts onorganization membership
Permission (capability)organizations:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onorganization membership
Permission (capability)organizations:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Removes the person's access to the organization.

Acts onorganization membership
Permission (capability)organizations:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onorganization invitation
Permission (capability)organizations:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Sends an invitation email to the address provided.

Acts onorganization invitation
Permission (capability)organizations:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onorganization invitation
Permission (capability)organizations:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Cancels an invitation that has not yet been accepted.

Acts onorganization invitation
Permission (capability)organizations:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Webhooks

List, read, create, and delete webhook subscriptions.4

Read-only.

Acts onwebhook subscription
Permission (capability)webhooks:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Webhooks require the Calendly account to be on a paid Standard, Teams, or Enterprise plan.

Acts onwebhook subscription
Permission (capability)webhooks:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Read-only.

Acts onwebhook subscription
Permission (capability)webhooks:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Stops delivery to the registered URL.

Acts onwebhook subscription
Permission (capability)webhooks:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Data compliance

Delete the stored data for one or more invitees.1

Permanently removes invitee data; an Enterprise-tier endpoint.

Acts oninvitee
Permission (capability)data_compliance:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply
No endpoints match those filters.
Webhooks

Webhook events.

Calendly can notify an app when something happens, like a meeting being booked or canceled, by posting an event to a webhook URL. A subscription is created through the API and scoped to a user or the whole organization, so an integration learns about activity without polling.

EventWhat it signalsTriggered by
invitee.createdFires when an invitee schedules a meeting, including a rescheduled booking. The payload carries the full invitee object: name, email, timezone, event URI, answers to custom questions, and tracking parameters./invitees
invitee.canceledFires when a scheduled event is canceled by the host or the invitee, and also for the old booking during a reschedule. The payload includes the cancellation details and who initiated it./scheduled_events/{uuid}/cancellation
routing_form_submission.createdFires when someone submits a routing form, whether or not they go on to book. The payload includes the form questions, the answers, and a reference to any resulting booking.In-app only
No events match that search.
Rate limits & pagination

Rate limits, pagination & request size.

Calendly limits how fast an app can call, by a per-token request rate measured each minute, and returns a 429 with a Retry-After header when the rate is exceeded.

Request rate

Calendly meters requests per access token, by a per-minute rate rather than a per-method cost. Free, Standard, and Teams plans allow 60 requests per minute per token, and Enterprise plans allow 120 per minute. Each response reports the current state in the X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers. Going over returns HTTP 429 with a Retry-After header that says how long to wait before retrying.

Pagination

List endpoints are cursor-based. The count parameter sets the page size, defaulting to 20 and capping at 100, and the response's pagination object returns a next_page_token. The token is passed back as page_token to fetch the following page, rather than building the URL by hand. The availability endpoints take a date range instead, capped at 7 days per request.

Request size

A list page returns at most 100 records, the maximum value of count. A single-use scheduling link that is never used expires after 90 days. Requests and responses are JSON.

Errors

Status codes & error handling.

The status codes an agent should handle, and what to do about each.

StatusCodeMeaningWhat to do
400Invalid ArgumentThe request was malformed or a parameter was invalid. The body carries a title, a message, and a details array naming each bad parameter.Read the details array, fix the named parameters, and resend.
401UnauthenticatedThe access token is missing, invalid, or expired. A token is revoked when the account's login email, password, or login method changes.Send a valid Bearer token, and refresh an expired OAuth token before retrying.
403Permission DeniedThe token is valid but lacks permission for the resource, for example a missing scope or an endpoint limited to organization admins or to Enterprise plans.Request the missing scope, or use a token whose user has the required role or plan.
404Not FoundThe resource does not exist or is not visible to this token.Confirm the resource URI and that the token's user can reach it.
429Too Many RequestsThe per-token request rate was exceeded. The response carries a Retry-After header.Wait for the Retry-After interval, then retry with backoff and a smoother request rate.
500Internal Server ErrorAn unexpected error on Calendly's side prevented the request from completing.Retry with backoff, and contact Calendly support if it persists.
Versioning & freshness

Version history.

Calendly runs a single, continuously updated version of its v2 API rather than dated versions, and ships new capabilities through developer announcements, like the Scheduling API and scoped permissions.

Version history

What changed, and when

Latest versionv2
v2Current version
API v2 (current, continuously updated)

Calendly's v2 API is a single, continuously updated REST API at https://api.calendly.com with no dated version header. New capabilities ship additively through developer announcements rather than versioned releases, so there is no breaking-change version to pin.

What changed
  • Scoped OAuth permissions and personal access tokens, in a resource:action shape, with legacy tokens migrated on refresh.
  • Hosted MCP server at https://mcp.calendly.com using OAuth 2.1 and Dynamic Client Registration.
2025-10-16Feature update
Scheduling API generally available

The Scheduling API became generally available, adding a Create Event Invitee endpoint that books a Calendly meeting by API with no redirect, iframe, or Calendly-hosted UI. The Calendly account must be on a paid plan to use it.

What changed
  • Create Event Invitee endpoint (POST /invitees) for booking by API.
  • Direct scheduling for apps, workflows, and AI assistants.
2025-08-21Feature update
Scheduling API announced (coming soon)

Calendly announced the upcoming Scheduling API and its Create Event Invitee endpoint, enabling programmatic scheduling of meetings on behalf of invitees, ahead of the October general availability.

What changed
  • Preview of the Create Event Invitee endpoint.
  • Programmatic booking on behalf of invitees.

There is no version header to pin; new endpoints and scopes are additive.

Calendly developer announcements ↗
Questions

Calendly API, answered.

Personal access token or OAuth, which should I use?+
A personal access token suits an internal app used by one team: it is created in the account's API and Webhooks settings and acts as that single user. OAuth is for a public app that acts on behalf of many Calendly users, sending each user through https://auth.calendly.com/oauth/authorize to grant the scopes the app asks for. Both are sent as a Bearer token, and both are revoked if the account's login email, password, or login method changes.
What Calendly plan do I need to use the API?+
Requests can be made on any plan, including Free, except for endpoints tied to higher tiers. Webhook subscriptions require the account to be on a paid Standard, Teams, or Enterprise plan, and some endpoints like the activity log and invitee data deletion are Enterprise-only. The Scheduling API for booking by API also requires the account to be on a paid plan.
Can an agent book or cancel a meeting through the API?+
Yes. The Scheduling API, generally available since 16 October 2025, books a meeting by creating an invitee on an event type, with no redirect or hosted page, which needs the scheduled_events:write scope. The same scope cancels a meeting through the cancellation endpoint. Rescheduling is not a single API call: the invitee resource and webhook payloads carry cancel and reschedule URLs for a user to act on.
How do scopes work, and why did a token stop having access?+
Scopes are in a resource:action shape, like event_types:read or webhooks:write, and a write scope includes its matching read. A newly created token has no API access until scopes are requested and approved, so a fresh token can return 403 until it is granted what it needs. A legacy token from before scoped permissions keeps full access until it is refreshed, at which point it is migrated to the scoped format.
What are the rate limits?+
Calendly meters requests per access token, per minute. Free, Standard, and Teams plans allow 60 requests per minute, and Enterprise plans allow 120. Each response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers, and going over returns HTTP 429 with a Retry-After header that says how long to wait.
How do I receive events instead of polling?+
Create a webhook subscription with the Create Webhook Subscription endpoint, scoped to a user or the whole organization, and choose the events to receive, like invitee.created or invitee.canceled. Calendly then POSTs a JSON payload to the registered URL when each event fires, and the Calendly-Webhook-Signature header confirms the payload came from Calendly. Webhooks need a paid Standard, Teams, or Enterprise plan.
How does pagination work?+
Lists are cursor-based. The count parameter sets the page size, defaulting to 20 and capping at 100, and each response returns a next_page_token in its pagination object. That token is passed back as page_token to fetch the next page, rather than constructing the URL by hand. The availability endpoints use a date range instead, capped at 7 days per request.
Related

More scheduling API guides for agents

What is Bollard AI?

Control what every AI agent can do in Calendly.

Bollard AI sits between a team's AI agents and Calendly. Grant each agent exactly the access it needs, read or write, resource by resource, and every call is checked and logged.

  • Set read, write, or full access per agent, never a shared Calendly token.
  • Denied by default, so an agent reaches only what has been explicitly allowed.
  • Every call recorded in plain English: who, what, where, and the decision.
Calendly
Scheduling Agent
View scheduled events ResourceOffReadFull use
Book meetings ActionOffReadFull use
Cancel events ActionOffReadFull use
Invitee data ResourceOffReadFull use
Per-agent access, set in Bollard AI, not in Calendly