Skip to main content
Bookings represent scheduled meetings created through your Cal.com event types. They contain all the information about the meeting, attendees, location, and status.

Overview

A booking is created when someone successfully schedules time through your booking page. Each booking includes:
  • Attendees: Guest information and contact details
  • Meeting details: Time, duration, location, and description
  • Status: Accepted, pending, cancelled, or rejected
  • References: Calendar events, video conferencing links
  • Metadata: Custom data and responses to booking questions
// Core booking structure from schema.prisma:870
model Booking {
  id           Int           @id @default(autoincrement())
  uid          String        @unique
  title        String
  description  String?
  startTime    DateTime
  endTime      DateTime
  status       BookingStatus @default(ACCEPTED)
  attendees    Attendee[]
  location     String?
  responses    Json?         // Booking form responses
  metadata     Json?         // Additional data
}

Booking Status

// From schema.prisma:862
enum BookingStatus {
  CANCELLED     // Booking was cancelled
  ACCEPTED      // Booking is confirmed
  REJECTED      // Booking was declined
  PENDING       // Awaiting confirmation
  AWAITING_HOST // Host needs to respond
}
Default status for instant bookings. Meeting is confirmed and calendar events are created.

Managing Bookings

View Bookings

Access your bookings from the main dashboard:
1

Navigate to Bookings

Click “Bookings” in the sidebar to view all upcoming and past meetings
2

Filter by Status

Use filters to view specific booking types: upcoming, pending, cancelled, or past
3

View Details

Click any booking to see full details, attendee information, and actions

Confirming Bookings

For event types with requiresConfirmation: true:
{
  requiresConfirmation: true,
  requiresConfirmationWillBlockSlot: true  // Prevent double-booking
}

Cancelling Bookings

// From schema.prisma:899-901
{
  cancellationReason: "Schedule conflict",
  cancelledBy: "[email protected]",
  status: "CANCELLED"
}
Cancellation reasons can be required based on event type settings. See requiresCancellationReason in Event Types.

Rescheduling

// From schema.prisma:906-908
{
  rescheduled: true,
  fromReschedule: "original_booking_uid",
  rescheduledBy: "[email protected]"
}
Rescheduling creates a new booking and marks the original as cancelled. The original booking UID is stored in fromReschedule.
For Round Robin events with rescheduleWithSameRoundRobinHost: true, the same host is automatically assigned to rescheduled bookings.

Booking Properties

Attendee Information

// From schema.prisma:845
model Attendee {
  id          Int     @id
  email       String
  name        String
  timeZone    String
  phoneNumber String?
  locale      String?  @default("en")
  noShow      Boolean? @default(false)
}

Payment Status

// From schema.prisma:895-896
{
  paid: false,
  payment: [{
    amount: 5000,      // in cents
    currency: "usd",
    success: true,
    externalId: "pi_abc123"  // Stripe payment ID
  }]
}

Recurring Bookings

// From schema.prisma:908
{
  recurringEventId: "rec_abc123",  // Links recurring instances
  // Multiple bookings share the same recurringEventId
}

Seats (Group Bookings)

// From schema.prisma:912
seatsReferences: BookingSeat[]

// Each seat represents one attendee in a group booking
model BookingSeat {
  id         Int
  bookingId  Int
  attendeeId Int
  referenceUid String  // Unique per seat
}

Booking References

Booking references link to external calendar events and video conferencing:
// From schema.prisma:818
model BookingReference {
  type          String  // "google_calendar", "zoom", etc.
  uid           String  // External event ID
  meetingId     String? // Video meeting ID
  meetingUrl    String? // Join URL
  meetingPassword String?
  credentialId  Int     // Which credential was used
}

Calendar Sync

Events are created in your connected calendars (Google, Outlook, etc.)

Video Conferencing

Zoom, Google Meet, or MS Teams links are automatically generated

Booking Metadata

// From schema.prisma:914
metadata: {
  // Video call settings
  videoCallUrl?: string;
  
  // App-specific data
  apps?: {
    stripe?: { paymentIntentId: string };
    salesforce?: { leadId: string };
  };
  
  // Custom tracking
  utm_source?: string;
  utm_campaign?: string;
}

Workflow Integration

Bookings trigger workflow automations:
// From schema.prisma:910
workflowReminders: WorkflowReminder[]

// Scheduled reminders for this booking
model WorkflowReminder {
  id         Int
  bookingUid String
  method     String  // EMAIL, SMS, WHATSAPP
  scheduled  Boolean
  scheduledDate DateTime
}
See Workflows for automation details.

No-Show Tracking

// From schema.prisma:855, 921
{
  noShowHost: false,     // Host didn't attend
  attendees: [{
    noShow: false        // Attendee didn't attend
  }]
}
No-show data can be used in Round Robin weight calculations when includeNoShowInRRCalculation: true.

Booking Limits

Event types can limit bookings per user:
// From EventType schema.prisma:271-272
{
  maxActiveBookingsPerBooker: 3,  // Max concurrent bookings
  maxActiveBookingPerBookerOfferReschedule: true  // Allow reschedule when limit reached
}

Internal Notes

// From schema.prisma:931
internalNote: BookingInternalNote[]

// Private notes visible only to hosts
model BookingInternalNote {
  id        Int
  bookingId Int
  note      String
  createdBy Int  // User who created the note
}
Internal notes are never visible to attendees and can be used for team coordination.

Booking Creation Sources

// From schema.prisma:932
enum CreationSource {
  API_V1  // Created via v1 API
  API_V2  // Created via v2 API
  WEBAPP  // Created through web interface
}

Common Workflows

Confirming Pending Bookings

1

Navigate to Pending

Filter bookings by “Pending” status
2

Review Details

Check attendee information and booking form responses
3

Accept or Reject

Click “Accept” to confirm or “Reject” with a reason
4

Attendee Notification

Attendees automatically receive email confirmation or rejection notice

Handling Cancellations

1

Open Booking

Click the booking from your list
2

Cancel Booking

Click “Cancel” and optionally provide a reason
3

Notifications Sent

All attendees receive cancellation emails automatically
4

Calendar Updated

Events are removed from all connected calendars

Rescheduling a Meeting

1

Attendee Initiates

Attendee clicks reschedule link in confirmation email
2

Select New Time

Attendee picks a new time from available slots
3

New Booking Created

Original booking is cancelled, new booking is created with fromReschedule reference

Best Practices

Use Internal Notes

Add context for team members about specific bookings

Track No-Shows

Mark no-shows to improve Round Robin distribution

Require Cancellation Reasons

Collect feedback to improve your booking process

Set Booking Limits

Prevent over-booking with per-user limits

Build docs developers (and LLMs) love