- Reassign a booking POST
- List who a booking could go to GET
- List bookings GET
- Create a booking POST
- Retrieve a booking GET
- Reschedule a booking POST
- Cancel a booking POST
- List a booking's history GET
- Approve a booking POST
- Decline a booking POST
- List a booking's notifications GET
- Mark a no-show POST
- Set a booking's location PATCH
- Hold a slot POST
- Confirm a hold POST
- Release a hold DELETE
- Erase an attendee DELETE
- Erase an attendee or guest by email POST
- Create a booker session POST
- Create a manage session POST
Reassign a booking
Gives a booking to another host, keeping its id and time. Works for every kind: a group session moves as a whole, from any of its seats, and one that's already started changes for the record, with nobody told. Whoever leaves and joins is told, and the attendee unless you say not to.
bearerAuthAuthorizationBearer <token>A secret API key from the dashboard: coss_live_… for production environments, coss_test_… for sandbox environments.
id*stringThe booking's id.
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.
"2026-10-10"application/json- body
- body
- …
changes*array<>A session or a one-on-one has one. A collective can change several.
1 <= items <= 10reason_code*string"host_unavailable""out_of_office""workload""customer_request""offboarding""other"note?stringWhy, in your words: required with an override of someone's availability. Encrypted, and only in the booking's history.
length <= 500overrides?array<>Go ahead anyway: any_host for someone who doesn't take this event type, and the rest for what a candidate's reason said. A host who already has something at this time can never be overridden.
items <= 6notify?The booking.
application/json- response
- response
- …
object*"scheduling.booking""scheduling.booking"id*stringevent_type*stringThe id of the booked event type.
status*stringheld: a hold keeping the slot until hold_expires_at, uncharged and known to nobody. pending_approval: holds the time until approved, declined or approval_expires_at. confirmed: booked. cancelled: cancelled, or a hold released or expired. declined: refused, or its approval deadline passed.
"held""pending_approval""confirmed""cancelled""declined"title*stringThe event type's title when this was booked.
start*stringWhen the booking starts.
end*stringWhen the booking ends, without buffers.
hosts*array<string>The ids of the hosts taking it.
attendees*array<>Who's booked: the attendee first, then any guests they added. A group session's seat is its own booking.
location*||||||Where a booking meets. link, phone and in_person carry their details, and on an event type, left blank, use the booked host's own if they have one; google_meet, microsoft_teams and zoom get a meeting made on the host's connected account.
hold_expires_at*|When a held booking gives up its slot. null otherwise.
approval_expires_at*|When a pending_approval booking is declined if nobody decides. null otherwise.
series*|The id of the series it belongs to. null: not part of one.
series_index*|Its place in the series, from 0. null: not part of one.
group_session*|The id of the group session whose seat this is. null: not a seat.
calendar_unverified*booleanReserved for flagging a booking made on last known calendar data. Nothing sets it yet, so it's always false.
external_conflict_at*|When something else landed on this time in the host's calendar, or the host changed the event. The booking stands. null: no conflict known.
no_show_at*|When the attendee was marked as a no-show. null: not marked.
cancelled_at*|When it was cancelled. null: not cancelled.
cancelled_by*|Who cancelled it: api_key, user (the dashboard), host_session, booker_session, manage_session (the attendee's link) or system. null: not cancelled, or cancelled before this was recorded.
"api_key""user""host_session""booker_session""manage_session""manager_session""system"nullcancellation_reason?|Why, if they said. Only when retrieving one booking. It's erased with the attendee's details, and it's never in webhooks, logs or emails.
metadata*Your own key-value pairs.
created_at*stringupdated_at*stringimport { 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.reassign("book_01kd2m9a0b1c2d3e4f5g6h7j8m", { changes: [ { to_host: "doctor_518", }, ], reason_code: "out_of_office",});{ "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", "role": "attendee", "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, "cancelled_by": null, "metadata": {}, "created_at": "2027-01-01T10:00:00.000Z", "updated_at": "2027-01-01T10:00:00.000Z"}