1. Найти клиента по телефону или ФИО.
2. Если клиент не найден - создать клиента.
3. Если нужно - создать питомца.
4. Получить цель обращения для приема.
5. Создать прием через `POST /rest/api/Admission`.
6. При необходимости подтвердить прием через `Admission/ConfirmAdmission`.
Перед созданием клиента нужно проверить, нет ли его уже в базе.
Метод:
```http
GET /rest/api/client/clientsSearchData?search_query={query}
``````bash
curl --location --request GET 'https://{DOMAIN NAME}/rest/api/client/clientsSearchData?search_query=79000000000' \
--header 'Content-Type: application/json' \
--header 'X-REST-API-KEY: {REST API KEY}'
```Поиск выполняется по:
Для телефона передавайте только цифры. Номер можно передавать с кодом страны или без кода страны.
Метод:
```http POST /rest/api/client ```
Пример:
```bash
curl --location --request POST 'https://{DOMAIN NAME}/rest/api/client' \
--header 'Content-Type: application/json' \
--header 'X-REST-API-KEY: {REST API KEY}' \
--data-raw '{
"last_name": "Иванов",
"first_name": "Иван",
"cell_phone": "79000000000",
"phone_prefix": "7",
"city_id": 252,
"status": "ACTIVE"
}'
```В интерфейсе Ветменеджера обязательные поля клиента - фамилия и город.
При создании через API минимально рекомендуется передавать:
Если нужно создать временного клиента, передайте `"status": "TEMPORARY"`.
Если в домене несколько филиалов, после создания клиента нужно задать связь клиента с клиникой через модель `clinicsToClients`.
При работе через интерфейс программа делает это автоматически. При работе через API связь нужно создавать самостоятельно.
Метод:
```http POST /rest/api/pet ```
Основные поля питомца:
В OpenAPI поле `breed_id` допускает `null`, но для корректной работы пользовательских сценариев лучше передавать реальную породу из справочника.
Получить список пород: `GET /rest/api/breed`. Получить список видов питомцев: `GET /rest/api/petType`.
Если порода неизвестна, согласуйте с клиникой, какое значение использовать: выбрать подходящую породу из справочника или завести отдельную породу вроде "Метис" / "Без породы".
Создание приема
Метод:
```http POST /rest/api/Admission ```
При создании приема поле `status` отправлять не нужно: оно всегда устанавливается в `not_confirmed`. Поле `reception_write_channel` по умолчанию - `website`.
Пример:
```bash
curl --location --request POST 'https://{DOMAIN NAME}/rest/api/Admission' \
--header 'Content-Type: application/json' \
--header 'X-REST-API-KEY: {REST API KEY}' \
--data-raw '{
"type_id": "4",
"admission_date": "2026-06-25 16:45:00",
"clinic_id": "1",
"client_id": "6",
"patient_id": "3",
"description": "Запись с сайта",
"admission_length": "00:15:00",
"user_id": "1"
}'
```Обязательные поля:
Рекомендуемые поля для полноценной записи:
Если на выбранное время у врача уже есть приём, занимающий слот, API вернёт ответ с `time_is_busy: 1` и сообщением `Admission time is busy`, и приём не создастся. Отключить эту проверку при создании нельзя - параметр `without_checking` работает только при редактировании.
`type_id` - это цель обращения на прием. Его нужно получить из справочника `Тип приема`:
```bash
curl --location -g --request GET 'https://{DOMAIN NAME}/rest/api/ComboManualName?filter=[{"property":"title","value":"Тип приема","operator":"="}]' \
--header 'Content-Type: application/json' \
--header 'X-REST-API-KEY: {REST API KEY}'
```В ответе будет список `comboManualItems`. В `type_id` нужно передавать значение поля `value` нужной цели обращения.
Если запись с сайта должна сначала попасть на проверку администратору, достаточно создать прием. Он будет в статусе `not_confirmed`.
Если интеграция должна сразу подтвердить запись, используйте метод:
```http POST /rest/api/Admission/ConfirmAdmission ```
Пример:
```bash
curl --location --request POST 'https://{DOMAIN NAME}/rest/api/Admission/ConfirmAdmission' \
--header 'Content-Type: application/json' \
--header 'X-REST-API-KEY: {REST API KEY}' \
--data-raw '{
"id": 30,
"user_id": 1,
"client_id": 6,
"patient_id": 3,
"admission_type": 4,
"clinic_id": 1,
"admission_date": "2026-06-25 16:45:00",
"description": "Запись с сайта"
}'
```Обязательные поля для подтверждения:
Поле `description` необязательно.
Статусы приема
Какие статусы занимают время
При проверке занятости слота прием считается занимающим время, если его статус **не** равен `accepted`, `delayed` или `deleted`.
Занимают время:
Не занимают время (слот считается свободным):
При редактировании приема параметр `without_checking=1` полностью отключает проверку занятости.