// connections

Cal.com

Book, reschedule and cancel Cal.com meetings, find open slots, and manage event types, schedules, out-of-office and webhooks, cloud or self-hosted. Connect with an API key or OAuth.

21 mcp tools55 operationsvendor sync
rest
https://api.superagnt.com/v1/connections/calcom plus the vendor's own path, with your superagnt_ API key as Authorization: Bearer.
mcp
Tools named connection_calcom_* on https://mcp.superagnt.com/mcp, served once the account is connected.
billing
Cal.com bills your own account. Calls cost no superagnt_ data credits.
rate limit
5 requests a second, 120 a minute: the vendor's ceiling as the registry records it, for sizing bursts. Your plan's own limit is on Connections.
sync
Can copy 6 tables into your workspace database and keep them fresh: the tables.

The Cal.com connection lets an agent run scheduling on Cal.com, cloud or self-hosted. It finds open slots and books them, confirms or declines bookings that wait for the host, cancels, reschedules or reassigns meetings, marks no-shows, fetches Cal Video recordings and transcripts, manages event types, availability schedules and out-of-office periods, reads teams and organizations, and registers webhooks.

01

Setup

  1. Create a Cal.com API key. In Cal.com open Settings → Developer → API keys and create a key (cal_live_...). Set it to never expire: keys expire after 30 days by default, and an expired key stops every call until you paste a new one.
  2. Paste it. In the superagnt app open Integrations, pick Cal.com and paste the key. If Connect with Cal.com is offered, click Use API key instead to reach the key field. On a self-hosted Cal.com, also fill in Self-hosted API URL.

A Cal.com key has no scopes: it acts with your full Cal.com permissions.

API key or OAuth

An API key covers every tool. The Cal.com OAuth connection (Connect with Cal.com, where it is offered) requests only BOOKING_READ, BOOKING_WRITE, EVENT_TYPE_READ and PROFILE_READ, so it covers bookings, slots, event-type reads and your profile. These need an API key, and each tool's description says so:

  • user-level webhooks, and creating, changing or deleting event-type webhooks
  • schedules and out-of-office
  • creating, updating and deleting event types
  • updating your profile
  • teams and organizations

When a workspace has both, calls use the OAuth connection, except on a self-hosted connection.

Self-hosted Cal.com

If you run Cal.com yourself, enter your instance's API v2 base URL in Self-hosted API URL when you paste the key, and leave it blank for Cal.com cloud (https://api.cal.com/v2). On a self-host, API v2 is its own service, so this is the full base URL, path included, for example https://cal-api.yourcompany.com/v2.

  • It must be a public https:// address on the default port, with no query or login details. Private, internal and loopback addresses are refused when you save and again before every call.
  • superagnt_ checks the key with GET /me against that URL before it saves the connection.
  • A connection with a self-hosted URL always uses its pasted key, never a Cal.com OAuth connection, which reaches only Cal.com cloud.
  • To change the URL later, open the connection, enter the new URL (or tick Switch back to https://api.cal.com/v2) and paste the key again in the same save.
  • The open-source edition (Cal.diy) has no teams, organizations or routing forms, so those tools answer 404 there.

02

Plans and limits

  • Team tools need Cal.com's Teams plan and a team role. Organization tools need the Organizations plan and an org admin or owner. Use organizationId from getMe as orgId.
  • Routing-form responses are readable only on the Organizations plan. On Teams, form submissions reach you only as FORM_SUBMITTED webhooks.

03

Things to know

  • Booking tools take the booking uid, not its numeric id.
  • listBookings and listOrganizationBookings page by cursor: send each response's pagination.nextCursor back as cursor until pagination.hasMore is false. limit is 1 to 100 (default 50).
  • status on those two takes one value. Omit it to walk every status; for several, run one request per status and merge on the booking uid.
  • A booking's updatedAt is null until it first changes, so an incremental pull pairs afterUpdatedAt with an afterCreatedAt pass.
  • Most other lists (a team's members, bookings and schedules, the organization lists, webhooks and out-of-office) page with take and skip. take is at most 250 on most of them, and 1,000 for organization users.
  • Attendees, hosts, no-show flags, cancellation and reschedule details (rescheduledFromUid, rescheduledToUid) and booking-form answers come inline on every booking.
  • Rescheduling cancels the original booking and creates a new one with a new uid.
  • Reassigning works only on round-robin bookings.
  • Cal Video recording and transcript links expire after 1 hour, and Cal Video keeps recordings for 30 days.
  • The connection does not cover Cal.com's deprecated Platform endpoints, API key refresh, credits, or edits to a booking's attendees, guests and location.

04

Permissions

These defaults decide whether a superagnt_ agent runs a call or waits for a person (Permissions). Reads run without asking. Creating and changing event types, schedules and out-of-office entries run by default. Creating or changing a webhook and updating your profile ask by default. Creating, cancelling, rescheduling, confirming, declining and reassigning bookings, marking no-shows, asking an attendee to reschedule, and every delete always ask a person first, because they email attendees or cannot be undone.

05

Examples

Check the connection

who the key acts asbash
curl "https://api.superagnt.com/v1/connections/calcom/me" \
  -H "Authorization: Bearer $AGNTDATA_API_KEY"

List upcoming bookings

upcoming bookingsbash
curl "https://api.superagnt.com/v1/connections/calcom/bookings?status=upcoming&limit=25" \
  -H "Authorization: Bearer $AGNTDATA_API_KEY"

Find open slots for an event type

open slotsbash
curl "https://api.superagnt.com/v1/connections/calcom/slots?eventTypeId=12345&start=2026-11-02&end=2026-11-06&timeZone=America/Los_Angeles" \
  -H "Authorization: Bearer $AGNTDATA_API_KEY"

Create a booking

book a slotbash
curl -X POST "https://api.superagnt.com/v1/connections/calcom/bookings" \
  -H "Authorization: Bearer $AGNTDATA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "eventTypeId": 12345,
    "start": "2026-11-03T17:00:00Z",
    "attendee": {
      "name": "Jenny Rosen",
      "email": "jenny.rosen@example.com",
      "timeZone": "America/Los_Angeles"
    }
  }'

Register a webhook

send booking events to an inbound endpointbash
curl -X POST "https://api.superagnt.com/v1/connections/calcom/webhooks" \
  -H "Authorization: Bearer $AGNTDATA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "subscriberUrl": "https://api.superagnt.com/webhooks/ingest/<endpoint id>",
    "active": true,
    "triggers": ["BOOKING_CREATED", "BOOKING_RESCHEDULED", "BOOKING_CANCELLED"],
    "version": "2021-10-20"
  }'

06

API versions

Cal.com versions each endpoint through a cal-api-version header and quietly answers an older response shape for a wrong or missing value. superagnt_ sends the version each endpoint's reference page names, and 2026-02-25, the bookings default, everywhere else. A REST caller can send its own cal-api-version header to override it.

EndpointsVersion
GET /bookings (cursor paging)2026-05-01
GET /organizations/* (organization bookings cursor paging)2026-05-01
GET /teams/* (team event types)2026-06-12
GET /event-types, GET /event-types/*2024-06-14
POST /event-types, PATCH /event-types/*, DELETE /event-types/*2026-06-12
/schedules, /schedules/* (every method)2024-06-11
GET /slots2024-09-04

Event-type reads stay on 2024-06-14 while creates and updates use 2026-06-12. A bookingFields array sent on an update replaces the whole set, so read the event type first and send every question you want kept.

07

Receiving Cal.com webhooks

createWebhook sends the user's events, across every event type, to a URL, and createEventTypeWebhook does the same for one event type. Both need an API-key connection. Point one at a superagnt_ inbound webhook endpoint to trigger an agent. Pick from 28 triggers (BOOKING_CREATED, BOOKING_RESCHEDULED, BOOKING_CANCELLED, BOOKING_NO_SHOW_UPDATED, MEETING_ENDED, RECORDING_READY, FORM_SUBMITTED, OOO_CREATED and more), and:

  • Cal.com signs each delivery with X-Cal-Signature-256, a hex HMAC-SHA256 of the body under the webhook's secret, with no timestamp. An inbound endpoint does not check that header, so leave the endpoint's signature verification off and keep its URL secret. A receiver of your own should set secret, check the header and deduplicate deliveries.
  • Send version: "2021-10-20" and never set payloadTemplate, so every delivery has the standard shape.
  • The Cal Video no-show triggers (AFTER_HOSTS_CAL_VIDEO_NO_SHOW, AFTER_GUESTS_CAL_VIDEO_NO_SHOW) also need time and timeUnit.
  • Cal.com cloud delivers only to public https:// URLs.
  • Cal.com documents no delivery retries. Treat webhooks as best effort and reconcile with listBookings (afterUpdatedAt).

08

Sync

A Cal.com sync copies your bookings, their attendees, your event types and availability schedules (and, when you turn them on, your teams and every webhook delivery) into tables in your workspace database and keeps them fresh, so agents read local tables instead of calling Cal.com on every run. Turn it on from the Sync panel on the Cal.com connection page in the superagnt app. The panel previews the rows and webhook events against your plan before anything is created. How syncs work in general: Vendor sync.

How updates arrive. On an API-key connection the sync registers one Cal.com webhook of its own for booking changes (created, rescheduled, cancelled, requested, rejected, no-show, reassigned, location changed and paid), with a secret only the sync holds, and checks the signature on every delivery. A delivery makes the sync re-read that booking from the API, so the tables always hold the API's shape. Polling picks up bookings created or updated since the last pass, and once a day re-reads the last week of bookings, because a cancellation or no-show may not change a booking's updatedAt. Triggers with no booking behind them (meetings started and ended, form submissions, recordings and more) are opt-in and land only in calcom_events.

Plans and scope.

  • A connection made with OAuth syncs by polling only and cannot sync schedules or teams, because its grant covers bookings, event types and the profile. Connect with an API key for webhooks.
  • Event types are a filter on the sync: pick the ones whose bookings it copies.
  • The sync's calls share Cal.com's per-key rate limit with your agents' Cal.com tool calls, so it keeps well under it.
09// sync tables

What a Cal.com sync copies

A sync copies these tables into your workspace database and keeps them fresh, so an agent reads local rows instead of calling Cal.com on every run. Turn tables on and off from the Sync panel on the connection. Every table also carries _raw, _hash, _synced_at and _deleted_at. How syncs work: Vendor sync.

TableWhat it holdsDefault
calcom_bookings

Bookings

Every booking in the history window plus all upcoming ones, kept current by booking webhooks and a repair poll.on
calcom_booking_attendees

Booking attendees

One row per attendee (or seat) of each synced booking.on
calcom_event_types

Event types

The bookable event types on the account, re-read every hour.on
calcom_schedules

Schedules

Availability schedules, re-read daily. Not available on an OAuth connection.on
calcom_teams

Teams

Teams the account belongs to, re-read daily. Not available on an OAuth connection.off
calcom_events

Webhook events

One row per webhook delivery, including events with no other record (meetings started and ended, form submissions, recordings). Kept for 90 days by default.off
10// mcp tools

21 tools, one per resource and risk

MCP servers and agents on the grouped surface list Cal.com as these tools. Each takes an action, and the ones that work across record types an object. Every operation also keeps its own per-operation name, in the next table, which works on every server. How grouping works: Grouped tools.

ToolRiskActions
connection_calcom_slots_read

Find open Cal.com slots

Find open booking slots for an event type in a date range.

read
available
connection_calcom_event_types_read

Read Cal.com event types

List or get event types (the kinds of meeting people can book).

read
listget
connection_calcom_event_types_write

Create and edit Cal.com event types

Create an event type, or change one (title, slug, length, description, visibility).

write
createupdate
connection_calcom_event_types_delete

Delete Cal.com event types

Delete an event type by id. People can no longer book it.

destructive
delete
connection_calcom_schedules_read

Read Cal.com availability schedules

List the user's availability schedules, or get one (or the default one).

read
listgetdefault
connection_calcom_schedules_write

Create and edit Cal.com schedules

Create an availability schedule, or change one (name, time zone, hours, date overrides, default).

write
createupdate
connection_calcom_schedules_delete

Delete Cal.com schedules

Delete an availability schedule by id.

destructive
delete
connection_calcom_profile_read

Read the Cal.com user

Read the connected Cal.com user: id, time zone and preferences.

read
me
connection_calcom_profile_write

Update the Cal.com user

Change the connected user's name, email, time zone, time format, week start or default schedule.

write
update
connection_calcom_out_of_office_read

List Cal.com out-of-office entries

List the user's out-of-office entries.

read
list
connection_calcom_out_of_office_write

Add and edit Cal.com out-of-office entries

Add an out-of-office entry (dates, reason, notes, who bookings go to), or change one.

write
createupdate
connection_calcom_out_of_office_delete

Delete Cal.com out-of-office entries

Delete an out-of-office entry by id.

destructive
delete
connection_calcom_bookings_read

Read Cal.com bookings

List bookings (filter by status, attendee email or date range) or get one booking by uid.

read
listgetrecordingstranscriptscalendar_links
connection_calcom_bookings_write

Book and reschedule on Cal.com

Book an event type for an attendee at a start time (find open slots with connection_calcom_slots_read first), or move an existing booking to a new start time.

write
createreschedule
connection_calcom_booking_actions_write

Act on Cal.com bookings

Confirm or decline a booking that needs approval, ask the attendee to reschedule, mark the host or attendees absent, or reassign the booking (automatically, or to a user).

write
confirmdeclinerequest_reschedulemark_absentreassignreassign_to_user
connection_calcom_bookings_delete

Cancel Cal.com bookings

Cancel a booking by uid, with an optional reason. A cancelled booking cannot be restored.

destructive
cancel
connection_calcom_teams_read

Read Cal.com teams

List the user's teams, or read one team: its members, bookings, event types or schedules.

read
listgetmembershipsmembershipbookingsevent_typesschedules
connection_calcom_organization_read

Read the Cal.com organization

Read an organization's bookings, users, memberships, teams, routing forms, or one routing form's responses.

read
bookingsusersmembershipsteamsrouting_formsrouting_form_responses
connection_calcom_webhooks_read

Read Cal.com webhooks

List or get the user's webhooks, or one event type's.

read
listgetlist_event_typeget_event_type
connection_calcom_webhooks_write

Create and edit Cal.com webhooks

Create or change a webhook for the user, or for one event type (subscriber URL, triggers, secret, on/off).

write
createupdatecreate_event_typeupdate_event_type
connection_calcom_webhooks_delete

Delete Cal.com webhooks

Delete one of the user's webhooks, or one event type's.

destructive
deletedelete_event_type
11// operations

All 55 operations

Each operation is a REST path under https://api.superagnt.com/v1/connections/calcom and an MCP tool. The per-operation tool name is the one permissions, approvals and usage records use.

OperationMCP tool
GET/me

Get current user

connection_calcom_getmegrouped: connection_calcom_profile_read, action me
PATCH/me

Update current user

connection_calcom_updatemegrouped: connection_calcom_profile_write, action update
GET/bookings

List bookings

connection_calcom_listbookingsgrouped: connection_calcom_bookings_read, action list
POST/bookings

Create a booking

connection_calcom_createbookinggrouped: connection_calcom_bookings_write, action create
GET/bookings/{bookingUid}

Get a booking

connection_calcom_getbookinggrouped: connection_calcom_bookings_read, action get
POST/bookings/{bookingUid}/cancel

Cancel a booking

connection_calcom_cancelbookinggrouped: connection_calcom_bookings_delete, action cancel
POST/bookings/{bookingUid}/reschedule

Reschedule a booking

connection_calcom_reschedulebookinggrouped: connection_calcom_bookings_write, action reschedule
POST/bookings/{bookingUid}/request-reschedule

Request a reschedule

connection_calcom_requestbookingreschedulegrouped: connection_calcom_booking_actions_write, action request_reschedule
POST/bookings/{bookingUid}/confirm

Confirm a booking

connection_calcom_confirmbookinggrouped: connection_calcom_booking_actions_write, action confirm
POST/bookings/{bookingUid}/decline

Decline a booking

connection_calcom_declinebookinggrouped: connection_calcom_booking_actions_write, action decline
POST/bookings/{bookingUid}/mark-absent

Mark no-shows

connection_calcom_markbookingabsentgrouped: connection_calcom_booking_actions_write, action mark_absent
POST/bookings/{bookingUid}/reassign

Reassign to the next host

connection_calcom_reassignbookinggrouped: connection_calcom_booking_actions_write, action reassign
POST/bookings/{bookingUid}/reassign/{userId}

Reassign to a host

connection_calcom_reassignbookingtousergrouped: connection_calcom_booking_actions_write, action reassign_to_user
GET/bookings/{bookingUid}/recordings

List booking recordings

connection_calcom_listbookingrecordingsgrouped: connection_calcom_bookings_read, action recordings
GET/bookings/{bookingUid}/transcripts

List booking transcripts

connection_calcom_listbookingtranscriptsgrouped: connection_calcom_bookings_read, action transcripts
GET/bookings/{bookingUid}/calendar-links

Get add-to-calendar links

connection_calcom_getbookingcalendarlinksgrouped: connection_calcom_bookings_read, action calendar_links
GET/slots

Get available slots

connection_calcom_getavailableslotsgrouped: connection_calcom_slots_read, action available
GET/event-types

List event types

connection_calcom_listeventtypesgrouped: connection_calcom_event_types_read, action list
POST/event-types

Create an event type

connection_calcom_createeventtypegrouped: connection_calcom_event_types_write, action create
GET/event-types/{eventTypeId}

Get an event type

connection_calcom_geteventtypegrouped: connection_calcom_event_types_read, action get
PATCH/event-types/{eventTypeId}

Update an event type

connection_calcom_updateeventtypegrouped: connection_calcom_event_types_write, action update
DELETE/event-types/{eventTypeId}

Delete an event type

connection_calcom_deleteeventtypegrouped: connection_calcom_event_types_delete, action delete
GET/event-types/{eventTypeId}/webhooks

List event type webhooks

connection_calcom_listeventtypewebhooksgrouped: connection_calcom_webhooks_read, action list_event_type
POST/event-types/{eventTypeId}/webhooks

Create an event type webhook

connection_calcom_createeventtypewebhookgrouped: connection_calcom_webhooks_write, action create_event_type
GET/event-types/{eventTypeId}/webhooks/{webhookId}

Get an event type webhook

connection_calcom_geteventtypewebhookgrouped: connection_calcom_webhooks_read, action get_event_type
PATCH/event-types/{eventTypeId}/webhooks/{webhookId}

Update an event type webhook

connection_calcom_updateeventtypewebhookgrouped: connection_calcom_webhooks_write, action update_event_type
DELETE/event-types/{eventTypeId}/webhooks/{webhookId}

Delete an event type webhook

connection_calcom_deleteeventtypewebhookgrouped: connection_calcom_webhooks_delete, action delete_event_type
GET/schedules

List schedules

connection_calcom_listschedulesgrouped: connection_calcom_schedules_read, action list
POST/schedules

Create a schedule

connection_calcom_createschedulegrouped: connection_calcom_schedules_write, action create
GET/schedules/default

Get the default schedule

connection_calcom_getdefaultschedulegrouped: connection_calcom_schedules_read, action default
GET/schedules/{scheduleId}

Get a schedule

connection_calcom_getschedulegrouped: connection_calcom_schedules_read, action get
PATCH/schedules/{scheduleId}

Update a schedule

connection_calcom_updateschedulegrouped: connection_calcom_schedules_write, action update
DELETE/schedules/{scheduleId}

Delete a schedule

connection_calcom_deleteschedulegrouped: connection_calcom_schedules_delete, action delete
GET/me/ooo

List out-of-office entries

connection_calcom_listoutofofficegrouped: connection_calcom_out_of_office_read, action list
POST/me/ooo

Create an out-of-office entry

connection_calcom_createoutofofficegrouped: connection_calcom_out_of_office_write, action create
PATCH/me/ooo/{oooId}

Update an out-of-office entry

connection_calcom_updateoutofofficegrouped: connection_calcom_out_of_office_write, action update
DELETE/me/ooo/{oooId}

Delete an out-of-office entry

connection_calcom_deleteoutofofficegrouped: connection_calcom_out_of_office_delete, action delete
GET/teams

List teams

connection_calcom_listteamsgrouped: connection_calcom_teams_read, action list
GET/teams/{teamId}

Get a team

connection_calcom_getteamgrouped: connection_calcom_teams_read, action get
GET/teams/{teamId}/memberships

List team memberships

connection_calcom_listteammembershipsgrouped: connection_calcom_teams_read, action memberships
GET/teams/{teamId}/memberships/{membershipId}

Get a team membership

connection_calcom_getteammembershipgrouped: connection_calcom_teams_read, action membership
GET/teams/{teamId}/bookings

List team bookings

connection_calcom_listteambookingsgrouped: connection_calcom_teams_read, action bookings
GET/teams/{teamId}/event-types

List team event types

connection_calcom_listteameventtypesgrouped: connection_calcom_teams_read, action event_types
GET/teams/{teamId}/schedules

List team member schedules

connection_calcom_listteamschedulesgrouped: connection_calcom_teams_read, action schedules
GET/organizations/{orgId}/bookings

List organization bookings

connection_calcom_listorganizationbookingsgrouped: connection_calcom_organization_read, action bookings
GET/organizations/{orgId}/users

List organization users

connection_calcom_listorganizationusersgrouped: connection_calcom_organization_read, action users
GET/organizations/{orgId}/memberships

List organization memberships

connection_calcom_listorganizationmembershipsgrouped: connection_calcom_organization_read, action memberships
GET/organizations/{orgId}/teams

List organization teams

connection_calcom_listorganizationteamsgrouped: connection_calcom_organization_read, action teams
GET/organizations/{orgId}/routing-forms

List routing forms

connection_calcom_listorganizationroutingformsgrouped: connection_calcom_organization_read, action routing_forms
GET/organizations/{orgId}/routing-forms/{routingFormId}/responses

List routing form responses

connection_calcom_listroutingformresponsesgrouped: connection_calcom_organization_read, action routing_form_responses
GET/webhooks

List webhooks

connection_calcom_listwebhooksgrouped: connection_calcom_webhooks_read, action list
POST/webhooks

Create a webhook

connection_calcom_createwebhookgrouped: connection_calcom_webhooks_write, action create
GET/webhooks/{webhookId}

Get a webhook

connection_calcom_getwebhookgrouped: connection_calcom_webhooks_read, action get
PATCH/webhooks/{webhookId}

Update a webhook

connection_calcom_updatewebhookgrouped: connection_calcom_webhooks_write, action update
DELETE/webhooks/{webhookId}

Delete a webhook

connection_calcom_deletewebhookgrouped: connection_calcom_webhooks_delete, action delete