# Booking clients

`GET /v1/bookings/:id/clients`

`PUT /v1/bookings/:id/clients`

`DELETE /v1/bookings/:id/clients`

`booking.v1.Booking.Client.list / set / unset`

Scope: `booking`. Reads accept READONLY keys.

GET returns all clients. PUT accepts `{ "clients": [{ "id": 101, "type": { "module": "crm", "code": "CONTACT" } }] }` and **replaces the entire roster**. `clients: []` clears it. DELETE removes all clients. PUT and DELETE return the roster read back.

Read types from [client types](/docs/entities/booking-client-types). Unknown types return 400 before set; missing CRM contacts or companies return 404 before writing. CRM pre-reads require no additional key scope; Bitrix24 checks user permissions.

Resources with notifications enabled may send SMS or messenger notifications when bookings change. Use your own resource with notifications disabled for probes.

## Example

```bash
curl -X GET 'https://vibecode.bitrix24.com/v1/bookings/42/clients' \
  -H 'X-Api-Key: YOUR_API_KEY'
```

## Response

```json
{
  "success": true,
  "data": [
    {
      "id": 101,
      "type": {
        "module": "crm",
        "code": "CONTACT"
      }
    }
  ]
}
```

## Errors

- `400 INVALID_PARAMS`: malformed id, body or filter; correct the parameters.
- `401 TOKEN_MISSING`: the key has no Bitrix24 connection.
- `403 SCOPE_DENIED`: add the `booking` scope. `WRITE_BLOCKED_READONLY_KEY` on writes: use a key that allows writes.
- `404 ENTITY_NOT_FOUND`: the record or CRM client is missing or inaccessible.
- `422 BITRIX_ERROR`: a Bitrix24 business refusal; the message contains its reason.
- `429`: rate limit; retry after `Retry-After`.
- `502`: invalid Bitrix24 response or incomplete traversal. No partial data is returned.
- `503`: Bitrix24 timeout.

## See also

[Wait list](/docs/entities/booking-wait-list) · [Bookings](/docs/entities/bookings)
