Cal.com
Find open slots, book meetings, and manage cal.com bookings.
Connect a cal.com account with an API key to schedule end to end: list its event types, find available slots in any time zone, create bookings (with custom booking-question answers), then reschedule, cancel, confirm or decline them, and read availability schedules.
Connect
| Credential field | Required | Where it comes from |
|---|---|---|
API key (API_KEY) | Yes | From cal.com → Settings → Security → API keys (cal_live_…). Sent as “Authorization: Bearer <key>”. |
Tools
| Tool | Access | What it does |
|---|---|---|
My profile (yekar.cal-com.me) | Read | The connected cal.com account's profile - username (needed for slug-based event-type and slot lookups), time zone, and default schedule. |
List event types (yekar.cal-com.list-event-types) | Read | The bookable event types of a cal.com user (the connected account by default). Returns the ids and slugs that Find slots and Create booking take; hidden event types appear only for the connected account itself. |
Get event type (yekar.cal-com.get-event-type) | Read | Full detail of one event type, including its custom booking questions (bookingFields). Call this before Create booking when an event type may have required questions - bookings missing a required answer are rejected. |
Find slots (yekar.cal-com.get-slots) | Read | Available booking slots for an event type in a date range - accounts for existing bookings, buffers and connected calendars. Identify the event type by eventTypeId, or by eventTypeSlug + username. Returns a map of date → start times in the given time zone. |
List bookings (yekar.cal-com.list-bookings) | Read | The connected account's bookings, filterable by status bucket, attendee, event type and time range. Paginated - pass nextCursor to continue. |
Get booking (yekar.cal-com.get-booking) | Read | One booking by uid - status, times, attendees, and the reschedule chain (a rescheduled booking points at its replacement via rescheduledToUid). |
List schedules (yekar.cal-com.list-schedules) | Read | The connected account's availability schedules (working-hours templates). For actually bookable times use Find slots - it also accounts for existing bookings, buffers and connected calendars. |
Create booking (yekar.cal-com.create-booking) | Write | Book a slot on an event type. Identify it by eventTypeId, or eventTypeSlug + username. Event types with required custom questions need bookingFieldsResponses (check Get event type first). A 'pending' result means the host must still confirm. |
Reschedule booking (yekar.cal-com.reschedule-booking) | Write | Move a booking to a new time. This creates a REPLACEMENT booking with a new uid - the old uid goes stale (it stays readable, pointing at the replacement via rescheduledToUid). Only accepted or pending bookings can be rescheduled. |
Cancel booking (yekar.cal-com.cancel-booking) | Write | Cancel a booking by uid. Attendees are notified by cal.com; cancelling an already-cancelled booking fails. |
Confirm booking (yekar.cal-com.confirm-booking) | Write | Accept a booking that is pending host confirmation (event types with a confirmation policy). Only the host's account can confirm. |
Decline booking (yekar.cal-com.decline-booking) | Write | Reject a booking that is pending host confirmation. Only the host's account can decline. |
Reserve slot (yekar.cal-com.reserve-slot) | Write | Hold a slot for ~5 minutes while finishing a multi-step booking (e.g. still collecting the attendee's details) so no one else takes it. The hold expires on its own; Create booking completes it. |
Notes
- Create an API key at cal.com → Settings → Security → API keys and paste it to connect - tools act as that cal.com account.
- Always pass the invitee's IANA time zone to Find slots - cal.com silently falls back to UTC without it and shows wrong times.
- Bookings are addressed by their string uid, never the numeric id. Rescheduling creates a NEW booking with a new uid - the old one goes stale.
- Before booking an event type that may have required custom questions, call Get event type and answer them via bookingFieldsResponses.