Book an appointment
Books one contact into one calendar at one time.
startTime may be epoch milliseconds, or an ISO string. An ISO string without an offset is read in the calendar’s own zone, which is almost always what you meant; send an offset when it is not.
The slot is checked as it is claimed, not before, so two callers racing for the last seat cannot both win: the loser gets 409 with errorType: "slot_unavailable". A time that is outside the hours, inside the notice window or beyond the lookahead comes back as invalid_time.
force: true books over the capacity check. It is for a person overriding on purpose, not for a retry.
Booking ends any chase the contact was in, the same as when an agent books them on a call, and starts the confirmation campaign on that calendar.
Cookie-auth callers must send the x-csrf-token header.
Required API key scope: projects:write.
Authorizations
Send your API key as Authorization: Bearer YOUR_API_KEY.
Query Parameters
The sub-account this calendar belongs to. It is the only thing that identifies the tenant here, and access is re-checked against it on every call.
Body
The booking.
"cal_6b1f2a7c90"
"nct_0123456789abcdef0123"
Epoch milliseconds, or an ISO string. An ISO string with no offset is read in the calendar's own zone.
"2026-09-24T15:00:00.000Z"
"Implant consultation"
Who it belongs to, for a diary that is split by person.
Book past the capacity check. For a person overriding on purpose, never for a retry.
