Skip to main content
Event Types are the foundation of Cal.com scheduling. They define the types of meetings you offer, including duration, availability, locations, and booking rules.

Overview

An Event Type represents a bookable meeting configuration. Each event type has:
  • Title and URL: Public-facing name and booking page slug
  • Duration: Meeting length (minimum 1 minute)
  • Location: Where the meeting takes place (video, phone, in-person)
  • Availability: When you’re available for this type of meeting
  • Booking rules: Minimum notice, buffers, limits, and confirmations
Event Types can be personal (owned by a user) or team-based (owned by a team).

Creating an Event Type

1

Navigate to Event Types

Go to the Event Types page from your dashboard
2

Click 'New Event Type'

Choose to create a new event type from scratch
3

Configure Basic Settings

Set the title, slug, description, and duration
// Event type basic structure from schema.prisma:156
model EventType {
  id          Int     @id @default(autoincrement())
  title       String  // e.g., "30 Minute Meeting"
  slug        String  // e.g., "30min"
  description String?
  length      Int     // Duration in minutes
  hidden      Boolean @default(false)
}
4

Set Availability

Link to a schedule or set custom availability for this event type

Scheduling Types

For team event types, Cal.com supports multiple scheduling patterns:

Round Robin

Distributes bookings evenly across team members based on availability.
// From schema.prisma:42
enum SchedulingType {
  ROUND_ROBIN @map("roundRobin")
  COLLECTIVE  @map("collective")
  MANAGED     @map("managed")
}
Features:
  • Weight-based distribution (assign more bookings to specific members)
  • Priority ordering
  • Host-specific schedules
  • Reassignment with same host on reschedule

Collective

Requires all team members to be available at the same time. Use cases: Panel interviews, group consultations

Managed Event Types

Template event types that create child instances for each team member.
Managed event types are useful for organizations that want to maintain consistent settings across all team members while allowing individual booking pages.

Key Configuration Options

Duration and Buffers

// From schema.prisma:168-221
{
  length: 30,              // Meeting duration (minutes)
  offsetStart: 0,          // Start offset (minutes)
  beforeEventBuffer: 15,   // Buffer before meeting
  afterEventBuffer: 10,    // Buffer after meeting
}

Booking Notice and Limits

{
  minimumBookingNotice: 120,      // Minimum minutes before booking (default: 2 hours)
  minimumRescheduleNotice: 120,   // Minimum notice for rescheduling
  
  // Booking limits (from schema.prisma:249)
  bookingLimits: {
    day: 3,    // Max bookings per day
    week: 10,  // Max bookings per week
    month: 30  // Max bookings per month
  },
  
  // Duration limits
  durationLimits: {
    day: 180,  // Max 3 hours of meetings per day
  }
}

Period Types

Control how far in advance people can book:
// From schema.prisma:48-53
enum PeriodType {
  UNLIMITED      // Book any time in the future
  ROLLING        // Book within X days from now
  ROLLING_WINDOW // Advanced rolling window
  RANGE          // Book within a specific date range
}

Locations

// Event types support multiple location types
{
  locations: [
    { type: "zoom" },
    { type: "phone", hostPhoneNumber: "+1234567890" },
    { type: "inPerson", address: "123 Main St" },
    { type: "link", link: "https://meet.example.com" }
  ]
}
Guests can choose from available locations when booking. Some locations require app integrations.

Confirmation and Approval

// From schema.prisma:205-209
{
  requiresConfirmation: true,               // Manual approval required
  requiresConfirmationWillBlockSlot: true,  // Block slot while pending
  requiresConfirmationForFreeEmail: true,   // Only free emails need approval
  requiresBookerEmailVerification: true     // Verify booker's email
}

Advanced Features

Recurring Events

// From schema.prisma:214
{
  recurringEvent: {
    freq: "weekly",      // daily, weekly, monthly
    count: 4,            // Number of occurrences
    interval: 1          // Repeat every X periods
  }
}

Seats (Group Events)

// From schema.prisma:222-230
{
  seatsPerTimeSlot: 10,           // Max attendees per slot
  seatsShowAttendees: true,       // Show other attendees
  seatsShowAvailabilityCount: true // Show remaining seats
}

Instant Meetings

// From schema.prisma:252-256
{
  isInstantEvent: true,
  instantMeetingExpiryTimeOffsetInSeconds: 90,
  instantMeetingScheduleId: 1,  // Schedule for instant availability
  instantMeetingParameters: ["duration", "location"]
}

Custom Fields

// From schema.prisma:189
customInputs: [
  {
    label: "Project Details",
    type: "textLong",
    required: true,
    placeholder: "Tell us about your project..."
  }
]

Workflows and Automation

Attach workflows to event types for automated reminders and actions:
// From schema.prisma:247
workflows: WorkflowsOnEventTypes[]
See the Workflows documentation for details.

Best Practices

Keep URLs Short

Use concise slugs like 30min or intro-call for easy sharing

Set Appropriate Buffers

Add buffer time between meetings to avoid back-to-back scheduling

Use Booking Limits

Prevent burnout by limiting daily/weekly bookings

Require Confirmation for High-Value Meetings

Manually approve important or long-duration meetings

Common Workflows

Sales Demo Event Type

{
  title: "Product Demo",
  length: 30,
  requiresConfirmation: true,
  minimumBookingNotice: 1440,  // 24 hours
  bookingFields: [
    { name: "company", type: "text", required: true },
    { name: "teamSize", type: "number", required: true }
  ],
  workflows: [emailReminderWorkflow]
}

Round Robin Support Event

{
  title: "Customer Support",
  length: 15,
  schedulingType: "ROUND_ROBIN",
  isRRWeightsEnabled: true,
  hosts: [
    { userId: 1, weight: 100, priority: 1 },
    { userId: 2, weight: 50, priority: 2 }  // Gets fewer bookings
  ]
}

Interview Event with Panel

{
  title: "Final Interview",
  length: 60,
  schedulingType: "COLLECTIVE",  // All hosts must be available
  requiresConfirmation: true,
  disableGuests: true,
  minimumBookingNotice: 2880  // 48 hours
}

Build docs developers (and LLMs) love