> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/calcom/cal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Event Types

> Create and configure event types to define how people can book time with you

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

<Note>
  Event Types can be personal (owned by a user) or team-based (owned by a team).
</Note>

## Creating an Event Type

<Steps>
  <Step title="Navigate to Event Types">
    Go to the Event Types page from your dashboard
  </Step>

  <Step title="Click 'New Event Type'">
    Choose to create a new event type from scratch
  </Step>

  <Step title="Configure Basic Settings">
    Set the title, slug, description, and duration

    ```typescript theme={null}
    // 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)
    }
    ```
  </Step>

  <Step title="Set Availability">
    Link to a schedule or set custom availability for this event type
  </Step>
</Steps>

## Scheduling Types

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

### Round Robin

Distributes bookings evenly across team members based on availability.

```typescript theme={null}
// 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.

<Warning>
  Managed event types are useful for organizations that want to maintain consistent settings across all team members while allowing individual booking pages.
</Warning>

## Key Configuration Options

### Duration and Buffers

```typescript theme={null}
// 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

```typescript theme={null}
{
  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:

```typescript theme={null}
// 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

```typescript theme={null}
// 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" }
  ]
}
```

<Note>
  Guests can choose from available locations when booking. Some locations require app integrations.
</Note>

### Confirmation and Approval

```typescript theme={null}
// 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

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

### Seats (Group Events)

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

### Instant Meetings

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

### Custom Fields

```typescript theme={null}
// 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:

```typescript theme={null}
// From schema.prisma:247
workflows: WorkflowsOnEventTypes[]
```

See the [Workflows](/features/workflows) documentation for details.

## Best Practices

<CardGroup cols={2}>
  <Card title="Keep URLs Short" icon="link">
    Use concise slugs like `30min` or `intro-call` for easy sharing
  </Card>

  <Card title="Set Appropriate Buffers" icon="clock">
    Add buffer time between meetings to avoid back-to-back scheduling
  </Card>

  <Card title="Use Booking Limits" icon="calendar-check">
    Prevent burnout by limiting daily/weekly bookings
  </Card>

  <Card title="Require Confirmation for High-Value Meetings" icon="shield-check">
    Manually approve important or long-duration meetings
  </Card>
</CardGroup>

## Common Workflows

### Sales Demo Event Type

```typescript theme={null}
{
  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

```typescript theme={null}
{
  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

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

## Related Features

* [Availability](/features/availability) - Configure when you're available
* [Bookings](/features/bookings) - Manage scheduled meetings
* [Workflows](/features/workflows) - Automate reminders and notifications
* [Teams](/features/teams) - Create team event types
