calcom-api

Interact with the Cal.diy API v2 to manage scheduling, bookings, event types, availability, and calendars. Use this skill when building integrations that need to create or manage bookings, check availability, configure event types, or sync calendars with Cal.diy's scheduling infrastructure.

Install
npx skills add 'https://github.com/calcom/cal.diy/tree/main/agents/skills/calcom-api'
Download bundle ↓
main · 6bc4529Scanned 2026-09-17

Contributors

GitHub-linked commit authors for this SKILL.md at the saved revision. Co-authors and history before file renames are not included.

File history ↗
View on GitHub
← Back to SKILL.md

Bookings API Reference

Detailed documentation for booking-related endpoints in the Cal.diy API v2.

Endpoints Overview

MethodEndpointDescription
GET/v2/bookingsList bookings
POST/v2/bookingsCreate a booking
GET/v2/bookings/{bookingUid}Get a booking
POST/v2/bookings/{bookingUid}/cancelCancel a booking
POST/v2/bookings/{bookingUid}/rescheduleReschedule a booking
POST/v2/bookings/{bookingUid}/confirmConfirm a pending booking
POST/v2/bookings/{bookingUid}/declineDecline a booking
PATCH/v2/bookings/{bookingUid}/locationUpdate booking location
POST/v2/bookings/{bookingUid}/mark-absentMark attendee as no-show
POST/v2/bookings/{bookingUid}/reassignReassign booking to another host
GET/v2/bookings/{bookingUid}/referencesGet booking references

List Bookings

GET /v2/bookings

Query Parameters

ParameterTypeRequiredDescription
statusstringNoFilter by status: upcoming, recurring, past, cancelled, unconfirmed
attendeeEmailstringNoFilter by attendee email
attendeeNamestringNoFilter by attendee name
eventTypeIdnumberNoFilter by event type ID
eventTypeIdsstringNoComma-separated event type IDs
teamsIdsstringNoComma-separated team IDs
afterStartstringNoFilter bookings starting after this ISO 8601 date
beforeEndstringNoFilter bookings ending before this ISO 8601 date
sortStartstringNoSort by start time: asc or desc
sortEndstringNoSort by end time: asc or desc
sortCreatedstringNoSort by creation time: asc or desc
takenumberNoNumber of results (default: 10, max: 250)
skipnumberNoPagination offset

Response

{
  "status": "success",
  "data": [
    {
      "id": 12345,
      "uid": "abc123def456",
      "title": "30 Minute Meeting",
      "description": "Discussion about project",
      "start": "2024-01-15T10:00:00.000Z",
      "end": "2024-01-15T10:30:00.000Z",
      "status": "accepted",
      "eventTypeId": 123,
      "attendees": [
        {
          "name": "John Doe",
          "email": "john@example.com",
          "timeZone": "America/New_York"
        }
      ],
      "hosts": [
        {
          "id": 456,
          "name": "Jane Smith",
          "email": "jane@company.com"
        }
      ],
      "location": "https://cal.com/video/abc123",
      "meetingUrl": "https://cal.com/video/abc123",
      "metadata": {},
      "createdAt": "2024-01-10T08:00:00.000Z"
    }
  ]
}

Create a Booking

POST /v2/bookings

Request Body

{
  "start": "2024-01-15T10:00:00Z",
  "eventTypeId": 123,
  "attendee": {
    "name": "John Doe",
    "email": "john@example.com",
    "timeZone": "America/New_York",
    "language": "en"
  },
  "guests": ["guest1@example.com", "guest2@example.com"],
  "meetingUrl": "https://cal.com/team/meeting",
  "metadata": {
    "customField": "value"
  },
  "bookingFieldsResponses": {
    "notes": "Please prepare the quarterly report"
  }
}

Required Fields

FieldTypeDescription
startstringISO 8601 booking start time
eventTypeIdnumberID of the event type to book
attendee.namestringAttendee's full name
attendee.emailstringAttendee's email address
attendee.timeZonestringAttendee's timezone (IANA format)

Optional Fields

FieldTypeDescription
attendee.languagestringAttendee's preferred language
guestsarrayAdditional guest email addresses
meetingUrlstringCustom meeting URL
metadataobjectCustom metadata
bookingFieldsResponsesobjectResponses to custom booking fields

Response

{
  "status": "success",
  "data": {
    "id": 12345,
    "uid": "abc123def456",
    "title": "30 Minute Meeting",
    "start": "2024-01-15T10:00:00.000Z",
    "end": "2024-01-15T10:30:00.000Z",
    "status": "accepted",
    "eventTypeId": 123,
    "attendees": [...],
    "hosts": [...],
    "location": "https://cal.com/video/abc123"
  }
}

Get a Booking

GET /v2/bookings/{bookingUid}

Path Parameters

ParameterTypeDescription
bookingUidstringUnique booking identifier

Response

Returns the full booking object with all details.

Cancel a Booking

POST /v2/bookings/{bookingUid}/cancel

Request Body

{
  "cancellationReason": "Schedule conflict"
}

Fields

FieldTypeRequiredDescription
cancellationReasonstringNoReason for cancellation

Reschedule a Booking

POST /v2/bookings/{bookingUid}/reschedule

Request Body

{
  "start": "2024-01-16T14:00:00Z",
  "reschedulingReason": "Conflict with another meeting"
}

Fields

FieldTypeRequiredDescription
startstringYesNew booking start time (ISO 8601)
reschedulingReasonstringNoReason for rescheduling

Confirm a Booking

For event types that require confirmation:

POST /v2/bookings/{bookingUid}/confirm

Decline a Booking

POST /v2/bookings/{bookingUid}/decline

Request Body

{
  "reason": "Not available at this time"
}

Update Booking Location

PATCH /v2/bookings/{bookingUid}/location

Request Body

{
  "location": "https://zoom.us/j/123456789"
}

Mark Attendee as No-Show

POST /v2/bookings/{bookingUid}/mark-absent

Request Body

{
  "attendeeEmail": "john@example.com",
  "noShow": true
}

Reassign Booking

Reassign a booking to a different host:

POST /v2/bookings/{bookingUid}/reassign

Or to a specific user:

POST /v2/bookings/{bookingUid}/reassign/{userId}

Get Booking References

Get external references (calendar events, video meetings) for a booking:

GET /v2/bookings/{bookingUid}/references

Response

{
  "status": "success",
  "data": [
    {
      "type": "google_calendar",
      "uid": "calendar-event-id",
      "meetingUrl": "https://meet.google.com/abc-defg-hij"
    }
  ]
}

Booking Statuses

StatusDescription
acceptedBooking is confirmed
pendingAwaiting confirmation
cancelledBooking was cancelled
rejectedBooking was declined

Common Use Cases

Book a Meeting

  1. Get available slots: GET /v2/slots?eventTypeId=123&startTime=...&endTime=...
  2. Create booking: POST /v2/bookings with selected slot
  3. Store the booking UID for future operations

Reschedule Flow

  1. Get new available slots: GET /v2/slots?eventTypeId=123&startTime=...&endTime=...
  2. Reschedule: POST /v2/bookings/{uid}/reschedule with new start time

Cancel with Notification

  1. Cancel: POST /v2/bookings/{uid}/cancel with reason
  2. Attendees automatically receive cancellation emails
Referenced from SKILL.md