> ## 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.

# Teams

> Collaborate with team members and create shared event types for group scheduling

Teams in Cal.com allow multiple users to collaborate on scheduling, share event types, and manage bookings together. Teams support various scheduling modes including round robin, collective (group) meetings, and managed event types.

## Overview

A team is a collection of members who can:

* Share event types (team meetings)
* Use round robin or collective scheduling
* Collaborate on bookings and workflows
* Have unified branding and settings

Teams are also the foundation for **Organizations** in Cal.com.

```typescript theme={null}
// From schema.prisma:569
model Team {
  id          Int       @id
  name        String    // Team display name
  slug        String?   // URL slug (e.g., acme-sales)
  members     Membership[]
  eventTypes  EventType[]
  isOrganization Boolean @default(false)  // Teams vs Organizations
  parentId    Int?      // For sub-teams within organizations
}
```

<Note>
  Organizations are special teams with `isOrganization: true`. They can contain sub-teams and have additional features.
</Note>

## Creating a Team

<Steps>
  <Step title="Navigate to Teams">
    Go to Settings → Teams from your dashboard
  </Step>

  <Step title="Create New Team">
    Click "Create Team" and enter team name and URL slug
  </Step>

  <Step title="Invite Members">
    Add team members by email address
  </Step>

  <Step title="Set Roles">
    Assign roles: Owner, Admin, or Member
  </Step>

  <Step title="Create Team Event Types">
    Add event types that belong to the team
  </Step>
</Steps>

## Team Membership

```typescript theme={null}
// From schema.prisma:760
model Membership {
  id       Int            @id
  teamId   Int
  userId   Int
  accepted Boolean        @default(false)
  role     MembershipRole
}

enum MembershipRole {
  MEMBER  // Can view team settings and bookings
  ADMIN   // Can manage team settings and members
  OWNER   // Full control over team
}
```

<CardGroup cols={3}>
  <Card title="Member" icon="user">
    View team bookings and participate in team events
  </Card>

  <Card title="Admin" icon="user-shield">
    Manage team settings, event types, and workflows
  </Card>

  <Card title="Owner" icon="crown">
    Full control including billing and deletion
  </Card>
</CardGroup>

### Inviting Team Members

<Steps>
  <Step title="Go to Team Settings">
    Navigate to your team's settings page
  </Step>

  <Step title="Click 'Invite Member'">
    Enter the email address of the person to invite
  </Step>

  <Step title="Set Role">
    Choose Member, Admin, or Owner
  </Step>

  <Step title="Send Invitation">
    Member receives email invitation and must accept
  </Step>
</Steps>

```typescript theme={null}
// Membership starts as not accepted
{
  accepted: false,  // True after invitation is accepted
  role: "MEMBER"
}
```

## Team Event Types

Team event types belong to the team rather than an individual:

```typescript theme={null}
// From EventType schema.prisma:180-181
eventType: {
  teamId: 1,        // Owned by team
  userId: null,     // Not owned by individual
  team: Team
}
```

### Scheduling Types

<Tabs>
  <Tab title="Round Robin">
    Distributes bookings among team members based on availability and weights.

    ```typescript theme={null}
    // From EventType schema.prisma:231
    eventType: {
      schedulingType: "ROUND_ROBIN",
      isRRWeightsEnabled: true,
      hosts: [
        { userId: 1, weight: 100, priority: 1 },
        { userId: 2, weight: 50, priority: 2 }  // Gets 50% as many bookings
      ]
    }
    ```

    **Features**:

    * Weight-based distribution
    * Priority ordering
    * Host-specific schedules and locations
    * No-show tracking integration
  </Tab>

  <Tab title="Collective">
    Requires all hosts to be available at the same time.

    ```typescript theme={null}
    eventType: {
      schedulingType: "COLLECTIVE",
      hosts: [
        { userId: 1, isFixed: true },
        { userId: 2, isFixed: true }
      ]
    }
    ```

    **Use cases**:

    * Panel interviews
    * Group consultations
    * Team meetings with required attendees
  </Tab>

  <Tab title="Managed">
    Template that creates child event types for each team member.

    ```typescript theme={null}
    eventType: {
      schedulingType: "MANAGED",
      children: EventType[]  // One per team member
    }
    ```

    **Use cases**:

    * Organization-wide event templates
    * Consistent settings across team
    * Individual booking pages with shared config
  </Tab>
</Tabs>

## Round Robin Configuration

### Host Settings

```typescript theme={null}
// From Host schema.prisma:61
model Host {
  userId     Int
  eventTypeId Int
  isFixed    Boolean  @default(false)  // Must be in every booking
  priority   Int?     // Lower number = higher priority
  weight     Int?     // Distribution weight (100 = standard)
  scheduleId Int?     // Host-specific schedule
}
```

<Note>
  Hosts with `isFixed: true` must be available for a slot to be shown. Non-fixed hosts are optional and assigned based on weight and priority.
</Note>

### Weights and Priority

```typescript theme={null}
// Example round robin configuration
hosts: [
  {
    userId: 1,
    priority: 1,      // Checked first
    weight: 100,      // Standard distribution
    isFixed: false
  },
  {
    userId: 2,
    priority: 2,      // Checked second
    weight: 150,      // Gets 50% more bookings
    isFixed: false
  },
  {
    userId: 3,
    priority: 1,      // Same priority as user 1
    weight: 50,       // Gets 50% fewer bookings
    isFixed: true     // Must be in every booking
  }
]
```

### Round Robin Features

```typescript theme={null}
// From EventType schema.prisma:257-267
eventType: {
  assignAllTeamMembers: true,              // Auto-assign all team members as hosts
  assignRRMembersUsingSegment: true,       // Filter hosts by attributes
  rrSegmentQueryValue: {/* filter rules */},
  isRRWeightsEnabled: true,                // Enable weight-based distribution
  includeNoShowInRRCalculation: true,      // Adjust for no-shows
  rescheduleWithSameRoundRobinHost: true,  // Keep same host on reschedule
  rrHostSubsetEnabled: true                // Allow subset of hosts
}
```

### Host Groups

Group hosts together for more complex routing:

```typescript theme={null}
// From HostGroup schema.prisma:87
model HostGroup {
  id          String @id
  name        String
  hosts       Host[]
  eventTypeId Int
}

// Example: Create pools of hosts
eventType: {
  hostGroups: [
    { name: "Senior Consultants", hosts: [user1, user2] },
    { name: "Junior Consultants", hosts: [user3, user4] }
  ]
}
```

## Per-Host Locations

Each host can have different meeting locations:

```typescript theme={null}
// From EventType schema.prisma:292
eventType: {
  enablePerHostLocations: true
}

// From HostLocation schema.prisma:100
model HostLocation {
  userId       Int
  eventTypeId  Int
  type         String      // "zoom", "phone", "inPerson"
  link         String?     // For custom links
  address      String?     // For in-person
  phoneNumber  String?     // For phone calls
  credentialId Int?        // For app integrations
}
```

<Warning>
  Per-host locations require `enablePerHostLocations: true` on the event type. Each host's location is used when they're assigned to a booking.
</Warning>

## Team Workflows

Workflows can be activated at the team level:

```typescript theme={null}
// From Team schema.prisma:627
team: {
  activeOrgWorkflows: WorkflowsOnTeams[]
}

// Workflows apply to all team event types
model WorkflowsOnTeams {
  workflowId Int
  teamId     Int
  workflow   Workflow
  team       Team
}
```

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

## Team Settings

### Branding

```typescript theme={null}
// From Team schema.prisma:577-580
team: {
  logoUrl: "https://example.com/logo.png",
  brandColor: "#0066FF",
  darkBrandColor: "#0052CC",
  bannerUrl: "https://example.com/banner.jpg"
}
```

### Scheduling Defaults

```typescript theme={null}
// From Team schema.prisma:606-608
team: {
  timeFormat: 12,           // 12 or 24 hour
  timeZone: "America/New_York",
  weekStart: "Monday"       // Default week start day
}
```

### Booking Limits

```typescript theme={null}
// From Team schema.prisma:642-643
team: {
  bookingLimits: {
    day: 10,   // Max bookings per day for team
    week: 50
  },
  includeManagedEventsInLimits: true  // Count managed events in limits
}
```

## Organizations

Organizations are teams with additional capabilities:

```typescript theme={null}
// From Team schema.prisma:613
team: {
  isOrganization: true,
  parentId: null,           // Organizations have no parent
  children: Team[],         // Sub-teams
  organizationSettings: OrganizationSettings
}
```

### Sub-Teams

```typescript theme={null}
// Sub-teams belong to an organization
subTeam: {
  parentId: 1,  // Parent organization ID
  parent: Team  // Reference to organization
}
```

<Note>
  Sub-teams inherit certain settings from their parent organization but can have their own event types and members.
</Note>

### Organization Settings

```typescript theme={null}
// From OrganizationSettings schema.prisma:720
model OrganizationSettings {
  organizationId: 1,
  isOrganizationConfigured: true,
  isOrganizationVerified: true,
  orgAutoAcceptEmail: "@company.com",  // Auto-accept emails from domain
  lockEventTypeCreationForUsers: false,
  adminGetsNoSlotsNotification: true,
  isAdminAPIEnabled: true
}
```

## Team API Keys

Teams can have their own API keys:

```typescript theme={null}
// From Team schema.prisma:610
team: {
  apiKeys: ApiKey[]
}

// Team API keys access team resources
```

## Best Practices

<CardGroup cols={2}>
  <Card title="Use Round Robin for Fair Distribution" icon="rotate">
    Distribute bookings evenly across team members with weights and priorities
  </Card>

  <Card title="Set Host-Specific Schedules" icon="calendar-day">
    Each team member can have different availability for team events
  </Card>

  <Card title="Enable Per-Host Locations" icon="location-dot">
    Let each host use their preferred meeting platform
  </Card>

  <Card title="Use Managed Events for Templates" icon="copy">
    Create consistent event types across the organization
  </Card>
</CardGroup>

## Common Team Workflows

### Sales Team Round Robin

```typescript theme={null}
{
  title: "Sales Call",
  teamId: 1,
  schedulingType: "ROUND_ROBIN",
  isRRWeightsEnabled: true,
  hosts: [
    { userId: 1, weight: 100, priority: 1 },  // Senior rep
    { userId: 2, weight: 100, priority: 1 },  // Senior rep
    { userId: 3, weight: 50, priority: 2 }    // Junior rep, fewer bookings
  ],
  rescheduleWithSameRoundRobinHost: true,
  includeNoShowInRRCalculation: true
}
```

### Interview Panel (Collective)

```typescript theme={null}
{
  title: "Final Interview",
  teamId: 2,
  schedulingType: "COLLECTIVE",
  length: 60,
  hosts: [
    { userId: 5, isFixed: true },  // Hiring manager (required)
    { userId: 6, isFixed: true },  // Team lead (required)
    { userId: 7, isFixed: true }   // Engineer (required)
  ],
  requiresConfirmation: true,
  minimumBookingNotice: 2880  // 48 hours
}
```

### Organization-Wide Template

```typescript theme={null}
{
  title: "1-on-1 Meeting",
  teamId: 1,  // Organization ID
  schedulingType: "MANAGED",
  length: 30,
  // Creates individual event types for each member
  assignAllTeamMembers: true
}
```

## Related Features

* [Event Types](/features/event-types) - Create team event types
* [Workflows](/features/workflows) - Team-level workflow automation
* [Availability](/features/availability) - Host-specific schedules
