# Клиенты брони

Клиенты брони — контакты и компании CRM, для которых сделана бронь. Методы подраздела читают клиентов брони, заменяют их набор целиком и снимают всех клиентов одним вызовом.

Битрикс24 API: `booking.v1.booking.client.list`, `booking.v1.booking.client.set`, `booking.v1.booking.client.unset`
Скоуп: `booking`

## Операции

- [Список клиентов брони](./clients-list.md) — `GET /v1/bookings/:id/clients`
- [Заменить клиентов брони](./clients-set.md) — `PUT /v1/bookings/:id/clients`
- [Снять клиентов брони](./clients-delete.md) — `DELETE /v1/bookings/:id/clients`

## Ключевые поля

Поля одного клиента. Они приходят в каждом элементе ответа всех трёх методов и передаются в теле замены.

| Поле | Описание |
|------|----------|
| `id` | ID контакта или компании CRM. Списки: [`GET /v1/contacts`](/docs/entities/contacts/list), [`GET /v1/companies`](/docs/entities/companies/list) |
| `type.module` | Модуль типа клиента: `crm` |
| `type.code` | Код типа клиента: `CONTACT` — контакт, `COMPANY` — компания. Справочник: [`GET /v1/booking-client-types`](/docs/entities/booking-client-types) |

## Что нужно знать перед работой

1. **Тип клиента — из справочника.** Пару `type.module` и `type.code` берите из [`GET /v1/booking-client-types`](/docs/entities/booking-client-types). Пара не из справочника отклоняется кодом `400 INVALID_PARAMS` до записи.
2. **Замена, а не добавление.** Замена записывает переданный набор целиком: клиенты, которых нет в запросе, снимаются с брони. Пустой массив `clients` снимает всех.
3. **Клиенты проверяются до записи.** Для несуществующего контакта или компании приходит `404 ENTITY_NOT_FOUND`, и клиенты брони не меняются.
4. **Ответ записи — перечитанный список.** Замена и снятие после записи заново читают клиентов брони и возвращают их.
5. **Ключ только для чтения читает клиентов.** Замена и снятие с таким ключом отвечают `403 WRITE_BLOCKED_READONLY_KEY`.
6. **Уведомления.** На ресурсе с включёнными уведомлениями изменение брони может отправлять клиенту SMS или сообщение в мессенджере. Для проб используйте собственный ресурс без уведомлений.

## Типичный сценарий

1. Найти бронь: [`GET /v1/bookings`](/docs/entities/bookings/list).
2. Найти контакт или компанию: [`GET /v1/contacts`](/docs/entities/contacts/list), [`GET /v1/companies`](/docs/entities/companies/list).
3. Записать клиентов брони: [`PUT /v1/bookings/:id/clients`](./clients-set.md).
4. Проверить клиентов: [`GET /v1/bookings/:id/clients`](./clients-list.md).

## Лимиты

| Лимит | Значение |
|-------|----------|
| Пагинация списка | Нет: [`GET /v1/bookings/:id/clients`](./clients-list.md) возвращает всех клиентов брони за один вызов |
| Частота запросов | Общие лимиты API — [Лимиты и оптимизация](/docs/optimization) |
| Время замены | Растёт с числом клиентов: до записи каждый контакт и компания проверяются по одному. Замена 55 контактов занимает около 30 секунд — [Клиентский таймаут](/docs/optimization#клиентский-таймаут) |

## Смотрите также

- [Бронирования](/docs/entities/bookings)
- [Типы клиентов записи](/docs/entities/booking-client-types)
- [Клиенты листа ожидания](/docs/entities/booking-wait-list/clients)
- [Контакты](/docs/entities/contacts)
- [Компании](/docs/entities/companies)
