Skip to content

Team Scheduling

Team scheduling enables organizations with multiple providers to manage bookings across a team.

Distributes bookings evenly across team members. Considers each member’s existing booking count to maintain balance.

import { assignHost } from "@thebookingkit/core";
const result = assignHost(
teamMembers,
bookingCounts, // { [memberId]: count }
"round_robin"
);
// Returns: { memberId, memberName }

All team members must be available for the slot. Used for group interviews, panel discussions, or meetings requiring all participants.

import { getTeamSlots } from "@thebookingkit/core";
const slots = getTeamSlots(
teamMembers, // Each member's rules, overrides, bookings
dateRange,
timezone,
{ strategy: "collective", duration: 60 }
);
// Returns only slots where ALL members are free

Organization-level event type templates with field locking. Admins create templates; members get auto-generated event types with locked fields.

import { resolveManagedEventType, isFieldLocked } from "@thebookingkit/core";
const resolved = resolveManagedEventType(template, memberOverrides);
// Template fields marked as locked cannot be overridden
isFieldLocked(template, "durationMinutes"); // true — member can't change
isFieldLocked(template, "description"); // false — member can customize

Direct booking with a specific team member. No automatic assignment.

import { getTeamSlots } from "@thebookingkit/core";
const slots = getTeamSlots(
[
{
memberId: "alice",
memberName: "Alice",
rules: aliceRules,
overrides: aliceOverrides,
bookings: aliceBookings,
},
{
memberId: "bob",
memberName: "Bob",
rules: bobRules,
overrides: bobOverrides,
bookings: bobBookings,
},
],
{ start: new Date("2026-03-09"), end: new Date("2026-03-14") },
"America/New_York",
{ strategy: "round_robin", duration: 30 }
);
// Returns: TeamSlot[]
// { startTime, endTime, localStart, localEnd, availableMembers[] }

When an admin updates a managed template, changes propagate to all member event types:

import { propagateTemplateChanges } from "@thebookingkit/core";
const updates = propagateTemplateChanges(template, memberEventTypes);
// Returns changes to apply to each member's event type
// Only locked fields are updated; unlocked fields keep member's values

The <TeamAssignmentEditor /> component lets admins configure team members and strategies:

import { TeamAssignmentEditor } from "./components/team-assignment-editor";
<TeamAssignmentEditor
members={teamMembers}
strategy={currentStrategy}
onStrategyChange={handleStrategyChange}
onMembersChange={handleMembersChange}
/>