Skip to main content
Availability in Cal.com defines when you can accept bookings. You create schedules that specify your working hours, then assign those schedules to event types or use them as your default.

Overview

Availability consists of:
  • Schedules: Named sets of weekly working hours
  • Availability rules: Specific time ranges for each day
  • Date overrides: One-time exceptions for specific dates
  • Time zone handling: Automatic conversion between time zones
// From schema.prisma:969
model Schedule {
  id           Int            @id
  userId       Int
  name         String         // e.g., "Working Hours", "Limited Availability"
  timeZone     String?        // Optional: override user's time zone
  availability Availability[] // Time ranges for this schedule
}
You can create multiple schedules and switch between them for different event types or time periods.

Creating a Schedule

1

Navigate to Availability

Go to Settings → Availability from your dashboard
2

Create New Schedule

Click “New Schedule” and give it a descriptive name
3

Set Working Hours

Define your available time ranges for each day of the week
4

Save and Apply

Save the schedule and set it as default or assign to specific event types

Availability Rules

// From schema.prisma:984
model Availability {
  id          Int       @id
  userId      Int?      // User-level availability
  eventTypeId Int?      // Event type-specific availability
  scheduleId  Int?      // Part of a schedule
  days        Int[]     // [0,1,2,3,4] = Sun-Thu
  startTime   DateTime  @db.Time  // 09:00:00
  endTime     DateTime  @db.Time  // 17:00:00
  date        DateTime? @db.Date  // For date-specific overrides
}

Day Representation

Days are represented as integers:
{
  0: "Sunday",
  1: "Monday",
  2: "Tuesday",
  3: "Wednesday",
  4: "Thursday",
  5: "Friday",
  6: "Saturday"
}

Time Ranges

You can set multiple time ranges per day:
// Morning and afternoon availability
[
  {
    days: [1, 2, 3, 4, 5],  // Monday-Friday
    startTime: "09:00:00",
    endTime: "12:00:00"
  },
  {
    days: [1, 2, 3, 4, 5],  // Monday-Friday
    startTime: "14:00:00",  // Lunch break 12-2pm
    endTime: "17:00:00"
  }
]
Time ranges are stored in the schedule’s time zone (or user’s time zone if not specified). Cal.com automatically converts them for bookers in different time zones.

Schedule Priority

Availability is applied in this order:
1

Date-specific overrides

If an availability rule has a specific date, it takes highest priority
2

Event type availability

If the event type has custom availability (not linked to a schedule)
3

Event type schedule

If the event type is linked to a specific schedule
4

User default schedule

The user’s default schedule
// From User schema.prisma:432-433
user: {
  schedules: Schedule[],
  defaultScheduleId: 1  // Which schedule is default
}

// From EventType schema.prisma:232-233
eventType: {
  schedule: Schedule?,
  scheduleId: 1  // Override user's default for this event type
}

Date Overrides

Create one-time exceptions to your regular schedule:
// Date override for a specific day
{
  date: "2024-03-15",  // March 15, 2024
  days: [5],           // Friday (though date takes priority)
  startTime: "10:00:00",
  endTime: "14:00:00"  // Only available 10am-2pm this day
}

// Block a specific date entirely
{
  date: "2024-03-20",
  // No time ranges = completely unavailable
}
Date overrides are useful for holidays, vacation days, or days with different working hours.

Time Zones

Cal.com handles time zones at multiple levels:
// User's time zone (from User schema.prisma:417)
user: {
  timeZone: "America/New_York"
}

// Schedule-specific time zone (from Schedule schema.prisma:977)
schedule: {
  timeZone: "America/Los_Angeles"  // Override user's time zone
}

// Event type time zone settings (from EventType schema.prisma:195, 203-204)
eventType: {
  timeZone: "UTC",                    // Display in specific time zone
  lockTimeZoneToggleOnBookingPage: true,  // Prevent booker from changing
  lockedTimeZone: "America/Chicago"   // Force specific time zone
}

Time Zone Options

Default behavior. Your availability is in your time zone, shown to bookers in theirs.
user.timeZone: "America/New_York"
// Booker in London sees times converted to GMT

Restrictions and Limitations

Minimum Booking Notice

// From EventType schema.prisma:219
eventType: {
  minimumBookingNotice: 1440  // 24 hours in minutes
}
Slots within the minimum notice period won’t be shown.

Booking Window

// From EventType schema.prisma:196-202
eventType: {
  periodType: "RANGE",
  periodStartDate: "2024-03-01",
  periodEndDate: "2024-06-30",
  // Only accept bookings between March 1 and June 30
}

Buffer Time

// User-level buffer (from User schema.prisma:420)
user: {
  bufferTime: 15  // 15 minutes between all meetings
}

// Event type buffers (from EventType schema.prisma:220-221)
eventType: {
  beforeEventBuffer: 10,  // 10 minutes before
  afterEventBuffer: 5     // 5 minutes after
}

Before Buffer

Blocks time before the meeting for preparation

After Buffer

Blocks time after the meeting for wrap-up

Restriction Schedules

Restriction schedules limit when an event type can be booked:
// From EventType schema.prisma:285-286
eventType: {
  restrictionScheduleId: 5,
  restrictionSchedule: Schedule  // Only bookable during these times
}
Restriction schedules further constrain availability. The final availability is the intersection of:
  1. Your regular schedule
  2. The restriction schedule (if set)
Restriction schedules make availability MORE restrictive, never more open. Use them to limit certain event types to specific hours.

Instant Meeting Availability

For instant meetings, you can specify a separate schedule:
// From EventType schema.prisma:254-255
eventType: {
  isInstantEvent: true,
  instantMeetingScheduleId: 3,  // Separate schedule for instant availability
  instantMeetingSchedule: Schedule
}

Team Availability

For team event types, Cal.com aggregates individual schedules:

Collective Events

// From EventType schema.prisma:231
eventType: {
  schedulingType: "COLLECTIVE"
  // Only show times when ALL team members are available
}

Round Robin Events

eventType: {
  schedulingType: "ROUND_ROBIN"
  // Show times when ANY team member is available
  // Host-specific schedules respected
}
Team members can each have different schedules. Cal.com combines them based on the scheduling type.

Common Availability Patterns

Standard Business Hours

{
  name: "Business Hours",
  availability: [
    {
      days: [1, 2, 3, 4, 5],  // Monday-Friday
      startTime: "09:00:00",
      endTime: "17:00:00"
    }
  ]
}

Flexible Hours with Lunch Break

{
  name: "Flexible Hours",
  availability: [
    {
      days: [1, 2, 3, 4, 5],
      startTime: "08:00:00",
      endTime: "12:00:00"
    },
    {
      days: [1, 2, 3, 4, 5],
      startTime: "13:30:00",
      endTime: "18:30:00"
    }
  ]
}

Weekend Availability

{
  name: "Weekend Hours",
  availability: [
    {
      days: [0, 6],  // Sunday and Saturday
      startTime: "10:00:00",
      endTime: "16:00:00"
    }
  ]
}

Different Hours by Day

{
  name: "Variable Schedule",
  availability: [
    {
      days: [1, 3, 5],  // Mon, Wed, Fri
      startTime: "09:00:00",
      endTime: "17:00:00"
    },
    {
      days: [2, 4],     // Tue, Thu
      startTime: "10:00:00",
      endTime: "14:00:00"  // Shorter days
    }
  ]
}

Best Practices

Create Multiple Schedules

Have schedules for different seasons, work modes, or event types

Use Date Overrides

Block holidays and vacations in advance

Set Buffer Time

Prevent back-to-back meetings with appropriate buffers

Consider Time Zones

Think about your bookers’ time zones when setting hours

Troubleshooting

No Available Slots Shown

If bookers see no availability:
  1. Check schedule assignment: Verify event type has correct schedule
  2. Review availability rules: Ensure time ranges are set for the requested days
  3. Check calendar conflicts: Connected calendars might show you as busy
  4. Verify time zone: Schedule time zone might not match expected hours
  5. Check booking window: periodType settings might restrict dates
  6. Review minimum notice: Slots might be within minimum booking notice

Wrong Time Zone Displayed

  1. Check user time zone setting
  2. Review schedule-specific time zone
  3. Check if event type has locked time zone
  4. Verify useBookerTimezone setting
  • Event Types - Assign schedules to event types
  • Calendars - Calendar conflicts affect availability
  • Teams - Team availability for collective/round robin events

Build docs developers (and LLMs) love