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
}
Accepted
Pending
Awaiting Host
Rejected
Cancelled
Default status for instant bookings. Meeting is confirmed and calendar events are created.
Requires host confirmation. Slot may or may not be blocked depending on requiresConfirmationWillBlockSlot setting.
Special status when host action is required.
Host declined the booking request. Attendees are notified.
Either host or attendee cancelled the meeting.
Managing Bookings
View Bookings
Access your bookings from the main dashboard:
Navigate to Bookings
Click “Bookings” in the sidebar to view all upcoming and past meetings
Filter by Status
Use filters to view specific booking types: upcoming, pending, cancelled, or past
View Details
Click any booking to see full details, attendee information, and actions
Confirming Bookings
For event types with requiresConfirmation: true:
Event Type Config
Confirmation Flow
{
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
// 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
// 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
Navigate to Pending
Filter bookings by “Pending” status
Review Details
Check attendee information and booking form responses
Accept or Reject
Click “Accept” to confirm or “Reject” with a reason
Attendee Notification
Attendees automatically receive email confirmation or rejection notice
Handling Cancellations
Open Booking
Click the booking from your list
Cancel Booking
Click “Cancel” and optionally provide a reason
Notifications Sent
All attendees receive cancellation emails automatically
Calendar Updated
Events are removed from all connected calendars
Rescheduling a Meeting
Attendee Initiates
Attendee clicks reschedule link in confirmation email
Select New Time
Attendee picks a new time from available slots
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