Create a booking

POST
/v1/scheduling/bookings

Books a slot, or joins a group session. Without a host, a pool chooses fairly among those free. An event type that requires approval answers with a pending_approval booking.

Authorization

bearerAuth
headerAuthorizationBearer <token>

A secret API key from the dashboard: coss_live_… for production environments, coss_test_… for sandbox environments.

Header Parameters

Idempotency-Key?string

Makes retries safe: a repeated request with the same key and body returns the original booking instead of creating another, for 24 hours. A refused request keeps no key. 1-256 characters.

Length1 <= length <= 256
Coss-Version?"2026-10-10"

The API version (a date) to use for this request. Defaults to your organization's version, pinned to the latest one when it first used the API and upgraded from the dashboard. The SDK always sends the version it was built for.

Value in"2026-10-10"

Request Body

application/json
  1. body
event_type*string

The event type's id or uid.

start*string

An ISO 8601 instant with an offset.

host?string

A specific host (id or uid). Default: chosen fairly from those free.

attributes?

Only choose among pool hosts matching all of these.

duration_minutes?integer

One of the event type's duration_options.

Range5 <= value <= 1440
attendee*

Name and email are only needed if coss.com notifies this attendee.

answers?

Answers to the event type's questions. Stored encrypted, and returned only by retrieving the booking.

location?||||

One of the event type's locations, with your link filled in if it has none.

metadata?

Your own key-value pairs. Don't put sensitive data here.

Response Body

The booking.

application/json
  1. response
object*"scheduling.booking"
Value in"scheduling.booking"
id*string
event_type*string
status*string
Value in"held""pending_approval""confirmed""cancelled""declined"
title*string
start*string
end*string
hosts*array<string>
attendees*array<>
location*||||
hold_expires_at*string|null
approval_expires_at*string|null
series*string|null
series_index*number|null
group_session*string|null
calendar_unverified*boolean
external_conflict_at*string|null
no_show_at*string|null
cancelled_at*string|null
metadata*
created_at*string
updated_at*string
import { Coss } from "coss";const coss = new Coss({  apiKey: process.env.COSS_API_KEY,  baseUrl: "https://api.coss.com",});const { data, error } = await coss.scheduling.bookings.create({  event_type: "evtype_01kd2m9a0b1c2d3e4f5g6h7j8m",  start: "2027-01-04T15:00:00.000Z",  attendee: {    uid: "patient_77",    name: "Sam Lee",    email: "sam@example.com",    time_zone: "UTC",  },});
{  "object": "scheduling.booking",  "id": "book_01kd2m9a0b1c2d3e4f5g6h7j8m",  "event_type": "evtype_01kd2m9a0b1c2d3e4f5g6h7j8m",  "status": "confirmed",  "title": "Initial consultation",  "start": "2027-01-04T15:00:00.000Z",  "end": "2027-01-04T15:30:00.000Z",  "hosts": [    "host_01kd2m9a0b1c2d3e4f5g6h7j8m"  ],  "attendees": [    {      "id": "attn_01kd2m9a0b1c2d3e4f5g6h7j8m",      "uid": "patient_77",      "name": "Sam Lee",      "email": "sam@example.com",      "phone": null,      "time_zone": "UTC",      "locale": null    }  ],  "location": null,  "hold_expires_at": null,  "approval_expires_at": null,  "series": null,  "series_index": null,  "group_session": null,  "calendar_unverified": false,  "external_conflict_at": null,  "no_show_at": null,  "cancelled_at": null,  "metadata": {},  "created_at": "2027-01-01T10:00:00.000Z",  "updated_at": "2027-01-01T10:00:00.000Z"}