Bookings API
Meeting types
A meeting type is one host's booking page: its length, hours, location and rules. Reads need read:bookings; changes need write:bookings.
| Method | Path | Does |
|---|---|---|
GET | /api/v1/booking-types | List live types. Add includeInactive=true for paused ones, hostUserId= for one host |
POST | /api/v1/booking-types | Create a type for a host |
GET | /api/v1/booking-types/{id} | Read one |
PATCH | /api/v1/booking-types/{id} | Change any fields. active: false pauses it |
DELETE | /api/v1/booking-types/{id} | Archive it |
Create
POST /api/v1/booking-types HTTP/1.1
Content-Type: application/json
{
"hostUserId": "cmq1user0alk34567890",
"title": "Intro call",
"durationMin": 30,
"hours": [
{ "weekday": 1, "start": "09:00", "end": "12:00" },
{ "weekday": 1, "start": "13:00", "end": "17:00" }
],
"locationKind": "GOOGLE_MEET",
"reminderMinutes": 60
}hostUserId, title, durationMin, hours and locationKind are required. Returns 201 with { "bookingType": { ... } }, including publicUrl once the host has a booking slug.
Fields
| Field | Notes |
|---|---|
title | Up to 120 characters |
slug | URL slug, unique per host. Defaults to one made from the title. Changing it breaks the old link |
description | Up to 2,000 characters |
durationMin | 5 to 480, and it must fit inside at least one window |
hours | Weekly windows { weekday, start, end }. weekday 0 is Sunday. Times are HH:MM wall clock in the host's timezone. Two windows on one day must not overlap |
dateOverrides | { date, windows } entries that replace one date's hours. See Hours |
locationKind | PHONE_HOST_CALLS, PHONE_INVITEE_CALLS, IN_PERSON, CUSTOM_LINK, GOOGLE_MEET, MS_TEAMS or ZOOM |
locationValue | Address, link or number, where the location needs one |
bufferBeforeMin, bufferAfterMin | 0 to 240 |
minNoticeMin | 0 to 43,200. Default 120 |
horizonDays | How far ahead people can book, 1 to 365. Default 30 |
maxPerDay | Meetings booked per day, 1 to 50, or null for no cap |
slotIntervalMin | Minutes between offered start times, 5 to 480. Null uses the meeting length |
active | false pauses it |
hidden | Bookable by direct link but left off the host's landing page |
questions | Up to 10 booking-form questions { id, label, kind, required, options? } |
allowGuests | Default true |
confirmationMessage | Up to 1,000 characters |
redirectUrl | Must start with https:// |
reminderMinutes | Email the invitee 15 to 10,080 minutes before, or null for no reminder |
color | #rrggbb |
GOOGLE_MEET, MS_TEAMS and ZOOM need the host's calendar or Zoom account connected in Scheduling first. Otherwise the request returns 400 saying which one to connect.
Pause or archive
- Pause:
PATCHwith{ "active": false }. Nothing new can be booked; existing bookings are kept and can still be cancelled.{ "active": true }turns it back on. - Archive:
DELETE. The public link stops working, the slug is freed for reuse, and the type disappears from every list. Its bookings, past and upcoming, are kept. Archiving cannot be undone through the API.