Core concepts
Event types
An event type is a bookable meeting definition owned by a host: a title, URL slug, duration, and scheduling policy (buffers, minimum notice, booking window, slot increment). Only active event types (isActive: true) are visible on the public surface. An event type's schedulingType is either individual (one host) or round_robin (a team rotates across eligible hosts).
Availability: weekly rules and date overrides
Availability lives in a schedule with an IANA timezone. Weekly rules define recurring working-hours windows (weekday 0=Sunday..6=Saturday, wall-clock times in the schedule timezone; multiple windows per day are allowed for split shifts). A date override replaces the weekly rules for one specific local date — either marking the whole day unavailable or supplying a custom window. The slot engine subtracts Google Calendar busy times and existing confirmed bookings, then applies buffers, minimum notice, and the booking window.
Slots and days
A slot is a bookable time range with ISO-8601 UTC start and end. The days endpoint returns the subset of local calendar dates (YYYY-MM-DD, in the requested tz) that contain at least one bookable slot — useful for rendering a date picker before fetching per-day slots. The tz query parameter only controls how results are grouped and displayed; it never changes which slots exist.
Bookings and statuses
A booking captures an invitee (name, email, notes, timezone) against a slot. Status is one of the values below. Creating a booking re-validates the slot against live availability and claims it atomically in the database, so a race for the same start returns a conflict.
| status | meaning |
|---|
| confirmed | Active booking holding the slot. |
| cancelled | Cancelled by the invitee or host; the slot is freed. |
| error | Internal terminal state used by the booking lifecycle reconciler. |
Every booking gets a high-entropy cancel token. Only its hash is stored; the raw token is returned once when the booking is created and is embedded in the invitee's cancel link. The public cancel endpoints authenticate with this raw token.
Teams and round-robin
An event type can belong to an organization (team). A round_robin team event type rotates bookings across its eligible hosts: at booking time Kaigi picks a host who is free for the requested slot, preferring the host with the fewest upcoming confirmed bookings (ties break by host creation order). Team-scoped reads on the v1 surface require the caller to be an admin or owner of the organization.
Data objects
The v1 surface returns two canonical object shapes. The public surface returns trimmed subsets of these (only the fields listed on each endpoint).
Event type object (returned by the /api/v1/event-types endpoints):
| field | type | notes |
|---|
| id | string (uuid) | Event type id. |
| slug | string | URL slug, unique per host (or per team). |
| title | string | Display name. |
| description | string | null | Optional description. |
| durationMinutes | number | Meeting length in minutes. |
| bufferBeforeMin | number | Buffer before the meeting. |
| bufferAfterMin | number | Buffer after the meeting. |
| minNoticeMinutes | number | Minimum lead time before a slot can be booked. |
| bookingWindowDays | number | How far ahead slots are offered (days). |
| slotIncrementMinutes | number | Granularity of generated start times. |
| scheduleId | string | null | Availability schedule; null falls back to the host default. |
| color | string | null | Optional display color. |
| isActive | boolean | Whether the event type is public. |
| createdAt | string (ISO-8601) | Creation timestamp. |
| updatedAt | string (ISO-8601) | Last update timestamp. |
Booking object (returned by the /api/v1/bookings endpoints):
| field | type | notes |
|---|
| id | string (uuid) | Booking id. |
| eventTypeId | string (uuid) | Event type booked. |
| status | string | confirmed | cancelled | error. |
| start | string (ISO-8601) | Start instant (UTC). |
| end | string (ISO-8601) | End instant (UTC). |
| inviteeName | string | Invitee name. |
| inviteeEmail | string | Invitee email. |
| inviteeNotes | string | null | Optional invitee notes. |
| timezone | string | Invitee IANA timezone. |
| meetUrl | string | null | Google Meet URL, when created. |
| cancelledAt | string | null | Cancellation timestamp. |
| cancelledBy | string | null | invitee | host, when cancelled. |
| cancelReason | string | null | Optional cancellation reason. |
| createdAt | string (ISO-8601) | Creation timestamp. |