Общий принцип работы 
- Получить список доступных баз данных и филиалов GET: (https://api.medflex.ru/marketing/databases/)
- Создать сегмент с условиями отбора пациентов POST: (https://api.medflex.ru/marketing/segments/)
- Дождаться готовности сегмента (статус ready) GET: (https://api.medflex.ru/marketing/segments/)
- Получить список идентификаторов пациентов GET: (https://api.medflex.ru/marketing/segments/{segment_uuid}/)
- Запросить персональные данные по нужным пациентам POST: (https://api.medflex.ru/marketing/segments/{segment_uuid}/results/)
- После рассылки записать информацию о ней POST: (https://api.medflex.ru/marketing/mailings)
Все запросы требуют авторизации. Идентификаторы пациентов временные (действуют 24 часа) и привязаны к конкретному сегменту.
Шаг 1. Получить список баз данных 
GET /marketing/databases/Возвращает базы данных, к которым у вас есть доступ. Каждая база содержит один или несколько филиалов (lpu_ids).
Ответ:
{
"count": 2,
"results": [
{
"database_id": 1000,
"database_name": "Клиника Здоровье",
"lpu_ids": [10000, 10001]
},
{
"database_id": 2000,
"database_name": "Стоматология Улыбка",
"lpu_ids": [20000]
}
]
}database_id используется при создании сегмента. lpu_ids можно указать в фильтрах для ограничения выборки по конкретным филиалам.
Шаг 2. Создать сегмент 
POST /marketing/segments/Сегмент описывает условия отбора пациентов. Обработка асинхронная: запрос возвращает UUID сегмента, результат будет доступен позже.
Примеры запросов: Примеры запросов по маркетинговым рассылкам
Минимальный запрос
{
"name": "Активные за полгода",
"database_id": 1000,
"conditions": {
"include": {
"appointments": {
"days_from": -180,
"days_to": 0,
"status": ["completed"]
}
}
}
}Полный запрос
{
"name": "Мужчины 36-45, 5+ визитов к стоматологу, траты > 50к",
"database_id": 1000,
"exclude_patients": {
"success_mailing_name": ["promo_dental"],
"days_from_mailing": 30,
"mass_imported_patients": true
},
"conditions": {
"include": {
"patients": {
"gender": "male",
"age_group": ["H"],
"days_in_database_from": -365,
},
"appointments": {
"lpu_ids": [10000, 10001],
"days_from": -365,
"days_to": 0,
"status": ["completed"],
"speciality_ids": [23000],
"service_ids": [11000, 12000],
"quantity_from": 5
},
"statistics": {
"purchase_amount_from": 50000,
"bill_avg_from": 8000
}
},
"exclude": {
"appointments": {
"days_from": -30,
"days_to": 0,
"service_ids": [11000]
}
}
}
}Ответ (201):
{
"segment_uuid": "d1c060a0-8375-4ff9-bce5-9bb03029256f"
}Структура conditions 
conditions состоит из двух блоков:
- include - кого включить в сегмент;
- exclude - кого исключить из результата.
Оба блока вычисляются независимо по всей базе. Результат: пациенты из include минус пациенты из exclude. Фильтры одного блока не влияют на другой.
Пример: если в include указан days_from: -180, а в exclude не указан период, то исключение будет по всей истории, а не за те же 6 месяцев.
Более подробно о теле запроса conditions: https://developer.medflex.ru/marketing/tag/marketing/marketing_segments_create
Шаг 3. Дождаться готовности 
GET /marketing/segments/{segment_uuid}/Периодически проверяйте статус сегмента. Статусы сегментов, их описание и что нужно с ними делать:
- pending – В очереди на обработку – Ждать;
- in_progress – Обрабатывается – Ждать;
- ready – Готов – Запросить patient_ids (поле в ответе);
- failed – Ошибка – Посмотреть error_detail, создать новый сегмент.
Ответ (статус ready):
{
"segment_uuid": "d1c060a0-...",
"name": "Активные за полгода",
"status": "ready",
"patients_count": 450,
"error_detail": null,
"patient_ids": [
"5c437229-17a1-4b0a-9068-b6f2cf26455c",
"5904d239-175e-42e5-8497-86aa1c4a3151",
"..."
],
"dt_created": "2026-03-20T09:00:00+03:00",
"dt_requested": "2026-03-20T09:00:05+03:00",
"dt_ready": "2026-03-20T09:00:35+03:00"
}patient_ids - временные идентификаторы. Действуют 24 часа. После истечения сегмент автоматически пересчитается при следующем обращении.
Рекомендуемый интервал опроса: 10-30 секунд. Среднее время обработки: 15-60 секунд.
Шаг 4. Получить персональные данные 
POST /marketing/segments/{segment_uuid}/results/Запрашивайте данные порциями до 100 пациентов за раз.
Запрос:
{
"patient_ids": [
"5c437229-17a1-4b0a-9068-b6f2cf26455c",
"5904d239-175e-42e5-8497-86aa1c4a3151"
]
}Ответ:
[
{
"id": "5c437229-17a1-4b0a-9068-b6f2cf26455c",
"first_name": "Семен",
"patronymic": "Семеныч",
"phone": "+79XXXXXXXXX",
"email": "xxx@xxx.ru",
"age_group": "F"
},
{
"id": "5904d239-175e-42e5-8497-86aa1c4a3151",
"first_name": "Мария",
"patronymic": null,
"phone": "+79XXXXXXXXX",
"email": null,
"age_group": null
}
]Поля patronymic, phone, email, age_group могут быть null, если данные отсутствуют в системе клиники.
Шаг 5. Записать информацию о рассылке 
POST /marketing/mailings/После отправки рассылки запишите, каким пациентам она была отправлена. Это нужно для работы exclude_patients в следующих сегментах.
Запрос:
{
"patient_ids": [
"5c437229-17a1-4b0a-9068-b6f2cf26455c",
"5904d239-175e-42e5-8497-86aa1c4a3151"
],
"success_mailing_name": "promo_dental",
"segment_uuid": "d1c060a0-8375-4ff9-bce5-9bb03029256f"
}Ответ (201):
{}Записи хранятся 45 дней.
Удаление сегмента 
DELETE /marketing/segments/{segment_uuid}/Удаляет сегмент и очищает связанные данные.
Справочники 
Врачи 
GET /models/doctor/Возвращает врачей с активным расписанием. Используйте doctor_ids из ответа в фильтрах сегмента.
Специальности 
GET /models/speciality/Возвращает специальности. При использовании speciality_ids в сегменте система автоматически найдет врачей нужных специальностей.
Услуги 
GET /services/prices/?lpu_id=<Идентификатор клиники>Возвращает доступные услуги. Используйте идентификаторы в поле service_ids.
Лимиты 
- Активных сегментов (pending, in_progress, ready) на одну базу – 100;
- Готовых (ready) сегментов на одну базу – 10;
- Пациентов в одном запросе /results/ – 100;
- Срок жизни идентификаторов пациентов – 24 часа;
- Минимальный размер сегмента – 30 пациентов;
- Максимальный размер сегмента – 5% базы;
- Лимит уникальных пациентов в месяц – 30%.