Back to Cal

Bookings API Reference

agents/skills/calcom-api/references/bookings.md

6.2.07.1 KB
Original Source

Bookings API Reference

Detailed documentation for booking-related endpoints in the Cal.com 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

http
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

json
{
  "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": "[email protected]",
          "timeZone": "America/New_York"
        }
      ],
      "hosts": [
        {
          "id": 456,
          "name": "Jane Smith",
          "email": "[email protected]"
        }
      ],
      "location": "https://cal.com/video/abc123",
      "meetingUrl": "https://cal.com/video/abc123",
      "metadata": {},
      "createdAt": "2024-01-10T08:00:00.000Z"
    }
  ]
}

Create a Booking

http
POST /v2/bookings

Request Body

json
{
  "start": "2024-01-15T10:00:00Z",
  "eventTypeId": 123,
  "attendee": {
    "name": "John Doe",
    "email": "[email protected]",
    "timeZone": "America/New_York",
    "language": "en"
  },
  "guests": ["[email protected]", "[email protected]"],
  "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

json
{
  "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

http
GET /v2/bookings/{bookingUid}

Path Parameters

ParameterTypeDescription
bookingUidstringUnique booking identifier

Response

Returns the full booking object with all details.

Cancel a Booking

http
POST /v2/bookings/{bookingUid}/cancel

Request Body

json
{
  "cancellationReason": "Schedule conflict"
}

Fields

FieldTypeRequiredDescription
cancellationReasonstringNoReason for cancellation

Reschedule a Booking

http
POST /v2/bookings/{bookingUid}/reschedule

Request Body

json
{
  "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:

http
POST /v2/bookings/{bookingUid}/confirm

Decline a Booking

http
POST /v2/bookings/{bookingUid}/decline

Request Body

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

Update Booking Location

http
PATCH /v2/bookings/{bookingUid}/location

Request Body

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

Mark Attendee as No-Show

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

Request Body

json
{
  "attendeeEmail": "[email protected]",
  "noShow": true
}

Reassign Booking

Reassign a booking to a different host:

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

Or to a specific user:

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

Get Booking References

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

http
GET /v2/bookings/{bookingUid}/references

Response

json
{
  "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