Calendly Bookings & Availability
For salons, clinics and consultants who take bookings through Calendly: check open slots for an event type, see who booked and when, book an invitee directly, send a single-use scheduling link, and cancel or flag no-shows without opening the dashboard.
Connect this API to an AI agent Browse all specs
What you can do with Calendly Bookings & Availability via MCP
Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.
| Method | Path | Operation | Description |
|---|---|---|---|
| GET | /users/me |
getCurrentUser | Get your Calendly user and organization URIs |
| GET | /event_types |
listEventTypes | List the event types (services) a user or organization offers |
| GET | /event_types/{uuid} |
getEventType | Get one event type with its duration and booking settings |
| GET | /event_type_available_times |
listAvailableTimes | List open booking slots for an event type (up to 31 days) |
| GET | /user_busy_times |
listBusyTimes | List when a user is busy across Calendly and connected calendars (up to 7 days) |
| GET | /scheduled_events |
listScheduledEvents | List booked meetings by user, status, invitee email or date range |
| GET | /scheduled_events/{uuid} |
getScheduledEvent | Get one booked meeting with time, location and hosts |
| GET | /scheduled_events/{uuid}/invitees |
listEventInvitees | List the people booked into a meeting and their answers |
| GET | /scheduled_events/{event_uuid}/invitees/{invitee_uuid} |
getEventInvitee | Get one invitee with contact details and reschedule/cancel links |
| POST | /invitees |
bookInvitee | Book an invitee into an open slot (paid Calendly plans) |
| POST | /scheduling_links |
createSchedulingLink | Create a single-use booking link for an event type |
| POST | /scheduled_events/{uuid}/cancellation |
cancelScheduledEvent | Cancel a booked meeting with a reason (invitees are notified) |
| POST | /invitee_no_shows |
markInviteeNoShow | Mark an invitee as a no-show |
| GET | /routing_form_submissions |
listRoutingFormSubmissions | List answers submitted to a routing form |
Authentication
calendlyToken
Bearer token — sent as Authorization: Bearer <token>
Calendly personal access token (or an OAuth 2.0 access token) sent as Authorization: Bearer <token>.
How to get a credential
- Sign in to Calendly and open Integrations & apps > API and webhooks.
- Under Personal access tokens, click Generate new token, name it (e.g. "VX Agents") and select the scopes below.
- Copy the token now: Calendly shows it only once.
- Building for other Calendly users instead? Register an OAuth app at developer.calendly.com and use its access token the same way.
Permissions used
| Scope | Operations |
|---|---|
users:read |
getCurrentUser |
event_types:read |
listEventTypes, getEventType |
availability:read |
listAvailableTimes, listBusyTimes |
scheduled_events:read |
listScheduledEvents, getScheduledEvent, listEventInvitees, getEventInvitee |
scheduled_events:write |
bookInvitee, cancelScheduledEvent, markInviteeNoShow |
scheduling_links:write |
createSchedulingLink |
routing_forms:read |
listRoutingFormSubmissions |
Common errors
- 401 Unauthenticated: the token is missing, mistyped or revoked. Generate a new one and update the credential.
- 403 Permission Denied: the token lacks the scope, you asked for another user's or the organization's data without admin rights, or (for bookInvitee) the account is on the Free plan.
- 400 Invalid Argument: usually a missing
user/organizationURI, or a date range that is too long (31 days for available times, 7 days for busy times). - 429 Too Many Requests: back off and retry after a short pause.
Store the token as a VX Agents credential (bearer token) and never paste it into chat.
Usage guide
Setup
- Credential: a Calendly personal access token (bearer) with the scopes listed in the auth docs.
- Call
getCurrentUseronce and keepresource.uri(your user URI) andresource.current_organization. Most list calls need one of them as theuserororganizationquery value. Worth pinning as preset parameters. - Ids in paths are the last part of a URI: for
https://api.calendly.com/scheduled_events/ABC123theuuidisABC123.
Booking workflow
listEventTypes(user=<your user URI>,active=true) to find the service, e.g. "30 min consultation". Keep itsuri.listAvailableTimeswithevent_type,start_timeandend_time(31 days at most, start must be in the future) to get open slots.- To book the customer yourself:
bookInviteewithevent_type,start_time(one of the open slots) andinvitee(name,email,timezone). Paid plans only. Otherwise send them a link:createSchedulingLink(owner= event type URI,owner_type=EventType,max_event_count=1) and sharebooking_url. listScheduledEvents(user,min_start_time,max_start_time,status=active,sort=start_time:asc) for the agenda.listEventInviteesshows who booked and their form answers.- If a booking has to go:
cancelScheduledEventwith a shortreason. If the customer did not show up:markInviteeNoShowwith the invitee URI.
Ask the user to confirm before bookInvitee, createSchedulingLink, cancelScheduledEvent and markInviteeNoShow: each sends emails to the customer or changes their booking.
Good to know
- Times are UTC ISO 8601 (
2026-10-20T09:00:00.000000Z). Convert to the customer's time zone before showing them. listBusyTimescovers 7 days at most and includes connected calendars only when "Check for conflicts" is on.- Lists page with
count(max 100) andpagination.next_page_tokenpassed back aspage_token. - Viewing other members' events with
organizationneeds admin or owner rights; otherwise you get 403. listRoutingFormSubmissionsneeds the routing form URI inform.- Source: Calendly API reference (https://developer.calendly.com/api-docs), checked 2026-10-16.
How to use this spec
- Create a free VX Agents account (sandbox tools included).
- Open the marketplace and connect “Calendly Bookings & Availability” to an agent.
- Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.