Оглавление
- API Системы Оптима
- Как подключить внешнюю систему к API
- Важно
- Если не получилось
- Справочник по API для разработчика
- 1. Общие правила работы с API
- 1.1. Адрес и версия
- 1.2. Формат данных
- 1.3. Пагинация и сортировка
- 1.4. Коды ответов и формат ошибок
- 2. Авторизация и получение токена
- 2.1. Пользователь интеграции
- 2.2. Получение токена (вход в систему)
- 2.3. Использование токена
- 2.4. Обновление токена
- 2.5. Смена текущего департамента
- 2.6. Ошибки авторизации и доступа
- 2.7. Пример полного цикла (curl)
- 3. Справочник методов
- 3.1. Клиенты (Clients)
- Создание клиента
- Обновление клиента
- Телефоны клиента
- E-mail клиента
- Карточка клиента (сводная информация)
- Поиск клиентов (журнал клиентов)
- Статистика покупок клиента
- Подтверждение анкеты клиента
- Источники информации о клиенте
- Заказы клиента
- Обновление основного телефона клиента (tel1)
- Изменения клиентов за период
- 3.2. Комментарии клиентов (Clients comments)
- Комментарии клиента
- 3.3. Карта клиента (Clients Card)
- Проверка существования карты по ID
- 3.4. Фильтры клиентов (Client filters)
- Список фильтров клиентов
- Фильтр по ID
- Справочные значения параметров фильтров
- Справочные значения параметров по типу товара
- Применение фильтра, переданного в запросе
- Применение сохранённого фильтра по ID
- Применение фильтра для рассылки по ID
- Применение фильтра для рассылки, переданного в запросе
- 3.5. Согласия клиента (Client agreement)
- Подготовка текста согласия
- Проверка наличия активного согласия
- Проверка необходимости сбора согласия по заказу
- Получение текста согласия
- Проверка, было ли ранее отправлено сообщение с согласием
- Отправка сообщения с кодом подтверждения
- Принятие согласия (сохранение по коду)
- Отзыв согласия
- 3.6. Департаменты (Department)
- Список департаментов
- Краткий список департаментов (метки)
- Департаменты, доступные группе пользователей
- Департамент по ID
- Магазины (департаменты типа «Магазин»)
- 3.7. Поиск номенклатуры товаров (Goods nomenclature search)
- Поиск: Аксессуары
- Поиск: Солнцезащитные очки
- Поиск: Очки
- Поиск: Линзы
- Поиск: Контактные линзы
- Поиск: Сложные позиции (оправа с линзами)
- Поиск: Полуфабрикаты линз
- 3.8. Параметры товаров (Goods params)
- Параметры: Аксессуары
- Параметры: Солнцезащитные очки
- Параметры: Очки
- Параметры: Линзы
- Параметры: Контактные линзы
- Параметры: Сложные позиции (оправа с линзами)
- Параметры: Полуфабрикаты линз
- 3.9. Заказы (Order)
- Журнал заказов
- Базовые типы заказов
- Статусы заказов
- Статусы заказов с комментариями или активные
- Заказ по ID
- Последние купленные контактные линзы клиента
- Причины заказов
- 3.10. Рецепты (Prescription)
- Рецепты клиента (очки)
- Рецепты клиента на контактные линзы
- 3.11. Типы услуг (Serve type)
- Тип услуги по ID
- Список типов услуг
- 3.12. Пользователи (User)
- Доступные ассистенты
- Доступные врачи
- Активные пользователи
- Пользователи производства
- Пользователь по ID
- Пользователи, привязанные к типу услуги
- Список пользователей
- 3.13. Категории врачей (Doctor Category)
- Категории врачей по группе пользователей
- 3.14. Остатки товаров (Remains)
- Остатки: Аксессуары
- Остатки: Солнцезащитные очки
- Остатки: Очки
- Остатки: Линзы
- Остатки: Контактные линзы
- Приложение А. Сводная таблица методов
- Приложение Б. Типовые сценарии
- Б.1. Найти клиента и получить его данные
- Б.2. Получить заказы клиента и карточку заказа
- Б.3. Выгрузить остатки по департаменту
- Б.4. Оформить согласие клиента
- Б.5. Получить список клиентов для рассылки
- Связанные статьи
API Системы Оптима
API (программный интерфейс) связывает Систему Оптима с внешними системами. Через него сайт, мобильное приложение или программа учёта клиентов получают и записывают данные: клиентов, заказы, остатки товаров. Чтобы подключить внешнюю систему, задайте пароль пользователю «itigris_external_api» — он уже есть в списке пользователей. Затем передайте разработчику адрес системы, название базы данных, идентификатор департамента, логин и пароль. Справочник по API для разработчика — ниже в этой статье.
Доступно пользователям с уровнем доступа «Системный администратор».
Статья о том, как внешняя система сама запрашивает данные из Системы Оптима. Как Система Оптима сама отправляет уведомления во внешнюю систему — см. Как подключить внешнюю систему через вебхук. Как сменить пароль любому пользователю — см. Как сменить пароль пользователя.
Как подключить внешнюю систему к API
- Откройте в левом меню «Пользователи» и выберите в списке пользователя с логином «itigris_external_api». Откроется его карточка.
- Нажмите значок карандаша вверху карточки, затем в блоке «Безопасность» нажмите «Изменить пароль». Задайте новый пароль и сохраните его — подробно см. Как сменить пароль пользователя. Сертификат скачивать не нужно: для подключения по API он не используется.
- Посмотрите в карточке поле «Департамент» — например, «Центральный офис». От имени этого департамента внешняя система будет работать с данными.
- Откройте в левом меню «Департаменты» и выберите этот департамент. Перепишите число из поля «Идентификатор» — это идентификатор департамента для разработчика.
- Откройте страницу входа в Систему Оптима и посмотрите на адресную строку браузера. Часть адреса до косой черты — адрес системы, часть после неё — название вашей базы данных.
Например, если в адресной строке «optima.itigris.ru/demo», то адрес системы — «optima.itigris.ru», а название базы данных — «demo». В справочнике ниже оно называется «company».
- Передайте разработчику внешней системы адрес системы, название базы данных, идентификатор департамента, логин «itigris_external_api» и пароль. Дайте ему ссылку на эту статью: всё техническое — в разделе «Справочник по API для разработчика» ниже.
Важно
Важно. Если сменить пароль пользователю «itigris_external_api», внешняя система перестанет получать данные. Сразу передайте новый пароль разработчику, иначе обмен данными не восстановится.
Важно. Не удаляйте и не увольняйте пользователя «itigris_external_api». Без него внешняя система не сможет подключиться к Системе Оптима.
Обратите внимание. Передавайте пароль только разработчику внешней системы. С логином и паролем можно читать и менять данные клиентов вашей компании.
Если не получилось
Попросите разработчика назвать код ошибки, которую возвращает система, и проверьте по нему:
- Ошибка 401 — неверный логин или пароль, либо пользователь уволен. Задайте пароль заново и передайте его разработчику.
- Ошибка 404 — неверное название базы данных. Сверьте его с адресной строкой на странице входа.
- Ошибка 400 при входе — неверный идентификатор департамента. Сверьте его с департаментом в карточке пользователя «itigris_external_api».
- Ошибка 403 — пользователю недоступен запрос, который отправляет внешняя система. Обратитесь в техподдержку ИТигрис.
Если ошибка другая или проверка не помогла, обратитесь в техподдержку ИТигрис.
Справочник по API для разработчика
Раздел для разработчика внешней системы: адрес и формат запросов, вход и токены, все доступные методы с полями и примерами. Редакция справочника от 09.10.2026.
Обратите внимание. Все примеры содержат тестовые данные: идентификаторы клиентов, заказов, департаментов и адрес системы. Используйте их как образец формата, а не как готовые значения.
1. Общие правила работы с API
1.1. Адрес и версия
- Все методы имеют префикс
/api/v2/, например:POST https://<адрес-инстанса>/api/v2/sign/in. - Адрес инстанса (
<адрес-инстанса>) выдаётся вместе с доступом; в примерах ниже он опущен, поэтому строки запросов начинаются сразу с/api/v2/.... - Транспорт — HTTPS. Формат обмена — JSON (
Content-Type: application/json,charset=UTF-8). - API не поддерживает состояние (stateless): каждый запрос должен нести токен авторизации.
- Все методы, кроме
POST /api/v2/sign/inиPOST /api/v2/sign/refresh, требуют авторизации.
1.2. Формат данных
| Тип данных | Формат | Пример |
|---|---|---|
| Дата | YYYY-MM-DD |
2026-05-19 |
| Дата и время | YYYY-MM-DDTHH:MM:SS |
2026-05-19T13:47:46 |
| Идентификатор (ID) | целое число | 1000110408 |
| Денежные суммы, диоптрии | число с десятичной точкой |
1300.0, -2.25
|
| Булево значение |
true / false
|
true |
| Перечисление (enum) | строка в верхнем регистре |
"ACCEPTED", "CONTACT_LENS"
|
| Отсутствующее значение | null |
"comment": null |
Названия полей JSON — в нижнем верблюжьем регистре (camelCase). Регистр в значениях перечислений важен.
1.3. Пагинация и сортировка
Методы, возвращающие страницу (Page), принимают стандартные параметры:
| Параметр | Описание |
|---|---|
page |
Номер страницы, начиная с 0
|
size |
Размер страницы (количество элементов) |
sort |
Поле и направление сортировки: sort=поле,asc или sort=поле,desc
|
Пример: ?page=1&size=15&sort=date,DESC
Если параметры не указаны, применяются значения по умолчанию конкретного метода (они приведены в описании соответствующего метода). Ответ таких методов имеет структуру Page:
{
"content": [ ... ],
"totalElements": 2,
"totalPages": 1,
"size": 30,
"number": 0,
"first": true,
"last": true,
"empty": false
}
| Поле | Тип | Описание |
|---|---|---|
content |
Array | Массив элементов текущей страницы |
totalElements |
Number | Общее количество элементов |
totalPages |
Number | Общее количество страниц |
size |
Number | Размер страницы |
number |
Number | Номер текущей страницы (с 0) |
first |
Boolean | Признак первой страницы |
last |
Boolean | Признак последней страницы |
empty |
Boolean | Признак пустой страницы |
1.4. Коды ответов и формат ошибок
| Код | Когда возвращается |
|---|---|
200 OK |
Успешное выполнение |
201 Created |
Объект создан (в заголовке Location — ссылка на созданный объект) |
400 Bad Request |
Ошибка валидации входных данных, некорректный формат запроса |
401 Unauthorized |
Токен отсутствует, просрочен или неверен; неверный логин/пароль |
403 Forbidden |
Токен валиден, но у пользователя нет прав на метод |
404 Not Found |
Объект не найден |
409 Conflict |
Конфликт состояния (например, повторное действие) |
500 Internal Server Error |
Внутренняя ошибка сервиса |
Тело ошибки:
{
"errors": [
{
"field": "firstName",
"rawMessage": "must not be blank",
"message": "Не должно быть пустым"
}
]
}
| Поле | Тип | Описание |
|---|---|---|
errors |
Array | Массив ошибок |
errors[].field |
String | Имя поля, к которому относится ошибка (может быть пустым) |
errors[].rawMessage |
String | Техническое сообщение (как правило, на английском) |
errors[].message |
String | Локализованное сообщение для пользователя |
Часть ошибок (например, 401 от фильтра токенов) возвращается без тела.
2. Авторизация и получение токена
2.1. Пользователь интеграции
Для работы с внешним API используется служебный пользователь itigris_external_api. Он создаётся при развёртывании системы, заводить его не нужно.
| Параметр | Значение |
|---|---|
Логин (login) |
itigris_external_api |
Пароль (password) |
Задаёт администратор оптики в карточке пользователя — см. шаги в начале статьи |
Название базы данных (company) |
Часть адреса страницы входа после косой черты, например demo в optima.itigris.ru/demo
|
Департамент (departmentId) |
Идентификатор департамента, указанного в карточке пользователя itigris_external_api
|
| Роль |
integration — назначена при развёртывании, в интерфейсе не видна |
Через API пользователю доступны только методы роли integration, хотя в интерфейсе у него показан уровень доступа «Системный администратор». Если департамент не подходит пользователю, вход вернёт ошибку 400.
2.2. Получение токена (вход в систему)
Метод: POST /api/v2/sign/in
Доступен без токена. Аутентифицирует пользователя в указанной базе данных и департаменте и возвращает пару токенов.
Поля тела запроса
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
company |
String | Название базы данных, например stage1
|
Обязательное поле |
login |
String | Логин пользователя: itigris_external_api
|
Обязательное поле |
password |
String | Пароль пользователя | Обязательное поле |
departmentId |
Number | Идентификатор департамента, от имени которого выполняется вход | Обязательное поле |
Поля ответа
| Путь | Тип | Описание |
|---|---|---|
accessToken |
String | Токен доступа (JWT). Передаётся в заголовке Authorization
|
refreshToken |
String | Токен обновления (JWT). Используется только в методе обновления токена |
expiresAt |
String | Дата и время истечения accessToken (UTC) |
Пример запроса
POST /api/v2/sign/in HTTP/1.1
Content-Type: application/json
{
"company" : "stage1",
"login" : "itigris_external_api",
"password" : "<пароль>",
"departmentId" : 1000000001
}
Пример ответа
HTTP/1.1 200 OK
Content-Type: application/json
{
"accessToken" : "{{ACCESS_TOKEN}}",
"refreshToken" : "{{REFRESH_TOKEN}}",
"expiresAt" : "2026-05-19T13:47:46.1949163"
}
2.3. Использование токена
Значение accessToken из ответа передаётся в заголовке Authorization каждого запроса:
GET /api/v2/clients/1000000046/phones HTTP/1.1
Authorization: Bearer {{ACCESS_TOKEN}}
Схема — Bearer, между словом Bearer и токеном — один пробел.
Признаки того, что токен нужно обновить или получить заново:
-
401 Unauthorized— токен отсутствует, повреждён или истёк; -
403 Forbidden— токен валиден, но у пользователя нет ролиintegrationили конкретный метод не разрешён этой роли.
Рекомендуется хранить полученный expiresAt и обновлять токен заранее, не дожидаясь 401. Время жизни токена - 1 час.
2.4. Обновление токена
Метод: POST /api/v2/sign/refresh
Доступен без токена. По действующему refreshToken выдаёт новую пару токенов.
Поля тела запроса
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
refreshToken |
String | Ранее полученный токен обновления | Обязательное поле |
Поля ответа — те же, что у POST /api/v2/sign/in (accessToken, refreshToken, expiresAt).
Пример запроса
POST /api/v2/sign/refresh HTTP/1.1
Content-Type: application/json
{
"refreshToken" : "{{REFRESH_TOKEN}}"
}
Пример ответа
HTTP/1.1 200 OK
Content-Type: application/json
{
"accessToken" : "{{ACCESS_TOKEN}}",
"refreshToken" : "{{REFRESH_TOKEN}}",
"expiresAt" : "2026-05-19T13:44:14.4303884"
}
2.5. Смена текущего департамента
Метод: PUT /api/v2/sign/department
Меняет департамент, от имени которого работает текущая сессия, и выдаёт новую пару токенов. Требует действующий accessToken. Метод не входит в перечень обязательных для интеграции, но может быть полезен, если данные нужно получать по нескольким департаментам.
Поля тела запроса
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
departmentId |
Number | Идентификатор департамента, на который переключается сессия | Обязательное поле |
Пример запроса
PUT /api/v2/sign/department HTTP/1.1
Authorization: Bearer {{ACCESS_TOKEN}}
Content-Type: application/json
{
"departmentId" : 1000000001
}
Ответ — та же структура TokensResponse (accessToken, refreshToken, expiresAt). Новые токены нужно использовать в последующих запросах.
2.6. Ошибки авторизации и доступа
| Ситуация | Код | Причина / что делать |
|---|---|---|
| Неверный логин или пароль | 401 |
Проверить login/password; пароль задаёт администратор |
| Неверное название базы данных | 404 |
Проверить значение company
|
| Департамент недоступен пользователю | 400 |
Тип департамента должен соответствовать группе пользователя |
| Пользователь заблокирован или уволен | 401 |
Обратиться к администратору |
| Токен не передан | 401 |
Добавить заголовок Authorization: Bearer <accessToken>
|
| Токен просрочен | 401 |
Обновить токен методом POST /api/v2/sign/refresh
|
У пользователя нет роли integration
|
403 |
Назначить пользователю роль «Внешнее API / интеграция» |
| У роли нет прав на метод | 403 |
Метод недоступен пользователю внешнего API |
2.7. Пример полного цикла (curl)
# 1. Получаем токен
curl -s -X POST "https://<адрес-инстанса>/api/v2/sign/in" \
-H "Content-Type: application/json" \
-d '{"company":"stage1","login":"itigris_external_api","password":"<пароль>","departmentId":1000000001}'
# 2. Используем accessToken из ответа
curl -s "https://<адрес-инстанса>/api/v2/clients/1000000046/phones" \
-H "Authorization: Bearer <accessToken>"
# 3. По истечении accessToken обновляем пару токенов
curl -s -X POST "https://<адрес-инстанса>/api/v2/sign/refresh" \
-H "Content-Type: application/json" \
-d '{"refreshToken":"<refreshToken>"}'
3. Справочник методов
Ниже описаны методы, доступные пользователю itigris_external_api, в порядке, соответствующем перечню интеграции. Для каждого метода приведены:
- метод и шаблон пути;
- назначение;
- параметры запроса (путь, query) и/или поля тела запроса;
- пример запроса и пример ответа (тестовые данные);
- поля ответа.
Авторизация: во всех примерах подразумевается заголовок Authorization: Bearer <accessToken> (кроме методов входа и обновления токена, описанных в разделе 2).
В шаблонах путей {clientId}, {orderId}, {departmentId}, {filterId} и т. п. — подстановочные параметры: их нужно заменить реальными идентификаторами. В примерах запросов вместо шаблона подставлены конкретные тестовые значения.
3.1. Клиенты (Clients)
Методы работы с карточкой клиента, журналом клиентов, статистикой покупок и справочником источников информации.
Создание клиента
Метод: POST /api/v2/clients
Создаёт нового клиента. Обратите внимание на флаг deleted в теле запроса: он управляет сохранением клиента в журнале.
-
deleted: false— клиент сохраняется в журнале (обычный режим); -
deleted: true— клиент не сохраняется в журнале.
Ответ — 201 Created, в заголовке Location — ссылка на созданного клиента, в теле — карточка клиента с присвоенным id.
В интерфейсе системы флагу deleted соответствует галочка «Сохранить в журнале»: галочка стоит — deleted: false, галочки нет — deleted: true.
Запрос
POST /api/v2/clients HTTP/1.1
{
"firstName" : "Elon",
"familyName" : "Musk",
"patronymicName" : "Reeve",
"city" : "California",
"address" : "Hawthorne, 1 Rocket Rd",
"federalSubjectCode" : null,
"email" : "some_address@itigris.ru",
"birthdayDay" : 28,
"birthdayMonth" : 6,
"birthdayYear" : 1971,
"tel1" : "79990102233",
"tel2" : "-",
"gender" : true,
"passportNumber" : "0000 000000",
"snilsNumber" : "116-973-385 89",
"snilsIssueOn" : "2020-10-10",
"passportIssueOn" : "2020-10-10",
"passportIssuedBy" : "Брагинский РОВД Гомельской области",
"informationSource" : null,
"comment" : null,
"profession" : "engineer",
"employmentPlace" : "SpaceX, Tesla",
"driver" : false,
"computer" : false,
"smsAccepted" : false,
"emailAccepted" : false,
"phoneAccepted" : false,
"mailAccepted" : false,
"whatsappAccepted" : false,
"maxAccepted" : false,
"deleted" : true,
"vipDiscount" : null,
"initialOrdersSum" : 0.0,
"ordersSum" : 0.0,
"mobileAppLastUsage" : null,
"contractId" : "12345",
"contractDate" : "2026-05-19",
"clientCardId" : null,
"assistantId" : 9000000008,
"feedback" : null,
"snilsVerificationStatus" : null,
"mobileClient" : false,
"clReplacementDiscountDate" : "2026-05-19"
}
Ответ
HTTP/1.1 201 Created
Location: /api/v2/clients/1000110408
{
"id" : 1000110408,
"firstName" : "Elon",
"familyName" : "Musk",
"patronymicName" : "Reeve",
"city" : "California",
"address" : "Hawthorne, 1 Rocket Rd",
"email" : "some_address@itigris.ru",
"birthdayDay" : 28,
"birthdayMonth" : 6,
"birthdayYear" : 1971,
"tel1" : "79990102233",
"tel2" : "-",
"gender" : true,
"passportNumber" : "0000 000000",
"snilsNumber" : "116-973-385 89",
"snilsIssueOn" : "2020-10-10",
"passportIssueOn" : "2020-10-10",
"passportIssuedBy" : "Брагинский РОВД Гомельской области",
"informationSource" : null,
"comment" : null,
"profession" : "engineer",
"employmentPlace" : "SpaceX, Tesla",
"driver" : false,
"computer" : false,
"smsAccepted" : false,
"emailAccepted" : false,
"phoneAccepted" : false,
"mailAccepted" : false,
"whatsappAccepted" : false,
"maxAccepted" : false,
"deleted" : true,
"vipDiscount" : null,
"initialOrdersSum" : 0.0,
"ordersSum" : 0.0,
"mobileAppLastUsage" : null,
"contractId" : "12345",
"contractDate" : "2026-05-19",
"clientCard" : null,
"assistant" : {
"id" : 9000000008,
"firstName" : "topmanager",
"familyName" : "topmanager",
"patronymicName" : "topmanager",
"fullName" : "topmanager topmanager topmanager",
"shortName" : "topmanager t. t."
},
"lastUpdatedAt" : null,
"feedback" : null,
"lastSeen" : null,
"snilsVerificationStatus" : null,
"federalSubjectCode" : null,
"mobileClient" : false,
"clReplacementDiscountDate" : "2026-05-19"
}
Поля
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
| firstName | String | firstName | Длина от 0 до 30 символов включительно. Обязательное поле, не должно быть пустым |
| familyName | String | familyName | Длина от 0 до 30 символов включительно. Обязательное поле, не должно быть пустым |
| patronymicName | String | patronymicName | Длина от 0 до 30 символов включительно |
| city | String | возможные города (которые можно использовать или нет) находятся здесь | |
| address | String | address | Длина от 0 до 280 символов включительно |
| String | Длина от 0 до 50 символов включительно. Должен быть корректный адрес электронной почты |
||
| birthdayDay | Number | birthdayDay | |
| birthdayMonth | Number | birthdayMonth | |
| birthdayYear | Number | birthdayYear | |
| tel1 | String | tel1 | Длина от 0 до 20 символов включительно. Обязательное поле, не должно быть пустым |
| tel2 | String | tel2 | Длина от 0 до 20 символов включительно |
| gender | Boolean | gender | Обязательное поле |
| passportNumber | String | passportNumber | Длина от 0 до 150 символов включительно |
| informationSource | String | возможные источники информации находятся здесь | |
| comment | String | comment | Длина от 0 до 2000 символов включительно |
| profession | String | profession | Длина от 0 до 50 символов включительно |
| employmentPlace | String | employmentPlace | Длина от 0 до 100 символов включительно |
| driver | Boolean | driver | |
| computer | Boolean | computer | |
| smsAccepted | Boolean | smsAccepted | |
| emailAccepted | Boolean | emailAccepted | |
| whatsappAccepted | Boolean | whatsappAccepted | Обязательное поле |
| phoneAccepted | Boolean | phoneAccepted | |
| mailAccepted | Boolean | mailAccepted | |
| deleted | Boolean | deleted | |
| vipDiscount | Number | vipDiscount | |
| clReplacementDiscountDate | String | clReplacementDiscountDate | |
| initialOrdersSum | Number | initialOrdersSum | Должно быть не меньше 0. Обязательное поле |
| ordersSum | Number | ordersSum | Должно быть не меньше 0. Обязательное поле |
| isMobileClient | Boolean | isMobileClient | |
| mobileAppLastUsage | String | mobileAppLastUsage | |
| contractId | String | contractId | Длина от 0 до 100 символов включительно |
| contractDate | String | contractDate | |
| clientCardId | Number | как проверить номер clientCard, читайте здесь | |
| assistantId | Number | ассистент клиента, список ассистентов можно получить здесь |
Поля
| Путь | Тип | Описание |
|---|---|---|
| firstName | String | firstName |
| familyName | String | familyName |
| patronymicName | String | patronymicName |
| city | String | city |
| address | String | address |
| String | ||
| birthdayDay | Number | birthdayDay |
| birthdayMonth | Number | birthdayMonth |
| birthdayYear | Number | birthdayYear |
| tel1 | String | tel1 |
| tel2 | String | tel2 |
| gender | Boolean | gender |
| passportNumber | String | passportNumber |
| informationSource | String | informationSource |
| comment | String | comment |
| profession | String | profession |
| employmentPlace | String | employmentPlace |
| driver | Boolean | driver |
| computer | Boolean | computer |
| smsAccepted | Boolean | smsAccepted |
| emailAccepted | Boolean | emailAccepted |
| whatsappAccepted | Boolean | whatsappAccepted |
| phoneAccepted | Boolean | phoneAccepted |
| mailAccepted | Boolean | mailAccepted |
| deleted | Boolean | deleted |
| vipDiscount | Number | vipDiscount |
| clReplacementDiscountDate | String | clReplacementDiscountDate |
| initialOrdersSum | Number | initialOrdersSum |
| ordersSum | Number | ordersSum |
| isMobileClient | Boolean | isMobileClient |
| mobileAppLastUsage | String | mobileAppLastUsage |
| contractId | String | contractId |
| contractDate | String | contractDate |
| clientCardId | Number | clientCardId |
| assistant | Object | assistant |
| assistant.id | Number | ID пользователя |
| assistant.firstName | String | имя пользователя (firstName) |
| assistant.familyName | String | фамилия пользователя (familyName) |
| assistant.patronymicName | String | отчество пользователя (patronymicName) |
Обновление клиента
Метод: PUT /api/v2/clients/{clientId}
Полное обновление карточки существующего клиента. Передаётся тот же набор полей, что и при создании; возвращается обновлённая карточка клиента.
Запрос
PUT /api/v2/clients/1000110394 HTTP/1.1
{
"familyName" : "Иванов",
"firstName" : "Иван",
"patronymicName" : "Петрович",
"gender" : false,
"birthdayDay" : 1,
"birthdayMonth" : 5,
"birthdayYear" : 1965,
"tel1" : "+7 (812)163-77-89",
"tel2" : null,
"email" : "some_address@itigris.ru",
"informationSource" : "Проходил мимо",
"passportNumber" : "1234567890",
"snilsNumber" : "116-973-385 89",
"snilsIssueOn" : "2020-10-10",
"passportIssueOn" : "2020-10-10",
"passportIssuedBy" : "Брагинский РОВД Гомельской области",
"city" : "Милан",
"address" : "street 1",
"profession" : "tester",
"employmentPlace" : "itigris",
"driver" : true,
"computer" : true,
"assistantId" : 1000000008,
"feedback" : "new feedback",
"clientCardId" : 8012,
"vipDiscount" : 15.0,
"ordersSum" : 100.0,
"smsAccepted" : true,
"emailAccepted" : true,
"phoneAccepted" : true,
"mailAccepted" : true,
"whatsappAccepted" : true,
"maxAccepted" : false,
"contractId" : null,
"contractDate" : null,
"initialOrdersSum" : null,
"mobileAppLastUsage" : null,
"comment" : "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, p333ere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestib",
"deleted" : false,
"federalSubjectCode" : null,
"snilsVerificationStatus" : null,
"mobileClient" : false,
"clReplacementDiscountDate" : "2023-08-01"
}
Ответ
HTTP/1.1 200 OK
{
"id" : 1000110394,
"firstName" : "Иван",
"familyName" : "Иванов",
"patronymicName" : "Петрович",
"city" : "Милан",
"address" : "street 1",
"email" : "some_address@itigris.ru",
"birthdayDay" : 1,
"birthdayMonth" : 5,
"birthdayYear" : 1965,
"tel1" : "79990102233",
"tel2" : "-",
"gender" : false,
"passportNumber" : "1234567890",
"snilsNumber" : "116-973-385 89",
"snilsIssueOn" : "2020-10-10",
"passportIssueOn" : "2020-10-10",
"passportIssuedBy" : "Брагинский РОВД Гомельской области",
"informationSource" : "Проходил мимо",
"comment" : "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, p333ere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestib",
"profession" : "tester",
"employmentPlace" : "itigris",
"driver" : true,
"computer" : true,
"smsAccepted" : true,
"emailAccepted" : true,
"phoneAccepted" : true,
"mailAccepted" : true,
"whatsappAccepted" : true,
"maxAccepted" : false,
"deleted" : true,
"vipDiscount" : null,
"initialOrdersSum" : 0.0,
"ordersSum" : 100.0,
"mobileAppLastUsage" : null,
"contractId" : null,
"contractDate" : null,
"clientCard" : null,
"assistant" : {
"id" : 1000000008,
"firstName" : "Женек",
"familyName" : "Балашов",
"patronymicName" : "Оптовый",
"fullName" : "Балашов Женек Оптовый",
"shortName" : "Балашов Ж. О."
},
"lastUpdatedAt" : "2026-05-19T11:40:06.162724",
"feedback" : "new feedback",
"lastSeen" : null,
"snilsVerificationStatus" : null,
"federalSubjectCode" : null,
"mobileClient" : false,
"clReplacementDiscountDate" : "2023-08-01"
}
Поля
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
| firstName | String | firstName | Длина от 0 до 30 символов включительно. Обязательное поле, не должно быть пустым |
| familyName | String | familyName | Длина от 0 до 30 символов включительно. Обязательное поле, не должно быть пустым |
| patronymicName | String | patronymicName | Длина от 0 до 30 символов включительно |
| city | String | возможные города (которые можно использовать или нет) находятся здесь | |
| address | String | address | Длина от 0 до 280 символов включительно |
| String | Длина от 0 до 50 символов включительно. Должен быть корректный адрес электронной почты |
||
| birthdayDay | Number | birthdayDay | |
| birthdayMonth | Number | birthdayMonth | |
| birthdayYear | Number | birthdayYear | |
| tel1 | String | tel1 | Длина от 0 до 20 символов включительно. Обязательное поле, не должно быть пустым |
| tel2 | String | tel2 | Длина от 0 до 20 символов включительно |
| gender | Boolean | gender | Обязательное поле |
| passportNumber | String | passportNumber | Длина от 0 до 150 символов включительно |
| informationSource | String | возможные источники информации находятся здесь | |
| comment | String | comment | Длина от 0 до 2000 символов включительно |
| profession | String | profession | Длина от 0 до 50 символов включительно |
| employmentPlace | String | employmentPlace | Длина от 0 до 100 символов включительно |
| driver | Boolean | driver | |
| computer | Boolean | computer | |
| smsAccepted | Boolean | smsAccepted | |
| emailAccepted | Boolean | emailAccepted | |
| whatsappAccepted | Boolean | whatsappAccepted | Обязательное поле |
| phoneAccepted | Boolean | phoneAccepted | |
| mailAccepted | Boolean | mailAccepted | |
| deleted | Boolean | deleted | |
| vipDiscount | Number | vipDiscount | |
| clReplacementDiscountDate | String | clReplacementDiscountDate | |
| initialOrdersSum | Number | initialOrdersSum | Должно быть не меньше 0. Обязательное поле |
| ordersSum | Number | ordersSum | Должно быть не меньше 0. Обязательное поле |
| isMobileClient | Boolean | isMobileClient | |
| mobileAppLastUsage | String | mobileAppLastUsage | |
| contractId | String | contractId | Длина от 0 до 100 символов включительно |
| contractDate | String | contractDate | |
| clientCardId | Number | как проверить номер clientCard, читайте здесь | |
| assistantId | Number | ассистент клиента, список ассистентов можно получить здесь |
Поля
| Путь | Тип | Описание |
|---|---|---|
| firstName | String | firstName |
| familyName | String | familyName |
| patronymicName | String | patronymicName |
| city | String | city |
| address | String | address |
| String | ||
| birthdayDay | Number | birthdayDay |
| birthdayMonth | Number | birthdayMonth |
| birthdayYear | Number | birthdayYear |
| tel1 | String | tel1 |
| tel2 | String | tel2 |
| gender | Boolean | gender |
| passportNumber | String | passportNumber |
| informationSource | String | informationSource |
| comment | String | comment |
| profession | String | profession |
| employmentPlace | String | employmentPlace |
| driver | Boolean | driver |
| computer | Boolean | computer |
| smsAccepted | Boolean | smsAccepted |
| emailAccepted | Boolean | emailAccepted |
| whatsappAccepted | Boolean | whatsappAccepted |
| phoneAccepted | Boolean | phoneAccepted |
| mailAccepted | Boolean | mailAccepted |
| deleted | Boolean | deleted |
| vipDiscount | Number | vipDiscount |
| clReplacementDiscountDate | String | clReplacementDiscountDate |
| initialOrdersSum | Number | initialOrdersSum |
| ordersSum | Number | ordersSum |
| isMobileClient | Boolean | isMobileClient |
| mobileAppLastUsage | String | mobileAppLastUsage |
| contractId | String | contractId |
| contractDate | String | contractDate |
| clientCardId | Number | clientCardId |
| assistant | Object | assistant |
| assistant.id | Number | ID пользователя |
| assistant.firstName | String | имя пользователя (firstName) |
| assistant.familyName | String | фамилия пользователя (familyName) |
| assistant.patronymicName | String | отчество пользователя (patronymicName) |
Телефоны клиента
Метод: GET /api/v2/clients/{clientId}/phones
Возвращает телефоны клиента (основной и дополнительный).
Запрос
GET /api/v2/clients/1000000046/phones HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| clientId | clientId |
Ответ
HTTP/1.1 200 OK
{
"phone" : "89990608500"
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| phone | String | номер телефона |
E-mail клиента
Метод: GET /api/v2/clients/{clientId}/email
Возвращает адрес электронной почты клиента.
Запрос
GET /api/v2/clients/1000000224/email HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| clientId | clientId |
Ответ
HTTP/1.1 200 OK
{
"email" : "li_m_u_r@mail.ru"
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| String | Email клиента |
Карточка клиента (сводная информация)
Метод: GET /api/v2/clients/{clientId}/info
Возвращает подробную информацию о клиенте: персональные данные, контакты, согласия на рассылку, суммы заказов, карту клиента, ассистента и т. д.
Запрос
GET /api/v2/clients/1000110401/info HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| clientId | clientId |
Ответ
HTTP/1.1 200 OK
{
"id" : 1000110401,
"fullName" : "Musk Elon Reeve",
"lastSeen" : "2026-05-19T00:00:00",
"gender" : true,
"age" : 54,
"passportNumber" : "0000 000000",
"snilsNumber" : "116-973-385 89",
"snilsIssueOn" : "2020-10-10",
"passportIssueOn" : "2020-10-10",
"passportIssuedBy" : "Брагинский РОВД Гомельской области",
"city" : "California",
"address" : "Hawthorne, 1 Rocket Rd",
"tel1" : "79990102233",
"tel2" : "-",
"email" : "some_address@itigris.ru",
"profession" : "engineer",
"employmentPlace" : "SpaceX, Tesla",
"phoneAccepted" : false,
"mailAccepted" : false,
"smsAccepted" : false,
"emailAccepted" : false,
"whatsappAccepted" : false,
"maxAccepted" : false,
"hasMedicalCharts" : false,
"assistant" : {
"id" : 9000000008,
"firstName" : "topmanager",
"familyName" : "topmanager",
"patronymicName" : "topmanager",
"fullName" : "topmanager topmanager topmanager",
"shortName" : "topmanager t. t."
},
"informationSource" : null,
"vipDiscount" : null,
"ordersSum" : 0.0,
"comment" : null,
"contractId" : "12345",
"contractDate" : "2026-05-19",
"driver" : false,
"computer" : false,
"deleted" : true,
"agreementAcception" : false,
"clientCard" : {
"id" : 9876,
"sum" : 15000.0,
"bonusesSum" : 0,
"discount" : {
"cardId" : 9876,
"cardSum" : 15000.0,
"accessories" : 5.0,
"contactLenses" : 0.0,
"glasses" : 5.0,
"sunglasses" : 5.0,
"lenses" : 5.0,
"extras" : 0.0,
"services" : 0.0
}
},
"feedback" : null,
"birthday" : "1971-06-28",
"birthdayDay" : 28,
"birthdayMonth" : 6,
"birthdayYear" : 1971,
"updatedOn" : null,
"clReplacementDiscountDate" : "2026-06-02"
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| fullName | String | Полное имя в правильном формате (ФИО или ИОФ, в зависимости от региона) |
| lastSeen | String | Время и дата последнего посещения (последнего совершенного заказа) |
| gender | Boolean | Пол. true = мужчина, false - женщина |
| birthday | String | День рождения |
| age | Number | Возраст в полных годах |
| passportNumber | String | Серия и номер пасспорта через пробел |
| city | String | Название города |
| address | String | Адресс |
| tel1 | String | Основной телефон |
| tel2 | String | Дополнительный телефон |
| String | Почта | |
| profession | String | Профессия |
| employmentPlace | String | Место работы |
| phoneAccepted | Boolean | Согласие на звонки |
| mailAccepted | Boolean | Согласие на получение писем (бумажных) |
| smsAccepted | Boolean | Согласие на СМС |
| emailAccepted | Boolean | Согласие на получение электронных писем |
| whatsappAccepted | Boolean | Согласие на получение whatsapp сообщений |
| assistant | Object | Ассистент клиента |
| informationSource | String | Откуда узнал об оптике? |
| clReplacementDiscountDate | String | Дата скидки на контактные линзы клиента |
| vipDiscount | Number | VIP скидка |
| ordersSum | Number | Общая сумма заказов |
| comment | String | Комментарий |
| contractId | String | Номер медицинского договора |
| contractDate | String | Дата заключения медицинского договора |
| driver | Boolean | Является ли клиент водителем |
| computer | Boolean | Пользуется ли клиент компьютером постоянно |
| deleted | Boolean | Был ли клиент удален |
| agreementAcception | Boolean | Принял ли клиент согласие |
| clientCard | Object | Карта клиента |
| clientCard.id | Number | Id карты |
| clientCard.sum | Number | Сумма на карте |
| clientCard.bonusesSum | Number | Сумма бонусов на карте |
| clientCard.discount | Object | Скидки |
| clientCard.discount.accessories | Number | Скидка на аксессуары |
| clientCard.discount.contactlenses | Number | Скидка на КЛ |
| clientCard.discount.glasses | Number | Скидка на очки |
| clientCard.discount.sunglasses | Number | Скидка на солнечные очки |
| clientCard.discount.lenses | Number | Скидка на линзы |
| clientCard.discount.extras | Number | Скидка на массовку |
| clientCard.discount.services | Number | Скидка на услуги |
| updatedOn | String | Дата последнего изменения клиента (максимальная дата из комментариев с топиками изменений) |
Поиск клиентов (журнал клиентов)
Метод: GET /api/v2/clients
Возвращает страницу клиентов по заданным условиям поиска. Сортировка по умолчанию — registrationDate DESC. Поддерживается пагинация (см. раздел 1.3).
Запрос
GET /api/v2/clients?clientSearchType=FULL_NAME&deleted=false&searchString=%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2%20%D0%98%D0%B2%D0%B0%D0%BD%20%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%87&sort=registrationDate,asc HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| clientSearchType | Может принимать одно из значений: [FULL_NAME, PHONE_NUMBER, CARD_NUMBER, PRESCRIPTION_ID, CL_PRESCRIPTION_ID] |
| searchString | Строка, используемая для поиска клиента |
| deleted | Показывать ТОЛЬКО удалённые или ТОЛЬКО неудалённые |
| pageable | Описание постраничной навигации |
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"id": 1000000011,
"familyName": "Иванов",
"firstName": "Иван",
"patronymicName": "Иванович",
"phoneNumber": "+79211192854",
"registrationDate": "2019-01-09",
"agreementAcception": false,
"comment": null,
"feedback": null,
"birthday": null,
"birthdayDay": null,
"birthdayMonth": null,
"birthdayYear": null,
"snilsNumber": null,
"snilsIssueOn": null,
"clientCardId": null,
"relationCardInfo": null,
"representatives": null
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 10,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 1,
"totalElements": 6,
"last": true,
"size": 10,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 6,
"first": true,
"empty": false
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| content[]. | Array | массив счетов |
| [].id | Number | ID клиента |
| [].familyName | String | Фамилия клиента (familyName) |
| [].firstName | String | Имя клиента (firstName) |
| [].patronymicName | String | Отчество клиента (patronymicName) |
| [].birthday | String | Дата рождения клиента |
| [].phoneNumber | String | Телефон клиента (phoneNumber) |
| [].registrationDate | String | Дата регистрации клиента (registrationDate) |
| [].agreementAcception | Boolean | Принимает ли клиент соглашения? |
Статистика покупок клиента
Метод: GET /api/v2/clients/{clientId}/shopping-statistics
Возвращает агрегированную статистику покупок клиента: суммы и количество заказов по категориям товаров и периодам, данные по бонусам и скидкам.
Запрос
GET /api/v2/clients/9000200099/shopping-statistics HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| clientId | clientId |
Ответ
HTTP/1.1 200 OK
{
"countOfGlasses" : 0,
"countOfSunglasses" : 0,
"countOfContactLenses" : 0,
"countOfReadyGlasses" : 0,
"countOfAccessories" : 0,
"countOfServes" : 0,
"sumOfGlasses" : 0.0,
"sumOfSunglasses" : 0.0,
"sumOfContactLenses" : 0.0,
"sumOfReadyGlasses" : 0.0,
"sumOfAccessories" : 0.0,
"sumOfServes" : 0.0,
"recentOrders" : [ ],
"totalCountOfOrders" : 2,
"totalSumOfOrders" : 2250.0,
"frequencyPerYear" : "1 раз в нед.",
"maxPriceGlasses" : 0.0,
"minPriceGlasses" : 0.0
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| countOfGlasses | Number | Количество заказов очков |
| countOfSunglasses | Number | Количество заказов солнечных очков |
| countOfContactLenses | Number | Количество заказов контактных линз |
| countOfReadyGlasses | Number | Количество заказов готовых очков |
| countOfAccessories | Number | Количество заказов аксессуаров |
| countOfServes | Number | Количество заказов услуг |
| sumOfGlasses | Number | Сумма заказов очков |
| sumOfSunglasses | Number | Сумма заказов солнечных очков |
| sumOfContactLenses | Number | Сумма заказов контактных линз |
| sumOfReadyGlasses | Number | Сумма заказов готовых очков |
| sumOfAccessories | Number | Сумма заказов аксессуаров |
| sumOfServes | Number | Сумма заказов услуг |
| recentOrders | Array | Массив последних покупок |
| recentOrders[].sellableCategory | String | Категория товара |
| recentOrders[].date | String | Дата покупки |
| recentOrders[].sum | Number | Сумма покупки |
| totalCountOfOrders | Number | Общее количество заказов |
| totalSumOfOrders | Number | Общая сумма всех заказов |
| frequencyPerYear | String | Частота заказов в год |
| maxPriceGlasses | Number | Максимальная цена заказа очков |
| minPriceGlasses | Number | Минимальная цена заказа очков |
Подтверждение анкеты клиента
Метод: POST /api/v2/clients/{clientId}/agree
Используется для подтверждения анкеты ранее созданного клиента (например, для анкет, созданных до включения соответствующей настройки). Тело запроса отсутствует. Если клиент уже подписал анкету, возвращается 400 Bad Request.
Запрос
POST /api/v2/clients/1000110393/agree HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Ответ
HTTP/1.1 200 OK
Параметры
| Параметр | Описание |
|---|---|
| clientId | clientId |
Источники информации о клиенте
Метод: GET /api/v2/clients/information-source
Возвращает варианты ответа на вопрос «откуда узнал об оптике» — справочник значений, которые можно записать в поле informationSource карточки клиента.
Запрос
GET /api/v2/clients/information-source HTTP/1.1
Ответ
HTTP/1.1 200 OK
[ "Проходил мимо", "Реклама", "Рекомендации", "Сайт", "Социальные сети" ]
Поля
| Путь | Тип | Описание |
|---|---|---|
| [] | Array | массив возможных источников информации |
Заказы клиента
Метод: GET /api/v2/clients/{clientId}/orders
Возвращает страницу заказов клиента с фильтрацией по статусам и сортировкой. Поддерживается пагинация (см. раздел 1.3).
Запрос
GET /api/v2/clients/1000000010/orders?statuses=ACCEPTED&sort=createdAt HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| clientId | ID клиента |
Параметры
| Параметр | Описание |
|---|---|
| status | статусы заказов в фильтре |
| pageable | объект постраничной навигации, содержащий информацию о постраничной навигации и сортировке |
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"id": 1000000001,
"createdAt": "2018-10-04T18:31:00.000Z",
"clientId": 1000000010,
"type": "GLASSES",
"departmentName": "Первый магазин",
"productionDepartmentName": null,
"status": "ACCEPTED",
"sum": 600.0,
"paidSum": 600.0,
"comment": ""
}
],
"totalPages": 1,
"totalElements": 2,
"size": 10,
"page": 0,
"number": 0,
"pageable": {
"pageNumber": 0,
"pageSize": 10
},
"totalResult": null
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| content[]. | Array | Массив заказов |
| [].id | Number | id |
| [].createdAt | String | createdAt |
| [].type | String | type |
| [].departmentName | String | departmentName |
| [].productionDepartmentName | String | productionDepartmentName |
| [].status | String | status |
| [].sum | Number | Сумма скидки по заказу |
| [].paidSum | Number | Сумма, оплаченная за заказ |
Обновление основного телефона клиента (tel1)
Метод: PUT /api/v2/clients/{clientId}/tel1
Меняет основной телефон клиента (tel1) и возвращает обновлённую карточку клиента.
Запрос
PUT /api/v2/clients/1000000046/tel1 HTTP/1.1
{
"tel1" : "89990608500"
}
Параметры
| Параметр | Описание |
|---|---|
| clientId | clientId |
Ответ
HTTP/1.1 200 OK
{
"id" : 1000000046,
"firstName" : "Оксана",
"familyName" : "-",
"patronymicName" : "-",
"city" : "",
"address" : "",
"email" : "",
"birthdayDay" : null,
"birthdayMonth" : null,
"birthdayYear" : null,
"tel1" : "89990608500",
"tel2" : "",
"gender" : false,
"passportNumber" : null,
"snilsNumber" : "116-973-385 89",
"snilsIssueOn" : "1990-10-10",
"passportIssueOn" : null,
"passportIssuedBy" : null,
"informationSource" : null,
"comment" : "ПАРТНЕРСКАЯ ПРОГРАММА",
"profession" : "",
"employmentPlace" : "",
"driver" : false,
"computer" : false,
"smsAccepted" : true,
"emailAccepted" : true,
"phoneAccepted" : false,
"mailAccepted" : false,
"whatsappAccepted" : false,
"maxAccepted" : false,
"deleted" : false,
"vipDiscount" : 0.0,
"initialOrdersSum" : 0.0,
"ordersSum" : 0.0,
"mobileAppLastUsage" : null,
"contractId" : null,
"contractDate" : null,
"clientCard" : {
"id" : 9031878823,
"sum" : 0.0,
"bonusesSum" : 0,
"discount" : {
"cardId" : 9031878823,
"cardSum" : 0.0,
"accessories" : 0.0,
"contactLenses" : 0.0,
"glasses" : 0.0,
"sunglasses" : 0.0,
"lenses" : 0.0,
"extras" : 0.0,
"services" : 0.0
}
},
"assistant" : null,
"lastUpdatedAt" : "2026-05-19T11:40:09.6234",
"feedback" : null,
"lastSeen" : null,
"snilsVerificationStatus" : null,
"federalSubjectCode" : null,
"mobileClient" : false,
"clReplacementDiscountDate" : null
}
Изменения клиентов за период
Метод: GET /api/v2/clients/changes
Возвращает клиентов, данные которых изменились за указанный период. Пагинация по умолчанию: page=0, size=20; сортировка по умолчанию — lastChangedDate,desc.
Пагинация по умолчанию: page=0, size=20
Запрос
GET /api/v2/clients/changes?fromOn=2020-01-01&toOn=2024-12-31&page=0&size=10&sort=lastChangedDate%2Cdesc HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| fromOn | Начало периода фильтрации (LocalDate, формат: YYYY-MM-DD). Если не указан, фильтрация с начала истории |
| toOn | Конец периода фильтрации (LocalDate, формат: YYYY-MM-DD). Если не указан, фильтрация до текущей даты |
| page | Номер страницы (начиная с 0). По умолчанию: 0 |
| size | Размер страницы. По умолчанию: 20 |
| sort | Поле и направление сортировки (например: lastChangedDate,desc или id,asc). По умолчанию: lastChangedDate,desc |
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"id": 1000110379,
"fullName": "Пет Иван Тест",
"lastSeen": "2022-09-05T13:14:00",
"gender": true,
"age": null,
"passportNumber": null,
"snilsNumber": null,
"snilsIssueOn": null,
"passportIssueOn": null,
"passportIssuedBy": null,
"city": "Псков",
"address": null,
"tel1": "7777777777",
"tel2": null,
"email": null,
"profession": null,
"employmentPlace": null,
"phoneAccepted": false,
"mailAccepted": false,
"smsAccepted": false,
"emailAccepted": false,
"whatsappAccepted": false,
"maxAccepted": false,
"hasMedicalCharts": true,
"assistant": null,
"informationSource": null,
"vipDiscount": null,
"ordersSum": 2.0,
"comment": null,
"contractId": null,
"contractDate": null,
"driver": false,
"computer": false,
"deleted": false,
"agreementAcception": true,
"clientCard": null,
"feedback": null,
"birthday": null,
"birthdayDay": null,
"birthdayMonth": null,
"birthdayYear": null,
"updatedOn": "2022-09-05",
"clReplacementDiscountDate": null
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 10,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 3,
"totalElements": 27,
"last": false,
"size": 10,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 10,
"first": true,
"empty": false
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| content[]. | Array | Массив клиентов с изменениями |
| totalElements | Number | Общее количество измененных клиентов |
| totalPages | Number | Общее количество страниц |
| size | Number | Размер страницы |
| number | Number | Номер текущей страницы (0-based) |
| first | Boolean | Является ли это первой страницей |
| last | Boolean | Является ли это последней страницей |
| content[].fullName | String | Полное имя в правильном формате (ФИО или ИОФ, в зависимости от региона) |
| content[].lastSeen | String | Время и дата последнего посещения (последнего совершенного заказа) |
| content[].gender | Boolean | Пол. true = мужчина, false - женщина |
| content[].birthday | String | День рождения |
| content[].age | Number | Возраст в полных годах |
| content[].passportNumber | String | Серия и номер пасспорта через пробел |
| content[].city | String | Название города |
| content[].address | String | Адресс |
| content[].tel1 | String | Основной телефон |
| content[].tel2 | String | Дополнительный телефон |
| content[].email | String | Почта |
| content[].profession | String | Профессия |
| content[].employmentPlace | String | Место работы |
| content[].phoneAccepted | Boolean | Согласие на звонки |
| content[].mailAccepted | Boolean | Согласие на получение писем (бумажных) |
| content[].smsAccepted | Boolean | Согласие на СМС |
| content[].emailAccepted | Boolean | Согласие на получение электронных писем |
| content[].whatsappAccepted | Boolean | Согласие на получение whatsapp сообщений |
| content[].assistant | Object | Ассистент клиента |
| content[].informationSource | String | Откуда узнал об оптике? |
| content[].clReplacementDiscountDate | String | Дата скидки на контактные линзы клиента |
| content[].vipDiscount | Number | VIP скидка |
| content[].ordersSum | Number | Общая сумма заказов |
| content[].comment | String | Комментарий |
| content[].contractId | String | Номер медицинского договора |
| content[].contractDate | String | Дата заключения медицинского договора |
| content[].driver | Boolean | Является ли клиент водителем |
| content[].computer | Boolean | Пользуется ли клиент компьютером постоянно |
| content[].deleted | Boolean | Был ли клиент удален |
| content[].agreementAcception | Boolean | Принял ли клиент согласие |
| content[].clientCard | Object | Карта клиента |
| content[].clientCard.id | Number | Id карты |
| content[].clientCard.sum | Number | Сумма на карте |
| content[].clientCard.bonusesSum | Number | Сумма бонусов на карте |
| content[].clientCard.discount | Object | Скидки |
| content[].clientCard.discount.accessories | Number | Скидка на аксессуары |
| content[].clientCard.discount.contactlenses | Number | Скидка на КЛ |
| content[].clientCard.discount.glasses | Number | Скидка на очки |
| content[].clientCard.discount.sunglasses | Number | Скидка на солнечные очки |
| content[].clientCard.discount.lenses | Number | Скидка на линзы |
| content[].clientCard.discount.extras | Number | Скидка на массовку |
| content[].clientCard.discount.services | Number | Скидка на услуги |
| content[].updatedOn | String | Дата последнего изменения клиента (максимальная дата из комментариев с топиками изменений) |
3.2. Комментарии клиентов (Clients comments)
Комментарии клиента
Метод: GET /api/v2/clients/{clientId}/comments
Возвращает страницу комментариев клиента. Поддерживается пагинация (см. раздел 1.3; в примере — size=3).
Сортировка по умолчанию — по дате создания, от новых к старым.
Запрос
GET /api/v2/clients/1000001527/comments?size=3 HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| clientId | Id клиента |
Параметры
| Параметр | Описание |
|---|---|
| pageable | Описание постраничной навигации |
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"id": 126070,
"clientId": 1000001527,
"user": {
"id": 9000000008,
"firstName": "topmanager",
"familyName": "topmanager",
"patronymicName": "topmanager",
"fullName": "topmanager topmanager topmanager",
"shortName": "topmanager t. t."
},
"createdOn": "2026-05-19",
"topic": "Test topic",
"content": "Test content"
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 3,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 20,
"totalElements": 58,
"last": false,
"size": 3,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 3,
"first": true,
"empty": false
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| content[]. | Array | Массив комментариев |
| [].id | Number | Id комментария |
| [].clientId | Number | Id клиента |
| [].user | Object | Пользователь (автор комментария) |
| [].createdOn | String | Дата создания |
| [].topic | String | Топик (заголовок) |
| [].content | String | Текст комментария |
3.3. Карта клиента (Clients Card)
Проверка существования карты по ID
Метод: POST /api/v2/clients/cards/{cardId}/check
Проверяет, существует ли карта клиента с переданным идентификатором. Тело запроса отсутствует. Если карта не найдена, возвращается ошибка (см. формат ошибок в разделе 1.4).
Запрос
POST /api/v2/clients/cards/9184048855/check HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Параметры
| Параметр | Описание |
|---|---|
| cardId | предполагаемый ID карты клиента |
Ответ
HTTP/1.1 200 OK
3.4. Фильтры клиентов (Client filters)
Методы для работы с сохранёнными фильтрами клиентов: получение списка фильтров, применение фильтра, применение фильтра для рассылки.
Список фильтров клиентов
Метод: GET /api/v2/clients/filters
Возвращает страницу сохранённых фильтров. По умолчанию — сортировка по имени, 30 элементов на странице.
Запрос
GET /api/v2/clients/filters?authorId=1000000001&name=by&isFavourite=false HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| name | Имя фильтра |
| authorId | ИД автора фильтра |
| isFavourite | Выводить ли только избранные |
| pageable | Описание постраничной навигации |
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"id": 9999990011,
"name": "Filter by services",
"author": "Кадын Тимофей",
"deleted": false,
"isFavourite": false,
"hasCallTasks": false,
"hasSmsTasks": false,
"hasEmailTasks": false,
"hasBonusesByFilters": false
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 30,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 1,
"totalElements": 2,
"last": true,
"size": 30,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 2,
"first": true,
"empty": false
}
Фильтр по ID
Метод: GET /api/v2/clients/filters/{filterId}
Возвращает полное описание фильтра по его ID: параметры клиента, параметры заказов, параметры рецептов, параметры проданных и непроданных товаров.
Запрос
GET /api/v2/clients/filters/9999990000 HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| filterId | ИД корневой сущности фильтра |
Ответ
HTTP/1.1 200 OK
{
"id": 9999990000,
"name": "Filter one",
"author": {
"id": 1000000001,
"label": "Кадын Тимофей"
},
"clientParameters": {
"id": 9900000000,
"firstName": "Name",
"familyName": "Not-name",
"gender": "FEMALE",
"ageFrom": 19,
"ageTo": 22,
"birthdayFrom": "03.01",
"birthdayTo": "01.02",
"birthdayInDays": 3,
"hasOrder": false,
"orderSumFrom": 110.0,
"orderSumTo": 11000.5,
"hasCard": false,
"cardSumFrom": 30.8,
"cardSumTo": 7000.0,
"assistant": {
"id": 1000000000,
"label": "Itigris Itigris Itigris"
},
"lastCallFrom": "2024-02-01",
"lastCallTo": "2024-02-11",
"lastSmsFrom": "2024-02-01",
"lastSmsTo": "2024-02-20",
"lastEmailFrom": "2023-02-01",
"lastEmailTo": "2024-02-20",
"lastPrivateSmsFrom": "2023-02-01",
"lastPrivateSmsTo": "2023-03-25",
"daysToOffer": 2,
"cardEditedDays": 12,
"mobile": false,
"daysToExpiration": 7,
"cities": [
"Москва",
"Санкт-Петербург"
]
},
"notMadeOrderParameters": {
"id": 9990000000,
"lastOrderDaysAgoFrom": 1,
"lastOrderDaysAgoTo": 10,
"status": "FINISHED",
"sumFrom": 3300.0,
"sumTo": 13000.0,
"isClientPrescription": false,
"goodTypes": [],
"orderTypes": [],
"departments": []
},
"madeOrderParameters": {
"id": 9990000001,
"lastOrderDaysAgoFrom": null,
"lastOrderDaysAgoTo": null,
"status": null,
"sumFrom": null,
"sumTo": null,
"isClientPrescription": true,
"goodTypes": [
"ACCESSORY"
],
"orderTypes": [
"GLASSES",
"REPAIR"
],
"departments": [
{
"id": 1000000003,
"name": "Первый магазин"
}
]
},
"notSoldGoodParameters": {
"id": 9999000000,
"lastOrderDaysAgoFrom": 2,
"lastOrderDaysAgoTo": 5,
"type": "ACCESSORY",
"isReturned": true,
"orderTypes": [
"CONTACT_LENS",
"GLASSES"
],
"categories": [
"Category 1",
"Category 2"
]
},
"soldGoodParameters": {
"id": 9999000001,
"lastOrderDaysAgoFrom": 4,
"lastOrderDaysAgoTo": 11,
"type": "CONTACT_LENS",
"isReturned": false,
"orderTypes": [
"CONTACT_LENS"
],
"names": [
"Ava",
"Bio"
],
"wearingPeriods": [
"2 день",
"2 месяц"
],
"packageNums": [
3,
4
],
"dioptresFrom": -1.5,
"dioptresTo": 1.75,
"addidations": [
"+2,00",
"0",
"+2,00 D"
],
"cylinders": [
-0.3,
1.5
],
"colors": [
"Sky",
"Yellow"
]
},
"notMadePrescriptionParameters": {
"id": 9999900000,
"purpose": null,
"doctor": null,
"lastOrderDaysAgo": null,
"type": "CONTACT_LENS",
"inUse": true,
"dioptresFrom": null,
"dioptresTo": null,
"cylinders": null,
"addidations": null
},
"madePrescriptionParameters": {
"id": 9999900001,
"purpose": "Для вождения",
"doctor": {
"id": 1000000023,
"label": "Новый Доктор"
},
"lastOrderDaysAgo": 3,
"type": "CONTACT_LENS",
"inUse": false,
"dioptresFrom": 9.5,
"dioptresTo": 11.9,
"cylinders": [
-2.35,
1.85
],
"addidations": [
"+3.00 D",
"+3.00 N"
]
},
"createdAt": "2024-02-21T16:16:48.636",
"deleted": false
}
Справочные значения параметров фильтров
Метод: GET /api/v2/clients/filters/values
Возвращает возможные значения параметров фильтров: полы, города, ассистенты, департаменты, статусы заказов, типы рецептов, врачи, назначения, типы товаров, типы заказов, значения цилиндров и аддидаций. Query-параметров у метода нет.
Запрос
GET /api/v2/clients/filters/values HTTP/1.1
Ответ
HTTP/1.1 200 OK
{
"clientValues": {
"genders": [
"MALE",
"FEMALE"
],
"cities": [
"",
"California",
"Москва",
"Псков",
"Санкт-Петербург",
"Сыктывкар",
"Тула",
null
],
"assistants": [
{
"id": 9000000003,
"label": "doctor doctor doctor"
}
]
},
"orderValues": {
"departments": [
{
"id": 1000000007,
"name": "Второй магазин"
}
],
"statuses": [
"CREATED",
"FINISHED"
]
},
"prescriptionValues": {
"type": [
"GLASSES",
"CONTACT_LENS"
],
"doctors": [
{
"id": 9000000003,
"label": "doctor doctor doctor"
}
],
"purposes": [
"Для близи",
"Для вождения",
"Для дали",
"Для постоянного ношения",
"Для работы за компьютером (офисные)"
]
},
"goodTypes": [
"ACCESSORY",
"CONTACT_LENS",
"EXTRA",
"GLASSES",
"LENS",
"SUNGLASSES",
"SERVE"
],
"orderTypes": [
"SALE",
"REPAIR",
"GLASSES",
"CONTACT_LENS",
"CHECK_VISION"
],
"cylinders": [
"-0,25",
"-0,5",
"-0,75",
"-1,0",
"-1,25",
"-1,5",
"-1,75",
"-2,0",
"-2,25",
"-2,5",
"-2,75",
"-3,0",
"-3,25",
"-3,5",
"-3,75",
"-4,0",
"-4,25",
"-4,5",
"-4,75",
"-5,0",
"-5,25",
"-5,5",
"-5,75",
"-6,0",
"-6,25",
"-6,5",
"-6,75",
"-7,0",
"-7,25",
"-7,5",
"-7,75",
"-8,0",
"-8,25",
"-8,5",
"-8,75",
"-9,0",
"-9,25",
"-9,5",
"-9,75",
"-10,0",
"-10,25",
"-10,5",
"-10,75",
"-11,0",
"-11,25",
"-11,5",
"-11,75",
"-12,0",
"-12,25",
"-12,5",
"-12,75",
"-13,0",
"-13,25",
"-13,5",
"-13,75",
"-14,0",
"-14,25",
"-14,5",
"-14,75",
"-15,0",
"-15,25",
"-15,5",
"-15,75",
"-16,0",
"-16,25",
"-16,5",
"-16,75",
"-17,0",
"-17,25",
"-17,5",
"-17,75",
"-18,0",
"-18,25",
"-18,5",
"-18,75",
"-19,0",
"-19,25",
"-19,5",
"-19,75",
"-20,0",
"-20,25",
"-20,5",
"-20,75",
"-21,0",
"-21,25",
"-21,5",
"-21,75",
"-22,0",
"-22,25",
"-22,5",
"-22,75",
"-23,0",
"-23,25",
"-23,5",
"-23,75",
"-24,0",
"-24,25",
"-24,5",
"-24,75",
"-25,0",
"-25,25",
"-25,5",
"-25,75",
"-26,0",
"-26,25",
"-26,5",
"-26,75",
"-27,0",
"-27,25",
"-27,5",
"-27,75",
"-28,0",
"-28,25",
"-28,5",
"-28,75",
"-29,0",
"-29,25",
"-29,5",
"-29,75",
"-30,0",
"0",
"+0,25",
"+0,5",
"+0,75",
"+1,0",
"+1,25",
"+1,5",
"+1,75",
"+2,0",
"+2,25",
"+2,5",
"+2,75",
"+3,0",
"+3,25",
"+3,5",
"+3,75",
"+4,0",
"+4,25",
"+4,5",
"+4,75",
"+5,0",
"+5,25",
"+5,5",
"+5,75",
"+6,0",
"+6,25",
"+6,5",
"+6,75",
"+7,0",
"+7,25",
"+7,5",
"+7,75",
"+8,0",
"+8,25",
"+8,5",
"+8,75",
"+9,0",
"+9,25",
"+9,5",
"+9,75",
"+10,0",
"+10,25",
"+10,5",
"+10,75",
"+11,0",
"+11,25",
"+11,5",
"+11,75",
"+12,0",
"+12,25",
"+12,5",
"+12,75",
"+13,0",
"+13,25",
"+13,5",
"+13,75",
"+14,0",
"+14,25",
"+14,5",
"+14,75",
"+15,0",
"+15,25",
"+15,5",
"+15,75",
"+16,0",
"+16,25",
"+16,5",
"+16,75",
"+17,0",
"+17,25",
"+17,5",
"+17,75",
"+18,0",
"+18,25",
"+18,5",
"+18,75",
"+19,0",
"+19,25",
"+19,5",
"+19,75",
"+20,0",
"+20,25",
"+20,5",
"+20,75",
"+21,0",
"+21,25",
"+21,5",
"+21,75",
"+22,0",
"+22,25",
"+22,5",
"+22,75",
"+23,0",
"+23,25",
"+23,5",
"+23,75",
"+24,0",
"+24,25",
"+24,5",
"+24,75",
"+25,0",
"+25,25",
"+25,5",
"+25,75",
"+26,0",
"+26,25",
"+26,5",
"+26,75",
"+27,0",
"+27,25",
"+27,5",
"+27,75",
"+28,0",
"+28,25",
"+28,5",
"+28,75",
"+29,0",
"+29,25",
"+29,5",
"+29,75",
"+30,0"
],
"addidations": [
"+2.00",
"high",
"low",
"med"
]
}
Поля ответа (ClientFilterValues — только верхний уровень)
| Путь | Тип | Описание |
|---|---|---|
| clientValues | Object | Справочники по клиенту: genders — полы, cities — города, assistants — сотрудники (id, label) |
| orderValues | Object | Справочники по заказам: departments — департаменты (id, name), statuses — статусы заказов |
| prescriptionValues | Object | Справочники по рецептам: type — типы рецептов, doctors — врачи (id, label), purposes — назначения |
| goodTypes | Array<String> | Типы товаров |
| orderTypes | Array<String> | Типы заказов |
| cylinders | Array<String> | Значения цилиндра |
| addidations | Array<String> | Значения аддидации (имя поля в коде — addidations, с опечаткой) |
Справочные значения параметров по типу товара
Метод: GET /api/v2/clients/filters/goods/values
Возвращает возможные значения параметров фильтра для конкретного типа товара (например, наименования, периоды ношения, количество в упаковке).
Запрос
GET /api/v2/clients/filters/goods/values?type=CONTACT_LENS HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| type | Тип товара $.goodTypes |
Ответ
HTTP/1.1 200 OK
{
"names" : [ "1-DAY Acuvue Define", "1-DAY Acuvue Define Diag", "1-DAY Acuvue Moist", "1-DAY Acuvue Moist Diag", "1-DAY Acuvue Moist Multifocal", "1-DAY Acuvue Moist Multifocal Diag", "1-DAY Acuvue Moist for ASTIGMATISM", "1-DAY Acuvue Oasys", "1-DAY Acuvue Oasys Diag", "1-DAY Acuvue Oasys for ASTIGMATISM", "1-DAY Acuvue TruEye", "1-DAY Acuvue TruEye Diag", "1-Day Acuvue Oasys", "Acuvue 2", "Acuvue Advance", "Acuvue Oasys", "Acuvue Oasys Diag", "Acuvue Oasys for ASTIGMATISM", "Adria Season", "Air Optix Aqua", "Air Optix Aqua Multifocal", "Air Optix Colors", "Air Optix Colors Diag", "Air Optix Night & Day", "Air Optix Plus HydraGlyde", "Air Optix for ASTIGMATISM", "Avaira", "Biofinity", "Biofinity Diag", "Biofinity Multifocal Diag", "Biofinity Toric Diag", "Biotrue ONEday", "Clariti 1 Day Diag", "Clariti 1 day", "Color 2 tone", "Color 2Tone", "Color 3Tone", "Crazy", "Dailies Aqua Comfort+", "Dailies Total One", "Elegant Color", "Elegant Color 2Tone", "Free Eyes", "Free Eyes (Comfilcon A)", "Fresh Look ColorBlends", "Fresh Look Colors Diag", "Fresh Look Dimensions Diag", "FreshLook ColorBlends", "FreshLook Colors", "FreshLook Dimensions", "Glamorous Color", "Glamorous color", "Morning Q38", "MyDay Daily Disposable", "Optima", "Optima FW", "Prima BIO Bi-Focal", "PureVision 2", "Season", "Ultra" ],
"wearingPeriods" : [ "1 день", "1 месяц", "2 недели", "3 месяца", "30 дней", "6-12 месяцев", "90 дней", "не указано" ],
"packageNums" : [ 1, 2, 3, 4, 5, 6, 12, 30, 90 ],
"addidations" : [ "+2.00", "high", "low", "med" ],
"cylinders" : [ "-0,25", "-0,5", "-0,75", "-1,0", "-1,25", "-1,5", "-1,75", "-2,0", "-2,25", "-2,5", "-2,75", "-3,0", "-3,25", "-3,5", "-3,75", "-4,0", "-4,25", "-4,5", "-4,75", "-5,0", "-5,25", "-5,5", "-5,75", "-6,0", "-6,25", "-6,5", "-6,75", "-7,0", "-7,25", "-7,5", "-7,75", "-8,0", "-8,25", "-8,5", "-8,75", "-9,0", "-9,25", "-9,5", "-9,75", "-10,0", "-10,25", "-10,5", "-10,75", "-11,0", "-11,25", "-11,5", "-11,75", "-12,0", "-12,25", "-12,5", "-12,75", "-13,0", "-13,25", "-13,5", "-13,75", "-14,0", "-14,25", "-14,5", "-14,75", "-15,0", "-15,25", "-15,5", "-15,75", "-16,0", "-16,25", "-16,5", "-16,75", "-17,0", "-17,25", "-17,5", "-17,75", "-18,0", "-18,25", "-18,5", "-18,75", "-19,0", "-19,25", "-19,5", "-19,75", "-20,0", "-20,25", "-20,5", "-20,75", "-21,0", "-21,25", "-21,5", "-21,75", "-22,0", "-22,25", "-22,5", "-22,75", "-23,0", "-23,25", "-23,5", "-23,75", "-24,0", "-24,25", "-24,5", "-24,75", "-25,0", "-25,25", "-25,5", "-25,75", "-26,0", "-26,25", "-26,5", "-26,75", "-27,0", "-27,25", "-27,5", "-27,75", "-28,0", "-28,25", "-28,5", "-28,75", "-29,0", "-29,25", "-29,5", "-29,75", "-30,0", "0", "+0,25", "+0,5", "+0,75", "+1,0", "+1,25", "+1,5", "+1,75", "+2,0", "+2,25", "+2,5", "+2,75", "+3,0", "+3,25", "+3,5", "+3,75", "+4,0", "+4,25", "+4,5", "+4,75", "+5,0", "+5,25", "+5,5", "+5,75", "+6,0", "+6,25", "+6,5", "+6,75", "+7,0", "+7,25", "+7,5", "+7,75", "+8,0", "+8,25", "+8,5", "+8,75", "+9,0", "+9,25", "+9,5", "+9,75", "+10,0", "+10,25", "+10,5", "+10,75", "+11,0", "+11,25", "+11,5", "+11,75", "+12,0", "+12,25", "+12,5", "+12,75", "+13,0", "+13,25", "+13,5", "+13,75", "+14,0", "+14,25", "+14,5", "+14,75", "+15,0", "+15,25", "+15,5", "+15,75", "+16,0", "+16,25", "+16,5", "+16,75", "+17,0", "+17,25", "+17,5", "+17,75", "+18,0", "+18,25", "+18,5", "+18,75", "+19,0", "+19,25", "+19,5", "+19,75", "+20,0", "+20,25", "+20,5", "+20,75", "+21,0", "+21,25", "+21,5", "+21,75", "+22,0", "+22,25", "+22,5", "+22,75", "+23,0", "+23,25", "+23,5", "+23,75", "+24,0", "+24,25", "+24,5", "+24,75", "+25,0", "+25,25", "+25,5", "+25,75", "+26,0", "+26,25", "+26,5", "+26,75", "+27,0", "+27,25", "+27,5", "+27,75", "+28,0", "+28,25", "+28,5", "+28,75", "+29,0", "+29,25", "+29,5", "+29,75", "+30,0" ],
"colors" : [ "Amethyst", "Aqua", "BLUE", "Black", "Black out", "Blue", "Brilliant Blue", "Browen", "Brown", "Caribbean Aqua", "GREEN", "Gemstone Green", "Gold", "Gray", "Green", "Hazel", "Pacific Blue", "Pure Gold", "Pure Hazel", "Sapphire", "Sapphire Blue", "Sea Green", "Shimmer", "Sparkle", "Sterling Gray", "Sterling Grey", "TRUE SAPPHIRE", "TURQUOISE", "True Sapphire", "True sapphire", "Turquoise", "Violet", "~Aqua", "~Blue", "~Green" ]
}
Применение фильтра, переданного в запросе
Метод: POST /api/v2/clients/filters/apply
Возвращает клиентов, удовлетворяющих фильтру, который передан в теле запроса целиком (без сохранения фильтра). По умолчанию — 30 элементов на странице; доступна пагинация (см. раздел 1.3).
Запрос
POST /api/v2/clients/filters/apply HTTP/1.1
{
"clientParameters" : null,
"notMadeOrderParameters" : null,
"madeOrderParameters" : null,
"notSoldGoodParameters" : null,
"soldGoodParameters" : {
"id" : null,
"lastOrderDaysAgoFrom" : null,
"lastOrderDaysAgoTo" : null,
"type" : "LENS",
"isReturned" : false,
"orderTypes" : null,
"categories" : null,
"names" : null,
"wearingPeriods" : null,
"packageNums" : null,
"dioptresFrom" : -3.0,
"dioptresTo" : 1.0,
"addidations" : null,
"cylinders" : null,
"colors" : null,
"brands" : [ "Orma 15", "Access Easy A" ],
"targetGroups" : null,
"designs" : null,
"manufacturers" : [ "Essilor", "Glance" ],
"lensCovers" : [ "BP", "Cefir", "Elixir" ],
"lensTypes" : [ "Стигматическая", "Бифокальная" ],
"lensClasses" : [ "Фотохромная", "Водительская" ],
"refractionIndices" : [ 1.5, 1.74 ],
"userGroups" : null,
"serviceTypes" : null
},
"notMadePrescriptionParameters" : null,
"madePrescriptionParameters" : null
}
Поля
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
| clientParameters | Object | Объект отвечающий за поля вкладки 'клиент' | |
| clientParameters.firstName | String | Имя | |
| clientParameters.familyName | String | Фамилия | |
| clientParameters.gender | String | Пол | |
| clientParameters.ageFrom | Number | Возраст клиента от | |
| clientParameters.ageTo | Number | Возраст клиента до | |
| clientParameters.birthdayFrom | String | День рождения от [dd.MM] | |
| clientParameters.birthdayTo | String | День рождения до [dd.MM] | |
| clientParameters.birthdayInDays | Number | До дня рождения | |
| clientParameters.hasOrder | Boolean | Наличие заказа | |
| clientParameters.orderSumFrom | Number | Сумма заказов от | |
| clientParameters.orderSumTo | Number | Сумма заказов до | |
| clientParameters.hasCard | Boolean | Дисконтная карта | |
| clientParameters.cardSumFrom | Number | Сумма на карте от | |
| clientParameters.cardSumTo | Number | Сумма на карте до | |
| clientParameters.assistantId | Number | ИД куратора клиента | |
| clientParameters.lastCallFrom | String | Звонок клиенту от | |
| clientParameters.lastCallTo | String | Звонок клиенту до | |
| clientParameters.lastSmsFrom | String | SMS рассылка от | |
| clientParameters.lastSmsTo | String | SMS рассылка до | |
| clientParameters.lastEmailFrom | String | Email рассылка от | |
| clientParameters.lastEmailTo | String | Email рассылка до | |
| clientParameters.lastPrivateSmsFrom | String | Уведомление от | |
| clientParameters.lastPrivateSmsTo | String | Уведомление до | |
| clientParameters.daysToOffer | Number | До конца акции МКЛ | |
| clientParameters.cardEditedDays | Number | С изменения карты | |
| clientParameters.mobile | Boolean | Пользователь мобильного | |
| clientParameters.daysToExpiration | Number | До даты сгорания бонусов | |
| clientParameters.cities | Array | Город клиента | |
| notMadeOrderParameters | Object | Клиент НЕ оформлял в заказе | |
| madeOrderParameters | Object | Клиент оформлял в заказе | |
| madeOrderParameters.lastOrderDaysAgoFrom | Number | За последние (дней) от | |
| madeOrderParameters.lastOrderDaysAgoTo | Number | За последние (дней) до | |
| madeOrderParameters.status | String | Учитывать дату | |
| madeOrderParameters.sumFrom | Number | Сумма заказа от | |
| madeOrderParameters.sumTo | Number | Сумма заказа до | |
| madeOrderParameters.isClientPrescription | Boolean | По рецепту клиента | |
| madeOrderParameters.orderTypes | Array | Тип заказа | |
| madeOrderParameters.goodTypes | Array | Тип товара | |
| madeOrderParameters.departments | Array | Департамент | |
| notSoldGoodParameters | Object | Клиент НЕ покупал товары | |
| soldGoodParameters | Object | Клиент покупал товары | |
| soldGoodParameters.lastOrderDaysAgoFrom | Number | За последние (дней) от | |
| soldGoodParameters.lastOrderDaysAgoTo | Number | За последние (дней) до | |
| soldGoodParameters.type | String | Тип товара | |
| soldGoodParameters.isReturned | Boolean | Товар вернули | |
| soldGoodParameters.orderTypes | Array | Тип заказа | |
| soldGoodParameters.categories | Array | Категория | |
| soldGoodParameters.names | Array | Наименование | |
| soldGoodParameters.wearingPeriods | Array | Период ношения | |
| soldGoodParameters.packageNums | Array | Кол-во в упаковке | |
| soldGoodParameters.dioptresFrom | Number | Сфера от | |
| soldGoodParameters.dioptresTo | Number | Сфера до | |
| soldGoodParameters.addidations | Array | Аддидация | |
| soldGoodParameters.cylinders | Array | Цилиндр | |
| soldGoodParameters.colors | Array | Цвет | |
| soldGoodParameters.brands | Array | Бренд | |
| soldGoodParameters.targetGroups | Array | Целевая группа | |
| soldGoodParameters.designs | Array | Дизайн | |
| soldGoodParameters.manufacturers | Array | Производитель | |
| soldGoodParameters.lensCovers | Array | Покрытие | |
| soldGoodParameters.lensTypes | Array | Тип линзы | |
| soldGoodParameters.lensClasses | Array | Класс линзы | |
| soldGoodParameters.refractionIndices | Array | Индекс рефракции | |
| soldGoodParameters.serviceTypes | Array | Название услуги | |
| soldGoodParameters.userGroups | Array | Кто оказывает | |
| notMadePrescriptionParameters | Object | НЕ выписывали клиенту | |
| madePrescriptionParameters | Object | Выписывали клиенту | |
| madePrescriptionParameters.purpose | String | Назначение рецепта | |
| madePrescriptionParameters.doctorId | Number | ИД Врач-офтальмолог | |
| madePrescriptionParameters.lastOrderDaysAgo | Number | За последние (дней) | |
| madePrescriptionParameters.type | String | Тип рецепта | |
| madePrescriptionParameters.inUse | Boolean | Использован в заказе | |
| madePrescriptionParameters.dioptreFrom | Number | Сфера от | |
| madePrescriptionParameters.dioptreTo | Number | Сфера до | |
| madePrescriptionParameters.cylinders | Array | Цилиндр | |
| madePrescriptionParameters.addidations | Array | Аддидация |
Параметры
| Параметр | Описание |
|---|---|
| pageable | Описание постраничной навигации |
Ответ
HTTP/1.1 200 OK
{
"content" : [ {
"id" : 9000000203,
"familyName" : "Бурак",
"firstName" : "Сергей",
"patronymicName" : "-",
"birthday" : "1995-01-25",
"tel" : "89183510446",
"email" : "test@itigris.ru",
"birthdayDay" : 25,
"birthdayMonth" : 1,
"birthdayYear" : 1995
} ],
"pageable" : {
"pageNumber" : 0,
"pageSize" : 30,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"offset" : 0,
"paged" : true,
"unpaged" : false
},
"totalPages" : 1,
"totalElements" : 1,
"last" : true,
"size" : 30,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"numberOfElements" : 1,
"first" : true,
"empty" : false
}
Применение сохранённого фильтра по ID
Метод: GET /api/v2/clients/filters/{filterId}/apply
Возвращает клиентов по ранее сохранённому фильтру с указанным ID. По умолчанию — 30 элементов на странице; доступна пагинация (см. раздел 1.3).
Запрос
GET /api/v2/clients/filters/9999990006/apply HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| filterId | ИД корневой сущности фильтра |
Параметры
| Параметр | Описание |
|---|---|
| pageable | Описание постраничной навигации |
Ответ
HTTP/1.1 200 OK
{
"content" : [ {
"id" : 9000000203,
"familyName" : "Бурак",
"firstName" : "Сергей",
"patronymicName" : "-",
"birthday" : "1995-01-25",
"tel" : "89183510446",
"email" : "test@itigris.ru",
"birthdayDay" : 25,
"birthdayMonth" : 1,
"birthdayYear" : 1995
} ],
"pageable" : {
"pageNumber" : 0,
"pageSize" : 30,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"offset" : 0,
"paged" : true,
"unpaged" : false
},
"totalPages" : 1,
"totalElements" : 1,
"last" : true,
"size" : 30,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"numberOfElements" : 1,
"first" : true,
"empty" : false
}
Применение фильтра для рассылки по ID
Метод: GET /api/v2/clients/filters/{filterId}/mailing/apply
Возвращает клиентов по сохранённому фильтру для целей рассылки: в ответе дополнительно передаются данные о последней рассылке (lastMailingId, lastMailingOn). Тип рассылки задаётся параметром mailingType.
Допустимые значения mailingType (канал уведомления): VK, VIBER, SMS, EMAIL, PUSH, WHATSAPP, MAX.
Запрос
GET /api/v2/clients/filters/9999990001/mailing/apply?mailingType=MAX HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| filterId | Id готового фильтра |
Параметры
| Параметр | Описание |
|---|---|
| mailingType | [EMAIL,SMS] |
| pageable | Описание постраничной навигации |
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"id": 1000000047,
"familyName": "-",
"firstName": "Алина",
"patronymicName": "-",
"birthday": null,
"tel": "89032670333",
"email": "",
"lastMailingId": null,
"lastMailingOn": null
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 10,
"sort": {
"empty": true,
"sorted": false,
"unsorted": true
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 4571,
"totalElements": 45703,
"last": false,
"size": 10,
"number": 0,
"sort": {
"empty": true,
"sorted": false,
"unsorted": true
},
"numberOfElements": 10,
"first": true,
"empty": false
}
Применение фильтра для рассылки, переданного в запросе
Метод: POST /api/v2/clients/filters/mailing/apply
Возвращает клиентов для рассылки по фильтру, переданному в теле запроса (в формате параметров рассылки). Канал уведомления указывается в поле mailingType: VK, VIBER, SMS, EMAIL, PUSH, WHATSAPP, MAX.
Запрос
POST /api/v2/clients/filters/mailing/apply HTTP/1.1
{
"mailingType" : "SMS",
"ageFrom" : null,
"ageTo" : null,
"gender" : "MALE",
"driver" : null,
"computer" : null,
"familyName" : "Петров",
"cities" : null,
"departmentIds" : null,
"birthdayFrom" : null,
"birthdayTo" : null,
"lastVisitedOnFrom" : null,
"lastVisitedOnTo" : null,
"smsAccepted" : null,
"whatsappAccepted" : null,
"maxAccepted" : null,
"emailAccepted" : null,
"phoneAccepted" : null,
"mailAccepted" : null,
"orderType" : null,
"goodType" : null,
"ordersSumFrom" : null,
"ordersSumTo" : null,
"hasOrders" : null,
"hasClientCard" : null,
"cardSumFrom" : null,
"cardSumTo" : null
}
Параметры
| Параметр | Описание |
|---|---|
| pageable | Описание постраничной навигации |
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"id": 1000023514,
"familyName": "Петров",
"firstName": "Александр",
"patronymicName": "Леонидович",
"birthday": null,
"tel": "89898260491",
"email": "",
"lastMailingId": null,
"lastMailingOn": null
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 10,
"sort": {
"empty": true,
"sorted": false,
"unsorted": true
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 17,
"totalElements": 161,
"last": false,
"size": 10,
"number": 0,
"sort": {
"empty": true,
"sorted": false,
"unsorted": true
},
"numberOfElements": 10,
"first": true,
"empty": false
}
3.5. Согласия клиента (Client agreement)
Методы сбора и проверки согласий клиента (обработка персональных данных, программа ALCON, N3HEALTH). Общий параметр clientAgreementType принимает значения PERSONAL_DATA_PROCESSING, ALCON_PURCHASES, N3HEALTH.
Подготовка текста согласия
Метод: POST /api/v2/clients/{clientId}/agreements/prepare-text
Формирует (готовит) текст согласия для клиента по указанному типу. Тело запроса:
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
agreementType |
String | Тип согласия: PERSONAL_DATA_PROCESSING, ALCON_PURCHASES, N3HEALTH
|
Обязательное поле |
Метод ничего не возвращает (пустой ответ 200 OK) — сформированный текст далее получают методом «Получение текста согласия».
Подготовка текста с согласием .request
Запрос
POST /api/v2/clients/1000000224/agreements/prepare-text HTTP/1.1
{
"agreementType" : "PERSONAL_DATA_PROCESSING"
}
Параметры
| Параметр | Описание |
|---|---|
| clientId | Id клиента |
Поля
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
| agreementType | String | Тип согласия [PERSONAL_DATA_PROCESSING, ALCON_PURCHASES, N3HEALTH] |
Проверка наличия активного согласия
Метод: GET /api/v2/clients/{clientId}/agreements/active
Проверяет согласие на обработку персональных данных. Возвращает строковый статус:
- согласие есть и активно;
- согласия нет или оно отозвано.
Параметр clientAgreementType задаёт тип согласия.
Запрос
GET /api/v2/clients/1000000224/agreements/active?clientAgreementType=PERSONAL_DATA_PROCESSING HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| clientId | Id клиента |
Параметры
| Параметр | Описание |
|---|---|
| clientAgreementType | [PERSONAL_DATA_PROCESSING, ALCON_PURCHASES, N3HEALTH] |
Ответ
HTTP/1.1 200 OK
"ACCEPTED"
Проверка необходимости сбора согласия по заказу
Метод: GET /api/v2/clients/agreements/necessity
Проверяет, требуется ли собрать согласие для оформленного заказа. В текущей версии поддерживается только тип ALCON_PURCHASES. Параметр orderIds может содержать один или два ID заказов.
Запрос
GET /api/v2/clients/agreements/necessity?clientAgreementType=ALCON_PURCHASES&orderIds=8999888777 HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| orderIds | id оформленных заказов |
| clientAgreementType | Поддерживается только ALCON_PURCHASES |
Ответ
HTTP/1.1 200 OK
{
"clientId" : 1000000224,
"necessity" : true
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| clientId | Number | Id клиента |
| necessity | Boolean | true - требуется согласие |
Получение текста согласия
Метод: GET /api/v2/clients/{clientId}/agreements
Возвращает ранее подготовленный текст согласия в виде HTML-файла (Content-Disposition: attachment; filename=agreement.html).
Запрос
GET /api/v2/clients/1000000224/agreements?clientAgreementType=PERSONAL_DATA_PROCESSING HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| clientId | clientId |
Параметры
| Параметр | Описание |
|---|---|
| clientAgreementType | [PERSONAL_DATA_PROCESSING, ALCON_PURCHASES, N3HEALTH] |
Проверка, было ли ранее отправлено сообщение с согласием
Метод: GET /api/v2/clients/{clientId}/agreements/is-message-sent
Возвращает true, если клиенту уже отправлялось сообщение с кодом подтверждения согласия (и код ещё актуален), иначе false.
Запрос
GET /api/v2/clients/1000000224/agreements/is-message-sent HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| clientId | Id клиента |
Ответ
HTTP/1.1 200 OK
true
Отправка сообщения с кодом подтверждения
Метод: POST /api/v2/clients/{clientId}/agreements/message
Каскадная рассылка сообщения с кодом подтверждения согласия. Метод сбора задаётся полем collectionMethod: SMS, QUESTIONNAIRE, VK, EMAIL, WHATSAPP, MAX. Метод ничего не возвращает (пустой ответ 200 OK).
Запрос
POST /api/v2/clients/1000000224/agreements/message HTTP/1.1
{
"phoneNumber" : "89999999999",
"email" : null,
"updateEmail" : false,
"agreementType" : "PERSONAL_DATA_PROCESSING",
"collectionMethod" : "MAX"
}
Параметры
| Параметр | Описание |
|---|---|
| clientId | Id клиента |
Поля
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
| phoneNumber | String | Номер телефона клиента | |
| String | Email клиента, если метод сбора EMAIL | Должен быть корректный адрес электронной почты | |
| agreementType | String | Тип согласия [PERSONAL_DATA_PROCESSING, ALCON_PURCHASES, N3HEALTH] | Обязательное поле |
| collectionMethod | String | Метод сбора [SMS, QUESTIONNAIRE, VK, EMAIL, WHATSAPP] | Обязательное поле |
Ответ
HTTP/1.1 200 OK
Принятие согласия (сохранение по коду)
Метод: POST /api/v2/clients/{clientId}/agreements
Создаёт согласие по ранее отправленному клиенту коду подтверждения.
- возвращает
true, если код верный: согласие сохраняется, а телефон клиента обновляется, если он изменился; - возвращает
false, если код неверный.
Поле rejection (только для типа N3HEALTH): true — отказ, false — согласие.
Запрос
POST /api/v2/clients/1000000224/agreements HTTP/1.1
{
"confirmationCode" : "9491",
"agreementType" : "ALCON_PURCHASES",
"collectionMethod" : "SMS",
"rejection" : false
}
Параметры
| Параметр | Описание |
|---|---|
| clientId | Id клиента |
Поля
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
| confirmationCode | String | Код подтверждения, который ввел пользователь | |
| agreementType | String | Тип согласия [PERSONAL_DATA_PROCESSING, ALCON_PURCHASES, N3HEALTH] | Обязательное поле |
| collectionMethod | String | Метод сбора согласия [SMS, QUESTIONNAIRE, VK, EMAIL, WHATSAPP] | Обязательное поле |
| rejection | Boolean | true - отказ, false - согласие (только для N3HEALTH) |
Ответ
HTTP/1.1 200 OK
true
Отзыв согласия
Метод: DELETE /api/v2/clients/{clientId}/agreements
Отзывает ранее полученное согласие указанного типа. Метод ничего не возвращает (пустой ответ 200 OK).
Запрос
DELETE /api/v2/clients/1000000224/agreements?clientAgreementType=PERSONAL_DATA_PROCESSING HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| clientId | Id клиента |
Параметры
| Параметр | Описание |
|---|---|
| clientAgreementType | [PERSONAL_DATA_PROCESSING, ALCON_PURCHASES] |
Ответ
HTTP/1.1 200 OK
3.6. Департаменты (Department)
Справочники департаментов: полный список, краткие метки, департаменты по группе пользователей, карточка департамента и список магазинов.
Список департаментов
Метод: GET /api/v2/departments
Возвращает страницу департаментов с фильтрацией по признаку закрытия (closed) и типам (types). Поддерживается пагинация (см. раздел 1.3).
Запрос
GET /api/v2/departments?closed=false&size=3 HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| closed | Подразделение закрыто? |
| types | Список типов подразделений (например, types=OFFICE,STORE) |
| pageable | Описание постраничной навигации |
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"id": 1000000008,
"type": "STORE",
"name": "Третий магазин",
"location": {
"data": {
"qc": null,
"area": null,
"city": "Псков",
"flat": null,
"block": null,
"floor": null,
"house": "16",
"metro": null,
"okato": "58401000000",
"oktmo": "58701000001",
"stead": null,
"qc_geo": "0",
"region": "Псковская",
"source": null,
"street": "Рижский",
"country": "Россия",
"fias_id": "23b3ef2f-48f8-4964-8501-2243a0e2a855",
"geo_lat": "57.817608",
"geo_lon": "28.315544",
"entrance": null,
"kladr_id": "6000000100002470023",
"qc_house": null,
"timezone": null,
"area_type": null,
"city_area": null,
"city_type": "г",
"divisions": null,
"fias_code": null,
"flat_area": null,
"flat_type": null,
"block_type": null,
"fias_level": "8",
"flat_price": null,
"geoname_id": "504341",
"house_type": "д",
"postal_box": null,
"settlement": null,
"stead_type": null,
"tax_office": "6027",
"beltway_hit": null,
"flat_cadnum": null,
"postal_code": "180007",
"qc_complete": null,
"region_type": "обл",
"street_type": "пр-кт",
"area_fias_id": null,
"city_fias_id": "2858811e-448a-482e-9863-e03bf06bb5d4",
"flat_fias_id": null,
"house_cadnum": null,
"stead_cadnum": null,
"area_kladr_id": null,
"city_district": null,
"city_kladr_id": "6000000100000",
"house_fias_id": "23b3ef2f-48f8-4964-8501-2243a0e2a855",
"stead_fias_id": null,
"area_type_full": null,
"area_with_type": null,
"capital_marker": "2",
"city_type_full": "город",
"city_with_type": "г Псков",
"flat_type_full": null,
"history_values": null,
"house_kladr_id": "6000000100002470023",
"region_fias_id": "f6e148a1-c9d0-4141-a608-93e3bd95e6c4",
"street_fias_id": "36af3b40-3790-43cf-bac9-a19268dc7cda",
"unparsed_parts": null,
"block_type_full": null,
"house_type_full": "дом",
"region_iso_code": "RU-PSK",
"region_kladr_id": "6000000000000",
"settlement_type": null,
"stead_type_full": null,
"street_kladr_id": "60000001000024700",
"beltway_distance": null,
"country_iso_code": "RU",
"federal_district": "Северо-Западный",
"region_type_full": "область",
"region_with_type": "Псковская обл",
"street_type_full": "проспект",
"street_with_type": "Рижский пр-кт",
"tax_office_legal": "6027",
"city_district_type": null,
"settlement_fias_id": null,
"square_meter_price": null,
"settlement_kladr_id": null,
"fias_actuality_state": "0",
"settlement_type_full": null,
"settlement_with_type": null,
"city_district_fias_id": null,
"city_district_kladr_id": null,
"city_district_type_full": null,
"city_district_with_type": null
},
"string": "г Псков, Рижский пр-кт, д 16"
},
"city": "Псков",
"description": "Рижский проспект, д.16",
"phone": "+7(812) 425-64-22",
"timeZone": 180,
"closed": false,
"frMode": false,
"hasServices": true,
"baseLegalEntityId": 1,
"storeBrandId": 1,
"otherDepartmentSearchId": null,
"depotId": 1000000005,
"productionId": 1000000004,
"departmentOid": null,
"departmentGuid": null,
"departmentLpuId": null
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 3,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 3,
"totalElements": 7,
"last": false,
"size": 3,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 3,
"first": true,
"empty": false
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| id | Number | id |
| type | String | тип подразделения |
| name | String | название подразделения |
| location.data | Object | Полный объект DaData адреса подразделения |
| location.string | String | Описание адреса подразделения в DaData |
| city | String | город, в котором находится подразделение |
| description | String | дополнительная информация о подразделении (обычно адрес, как в печатных формах) |
| phone | String | телефон подразделения |
| timeZone | Number | часовой пояс подразделения в минутах относительно UTC |
| closed | Boolean | Подразделение закрыто/удалено? |
| frMode | Boolean | Есть ли у подразделения фискальные регистраторы? (только для магазинов) |
| hasServices | Boolean | Оказывает/продаёт ли подразделение услуги? (только для магазинов) |
| legalEntityId | Number | основное юридическое лицо подразделения |
| storeBrandId | Number | Бренд подразделения (только для магазинов) |
| otherDepartmentSearchId | Number | Базовое подразделение для поиска |
| depotId | Number | Базовый склад подразделения (только для магазинов) |
| productionId | Number | Базовое производственное подразделение подразделения (только для магазинов) |
Краткий список департаментов (метки)
Метод: GET /api/v2/departments/labels
Возвращает сокращённый список департаментов (только id и name) для использования в выпадающих списках.
Фактически учитываются только параметры closed и types; параметр name не учитывается.
Параметры запроса
| Параметр | Тип | Описание | Ограничения |
|---|---|---|---|
| closed | Boolean | Признак включения закрытых департаментов; по умолчанию false (только открытые) |
Необязательный |
| types | Array<String> | Типы департаментов; параметр повторяемый (?types=STORE&types=DEPOT). Допустимые значения: DEPOT (Склад), OFFICE (Офис), PRODUCTION (Цех), STORE (Магазин) |
Необязательный |
| name | String | Название департамента; в обработчике labels не используется (игнорируется), применяется в других эндпоинтах с тем же DTO |
Необязательный |
Запрос
GET /api/v2/departments/labels?types=STORE&types=DEPOT HTTP/1.1
Ответ
HTTP/1.1 200 OK
[
{
"id": 1000000007,
"name": "Второй магазин"
}
]
Поля
| Путь | Тип | Описание |
|---|---|---|
| id | Number | id |
| name | String | name |
Департаменты, доступные группе пользователей
Метод: GET /api/v2/departments/by-user-group
Возвращает список департаментов для указанной группы пользователей (userGroupId). Поддерживается пагинация (см. раздел 1.3).
Запрос
GET /api/v2/departments/by-user-group?userGroupId=1000000003 HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| userGroupId | список для UserGroup Пример: ?userGroupId=1000000003 |
| pageable | Описание постраничной навигации |
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"id": 1000000003,
"type": "STORE",
"name": "Первый магазин",
"location": {
"data": {
"qc": null,
"area": null,
"city": "Псков",
"flat": null,
"block": null,
"floor": null,
"house": "1",
"metro": null,
"okato": "58401000000",
"oktmo": "58701000001",
"stead": null,
"qc_geo": "0",
"region": "Псковская",
"source": null,
"street": "Льва Толстого",
"country": "Россия",
"fias_id": "863354b1-4be8-4020-9158-7559144fd932",
"geo_lat": "57.814117",
"geo_lon": "28.347668",
"entrance": null,
"kladr_id": "6000000100004760126",
"qc_house": null,
"timezone": null,
"area_type": null,
"city_area": null,
"city_type": "г",
"divisions": null,
"fias_code": null,
"flat_area": null,
"flat_type": null,
"block_type": null,
"fias_level": "8",
"flat_price": null,
"geoname_id": "504341",
"house_type": "д",
"postal_box": null,
"settlement": null,
"stead_type": null,
"tax_office": "6027",
"beltway_hit": null,
"flat_cadnum": null,
"postal_code": "180000",
"qc_complete": null,
"region_type": "обл",
"street_type": "ул",
"area_fias_id": null,
"city_fias_id": "2858811e-448a-482e-9863-e03bf06bb5d4",
"flat_fias_id": null,
"house_cadnum": null,
"stead_cadnum": null,
"area_kladr_id": null,
"city_district": null,
"city_kladr_id": "6000000100000",
"house_fias_id": "863354b1-4be8-4020-9158-7559144fd932",
"stead_fias_id": null,
"area_type_full": null,
"area_with_type": null,
"capital_marker": "2",
"city_type_full": "город",
"city_with_type": "г Псков",
"flat_type_full": null,
"history_values": null,
"house_kladr_id": "6000000100004760126",
"region_fias_id": "f6e148a1-c9d0-4141-a608-93e3bd95e6c4",
"street_fias_id": "bd85e8d8-3064-41ca-baed-9fc3f57a07ed",
"unparsed_parts": null,
"block_type_full": null,
"house_type_full": "дом",
"region_iso_code": "RU-PSK",
"region_kladr_id": "6000000000000",
"settlement_type": null,
"stead_type_full": null,
"street_kladr_id": "60000001000047600",
"beltway_distance": null,
"country_iso_code": "RU",
"federal_district": "Северо-Западный",
"region_type_full": "область",
"region_with_type": "Псковская обл",
"street_type_full": "улица",
"street_with_type": "ул Льва Толстого",
"tax_office_legal": "6027",
"city_district_type": null,
"settlement_fias_id": null,
"square_meter_price": null,
"settlement_kladr_id": null,
"fias_actuality_state": "0",
"settlement_type_full": null,
"settlement_with_type": null,
"city_district_fias_id": null,
"city_district_kladr_id": null,
"city_district_type_full": null,
"city_district_with_type": null
},
"string": "г Псков, ул Льва Толстого, д 1"
},
"city": "Псков",
"description": "ул. Льва Толстого, д.1",
"phone": "+7(812) 425-64-22",
"timeZone": 180,
"closed": false,
"frMode": true,
"hasServices": true,
"baseLegalEntityId": 1,
"storeBrandId": 1,
"otherDepartmentSearchId": null,
"depotId": 1000000005,
"productionId": 1000000004,
"departmentOid": "9999",
"departmentGuid": null,
"departmentLpuId": null
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 10,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 1,
"totalElements": 4,
"last": true,
"size": 10,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 4,
"first": true,
"empty": false
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| id | Number | id |
| type | String | тип подразделения |
| name | String | название подразделения |
| location.data | Object | Полный объект DaData адреса подразделения |
| location.string | String | Описание адреса подразделения в DaData |
| city | String | город, в котором находится подразделение |
| description | String | дополнительная информация о подразделении (обычно адрес, как в печатных формах) |
| phone | String | телефон подразделения |
| timeZone | Number | часовой пояс подразделения в минутах относительно UTC |
| closed | Boolean | Подразделение закрыто/удалено? |
| frMode | Boolean | Есть ли у подразделения фискальные регистраторы? (только для магазинов) |
| hasServices | Boolean | Оказывает/продаёт ли подразделение услуги? (только для магазинов) |
| legalEntityId | Number | основное юридическое лицо подразделения |
| storeBrandId | Number | Бренд подразделения (только для магазинов) |
| otherDepartmentSearchId | Number | Базовое подразделение для поиска |
| depotId | Number | Базовый склад подразделения (только для магазинов) |
| productionId | Number | Базовое производственное подразделение подразделения (только для магазинов) |
Департамент по ID
Метод: GET /api/v2/departments/{departmentId}
Возвращает полную карточку департамента: тип, название, адрес, контакты, режим работы, привязки к юридическому лицу, складу, производству и т. д.
Запрос
GET /api/v2/departments/999999999 HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| departmentId | departmentId |
Ответ
HTTP/1.1 200 OK
{
"id": 999999999,
"type": "STORE",
"name": "Test store",
"location": {
"data": {
"qc": null,
"area": null,
"city": "Санкт-Петербург",
"flat": null,
"block": "2",
"floor": null,
"house": "12",
"metro": null,
"okato": "40298566000",
"oktmo": "40913000",
"stead": null,
"qc_geo": "0",
"region": "Санкт-Петербург",
"source": null,
"street": "Щербаков",
"country": "Россия",
"fias_id": "1b311976-2fdd-4f09-8c5b-5535c26c7c20",
"geo_lat": "59.92836",
"geo_lon": "30.345171",
"entrance": null,
"kladr_id": "78000000000154500",
"qc_house": null,
"timezone": null,
"area_type": null,
"city_area": null,
"city_type": "г",
"divisions": null,
"fias_code": null,
"flat_area": null,
"flat_type": null,
"block_type": "к",
"fias_level": "7",
"flat_price": null,
"geoname_id": "498817",
"house_type": "д",
"postal_box": null,
"settlement": null,
"stead_type": null,
"tax_office": "7840",
"beltway_hit": null,
"flat_cadnum": null,
"postal_code": "191002",
"qc_complete": null,
"region_type": "г",
"street_type": "пер",
"area_fias_id": null,
"city_fias_id": "c2deb16a-0330-4f05-821f-1d09c93331e6",
"flat_fias_id": null,
"house_cadnum": null,
"stead_cadnum": null,
"area_kladr_id": null,
"city_district": "Центральный",
"city_kladr_id": "7800000000000",
"house_fias_id": null,
"stead_fias_id": null,
"area_type_full": null,
"area_with_type": null,
"capital_marker": "0",
"city_type_full": "город",
"city_with_type": "г Санкт-Петербург",
"flat_type_full": null,
"history_values": null,
"house_kladr_id": null,
"region_fias_id": "c2deb16a-0330-4f05-821f-1d09c93331e6",
"street_fias_id": "1b311976-2fdd-4f09-8c5b-5535c26c7c20",
"unparsed_parts": null,
"block_type_full": "корпус",
"house_type_full": "дом",
"region_iso_code": "RU-SPE",
"region_kladr_id": "7800000000000",
"settlement_type": null,
"stead_type_full": null,
"street_kladr_id": "78000000000154500",
"beltway_distance": null,
"country_iso_code": "RU",
"federal_district": "Северо-Западный",
"region_type_full": "город",
"region_with_type": "г Санкт-Петербург",
"street_type_full": "переулок",
"street_with_type": "Щербаков пер",
"tax_office_legal": "7840",
"city_district_type": "р-н",
"settlement_fias_id": null,
"square_meter_price": null,
"settlement_kladr_id": null,
"fias_actuality_state": "0",
"settlement_type_full": null,
"settlement_with_type": null,
"city_district_fias_id": null,
"city_district_kladr_id": null,
"city_district_type_full": "район",
"city_district_with_type": "Центральный р-н"
},
"string": "г Санкт-Петербург, Щербаков пер, д 12 к 2"
},
"city": "Псков",
"description": "ул. Льва Толстого, дом 1",
"phone": "+7 (812) 425-64-52",
"timeZone": 180,
"closed": false,
"frMode": false,
"hasServices": true,
"baseLegalEntityId": 1,
"storeBrandId": null,
"otherDepartmentSearchId": null,
"depotId": null,
"productionId": null,
"departmentOid": null,
"departmentGuid": null,
"departmentLpuId": null,
"legalEntityIds": [
1,
6
],
"pointOfSales": [
{
"id": 999999990,
"name": "Кассовое место 2",
"legalEntities": [
{
"legalEntityId": 6,
"fiscalRegisterId": null,
"fiscalRegisterType": null,
"cardAccountId": null
}
]
}
],
"cashAccountId": null,
"collectionAccountId": null,
"grayAccountId": null,
"collectionGrayAccountId": null
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| id | Number | id |
| type | String | тип подразделения |
| name | String | название подразделения |
| location.data | Object | Полный объект DaData адреса подразделения |
| location.string | String | Описание адреса подразделения в DaData |
| city | String | город, в котором находится подразделение |
| description | String | дополнительная информация о подразделении (обычно адрес, как в печатных формах) |
| phone | String | телефон подразделения |
| timeZone | Number | часовой пояс подразделения в минутах относительно UTC |
| closed | Boolean | Подразделение закрыто/удалено? |
| frMode | Boolean | Есть ли у подразделения фискальные регистраторы? (только для магазинов) |
| hasServices | Boolean | Оказывает/продаёт ли подразделение услуги? (только для магазинов) |
| legalEntityId | Number | основное юридическое лицо подразделения |
| storeBrandId | Number | Бренд подразделения (только для магазинов) |
| otherDepartmentSearchId | Number | Базовое подразделение для поиска |
| depotId | Number | Базовый склад подразделения (только для магазинов) |
| productionId | Number | Базовое производственное подразделение подразделения (только для магазинов) |
| legalEntityIds | Array | ID юридических лиц, работающих в подразделении |
| pointOfSales | Array | Точки продаж в подразделении |
| pointOfSales[].id | Number | ID точки продаж |
| pointOfSales[].name | String | Название точки продаж для печати |
| pointOfSales[].legalEntities | Array | Данные о связи юридических лиц с точкой продаж, в которой они работают |
| pointOfSales[].legalEntities[].legalEntityId | Number | ID юридического лица, работающего в точке продаж |
| pointOfSales[].legalEntities[].fiscalRegisterId | Number | ID неродного фискального регистратора, обслуживающего юридическое лицо в точке продаж |
| pointOfSales[].legalEntities[].fiscalRegisterType | String | Тип фискального регистратора, обслуживающего юридическое лицо в точке продаж, см. здесь |
| cashAccountId | Number | ID кассового счёта подразделения |
| collectionAccountId | Number | ID счёта инкассации подразделения |
| grayAccountId | Number | |
| collectionGrayAccountId | Number | |
| pointOfSales[].legalEntities[].cardAccountId | Number | ID карточного счёта юридического лица в точке продаж |
Магазины (департаменты типа «Магазин»)
Метод: GET /api/v2/departments/stores
Возвращает список департаментов типа «Магазин» с адресом (объект DaData), контактами и привязками к складу и производству.
Запрос
GET /api/v2/departments/stores HTTP/1.1
Ответ
HTTP/1.1 200 OK
[
{
"id": 1000000007,
"type": "STORE",
"name": "Второй магазин",
"location": {
"data": {
"qc": null,
"area": null,
"city": "Псков",
"flat": null,
"block": null,
"floor": null,
"house": "5",
"metro": null,
"okato": "58401000000",
"oktmo": "58701000001",
"stead": null,
"qc_geo": "0",
"region": "Псковская",
"source": null,
"street": "Юрия Гагарина",
"country": "Россия",
"fias_id": "fe412909-55f4-4e1c-9c13-aa05a9f4dd24",
"geo_lat": "57.80946",
"geo_lon": "28.357496",
"entrance": null,
"kladr_id": "6000000100000390004",
"qc_house": null,
"timezone": null,
"area_type": null,
"city_area": null,
"city_type": "г",
"divisions": null,
"fias_code": null,
"flat_area": null,
"flat_type": null,
"block_type": null,
"fias_level": "8",
"flat_price": null,
"geoname_id": "504341",
"house_type": "д",
"postal_box": null,
"settlement": null,
"stead_type": null,
"tax_office": "6027",
"beltway_hit": null,
"flat_cadnum": null,
"postal_code": "180004",
"qc_complete": null,
"region_type": "обл",
"street_type": "ул",
"area_fias_id": null,
"city_fias_id": "2858811e-448a-482e-9863-e03bf06bb5d4",
"flat_fias_id": null,
"house_cadnum": null,
"stead_cadnum": null,
"area_kladr_id": null,
"city_district": null,
"city_kladr_id": "6000000100000",
"house_fias_id": "fe412909-55f4-4e1c-9c13-aa05a9f4dd24",
"stead_fias_id": null,
"area_type_full": null,
"area_with_type": null,
"capital_marker": "2",
"city_type_full": "город",
"city_with_type": "г Псков",
"flat_type_full": null,
"history_values": null,
"house_kladr_id": "6000000100000390004",
"region_fias_id": "f6e148a1-c9d0-4141-a608-93e3bd95e6c4",
"street_fias_id": "536cfb32-332b-45b6-938f-f8ff3dd7871a",
"unparsed_parts": null,
"block_type_full": null,
"house_type_full": "дом",
"region_iso_code": "RU-PSK",
"region_kladr_id": "6000000000000",
"settlement_type": null,
"stead_type_full": null,
"street_kladr_id": "60000001000003900",
"beltway_distance": null,
"country_iso_code": "RU",
"federal_district": "Северо-Западный",
"region_type_full": "область",
"region_with_type": "Псковская обл",
"street_type_full": "улица",
"street_with_type": "ул Юрия Гагарина",
"tax_office_legal": "6027",
"city_district_type": null,
"settlement_fias_id": null,
"square_meter_price": null,
"settlement_kladr_id": null,
"fias_actuality_state": "0",
"settlement_type_full": null,
"settlement_with_type": null,
"city_district_fias_id": null,
"city_district_kladr_id": null,
"city_district_type_full": null,
"city_district_with_type": null
},
"string": "г Псков, ул Юрия Гагарина, д 5"
},
"city": "Псков",
"description": "Ул. Гагарина, д.5",
"phone": "+7(812) 425-64-22",
"timeZone": 180,
"closed": false,
"frMode": false,
"hasServices": true,
"baseLegalEntityId": 1,
"storeBrandId": 1,
"otherDepartmentSearchId": null,
"depotId": 1000000005,
"productionId": 1000000004,
"departmentOid": null,
"departmentGuid": null,
"departmentLpuId": null
}
]
Поля
| Путь | Тип | Описание |
|---|---|---|
| content[]. | Array | Доступные подразделения магазина |
| [].id | Number | id |
| [].type | String | тип подразделения |
| [].name | String | название подразделения |
| [].location.data | Object | Полный объект DaData адреса подразделения |
| [].location.string | String | Описание адреса подразделения в DaData |
| [].city | String | город, в котором находится подразделение |
| [].description | String | дополнительная информация о подразделении (обычно адрес, как в печатных формах) |
| [].phone | String | телефон подразделения |
| [].timeZone | Number | часовой пояс подразделения в минутах относительно UTC |
| [].closed | Boolean | Подразделение закрыто/удалено? |
| [].frMode | Boolean | Есть ли у подразделения фискальные регистраторы? (только для магазинов) |
| [].hasServices | Boolean | Оказывает/продаёт ли подразделение услуги? (только для магазинов) |
| [].legalEntityId | Number | основное юридическое лицо подразделения |
| [].storeBrandId | Number | Бренд подразделения (только для магазинов) |
| [].otherDepartmentSearchId | Number | Базовое подразделение для поиска |
| [].depotId | Number | Базовый склад подразделения (только для магазинов) |
| [].productionId | Number | Базовое производственное подразделение подразделения (только для магазинов) |
3.7. Поиск номенклатуры товаров (Goods nomenclature search)
Поиск номенклатуры по фильтру, переданному в теле запроса. Все методы — POST, возвращают страницу Page (оболочка описана в разделе 1.3, объекты — в content[]). Во всех фильтрах обязательным является только поле byPriceList: true — поиск по прейскуранту, false — по материализованному представлению (matview).
Поиск: Аксессуары
Метод: POST /api/v2/good/nomenclature/search/accessories
Запрос
POST /api/v2/good/nomenclature/search/accessories HTTP/1.1
{
"byPriceList" : true,
"category" : "Спрей",
"model" : "Opti-free 15ml"
}
Поля
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
| byPriceList | Boolean | true - поиск по прейскуранту. false - по matview | Обязательное поле |
| category | String | category | |
| model | String | model |
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"retailPrice": 1200.0,
"category": "Спрей",
"model": "Opti-free 15ml"
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 10,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 1,
"totalElements": 2,
"last": true,
"size": 10,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 2,
"first": true,
"empty": false
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| retailPrice | Number | Розничная цена |
| category | String | category |
| model | String | model |
Поиск: Солнцезащитные очки
Метод: POST /api/v2/good/nomenclature/search/sunglasses
Тело запроса — SunglassesNomenclatureFilter. Первые четыре поля унаследованы от AbstractGoodsNomenclatureFilter.
Поля запроса (тело)
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
| byPriceList | Boolean | Признак поиска по прайс-листу | Обязательное поле |
| deleted | Boolean | true — поиск в таблицах удалённой номенклатуры *_mv_deleted; работает только при byPriceList=false
|
|
| retailPriceFrom | Number | Розничная цена, нижняя граница диапазона | |
| retailPriceTo | Number | Розничная цена, верхняя граница диапазона | |
| manufacturer | String | Производитель | |
| brand | String | Бренд | |
| color | String | Цвет | |
| model | String | Модель | |
| targetGroup | String | Целевая группа | |
| material | String | Материал | |
| frameType | String | Тип оправы | |
| lensesType | String | Тип линз | |
| design | String | Дизайн |
Запрос
POST /api/v2/good/nomenclature/search/sunglasses HTTP/1.1
{
"byPriceList" : true,
"manufacturer" : "Россия",
"brand" : "Renome",
"color" : null,
"model" : "K2814 В",
"targetGroup" : null,
"material" : null,
"frameType" : null,
"lensesType" : null,
"design" : null
}
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"retailPrice": 500.0,
"manufacturer": "Россия",
"brand": "Renome",
"color": null,
"model": "K2814 В",
"targetGroup": null,
"material": null,
"frameType": null,
"lensesType": null,
"design": null
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 10,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 1,
"totalElements": 2,
"last": true,
"size": 10,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 2,
"first": true,
"empty": false
}
Поля ответа (content[] — SunglassesNomenclatureSearchResponse)
| Путь | Тип | Описание |
|---|---|---|
| id | Number | ID номенклатуры |
| retailPrice | Number | Розничная цена |
| manufacturer | String | Производитель |
| brand | String | Бренд |
| color | String | Цвет |
| model | String | Модель |
| targetGroup | String | Целевая группа |
| material | String | Материал |
| frameType | String | Тип оправы |
| lensesType | String | Тип линз |
| design | String | Дизайн |
Поиск: Очки
Метод: POST /api/v2/good/nomenclature/search/glasses
Тело запроса — GlassesNomenclatureFilter. Первые четыре поля унаследованы от AbstractGoodsNomenclatureFilter.
Поля запроса (тело)
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
| byPriceList | Boolean | Признак поиска по прайс-листу | Обязательное поле |
| deleted | Boolean | true — поиск в таблицах удалённой номенклатуры *_mv_deleted; работает только при byPriceList=false
|
|
| retailPriceFrom | Number | Розничная цена, нижняя граница диапазона | |
| retailPriceTo | Number | Розничная цена, верхняя граница диапазона | |
| manufacturer | String | Производитель | |
| brand | String | Бренд | |
| color | String | Цвет | |
| model | String | Модель | |
| targetGroup | String | Целевая группа | |
| material | String | Материал | |
| type | String | Тип | |
| size | String | Размер | |
| design | String | Дизайн |
Запрос
POST /api/v2/good/nomenclature/search/glasses HTTP/1.1
{
"byPriceList" : true,
"manufacturer" : "bro",
"brand" : "Harley-Davidson",
"color" : null,
"model" : "1006 C3",
"targetGroup" : null,
"material" : null,
"type" : null,
"size" : null,
"design" : null
}
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"retailPrice": 500.0,
"manufacturer": "bro",
"brand": "Harley-Davidson",
"color": null,
"model": "1006 C3",
"targetGroup": null,
"material": null,
"type": null,
"size": null,
"design": null
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 10,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 1,
"totalElements": 2,
"last": true,
"size": 10,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 2,
"first": true,
"empty": false
}
Поля ответа (content[] — GlassesNomenclatureSearchResponse)
| Путь | Тип | Описание |
|---|---|---|
| id | Number | ID номенклатуры |
| retailPrice | Number | Розничная цена |
| manufacturer | String | Производитель |
| brand | String | Бренд |
| color | String | Цвет |
| model | String | Модель |
| targetGroup | String | Целевая группа |
| material | String | Материал |
| type | String | Тип |
| size | String | Размер |
| design | String | Дизайн |
Поиск: Линзы
Метод: POST /api/v2/good/nomenclature/search/lenses
Тело запроса — LensesNomenclatureFilter. Первые четыре поля унаследованы от AbstractGoodsNomenclatureFilter. Поля cylinder и add — вложенные объекты NullableScalarFilter<BigDecimal> ({ "value": ..., "searchNullOnly": ... }).
Поля запроса (тело)
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
| byPriceList | Boolean | Признак поиска по прайс-листу | Обязательное поле |
| deleted | Boolean | true — поиск в таблицах удалённой номенклатуры *_mv_deleted; работает только при byPriceList=false
|
|
| retailPriceFrom | Number | Розничная цена, нижняя граница диапазона | |
| retailPriceTo | Number | Розничная цена, верхняя граница диапазона | |
| manufacturer | String | Производитель | |
| brand | String | Бренд | |
| type | String | Тип | |
| lensClass | String | Класс линз | |
| refractionIndex | Number | Показатель преломления | |
| material | String | Материал | |
| diameter | Number | Диаметр | |
| geometry | String | Геометрия | |
| cover | String | Покрытие | |
| technology | String | Технология | |
| color | String | Цвет | |
| sphere | Number | Сфера, дптр | |
| cylinder | Object | Фильтр по цилиндру (значение или поиск NULL) | |
| cylinder.value | Number | Значение цилиндра | |
| cylinder.searchNullOnly | Boolean | true — искать только записи с пустым (NULL) цилиндром; значение value при этом игнорируется |
|
| add | Object | Фильтр по аддидации (значение или поиск NULL) | |
| add.value | Number | Значение аддидации | |
| add.searchNullOnly | Boolean | true — искать только записи с пустой (NULL) аддидацией; значение value при этом игнорируется |
Запрос
POST /api/v2/good/nomenclature/search/lenses HTTP/1.1
{
"byPriceList" : true,
"manufacturer" : "Hoya",
"brand" : "Unor KID",
"type" : "Прогрессивная с базовой кривизной",
"lensClass" : "Компьютерная",
"refractionIndex" : 1.52,
"material" : "Минерал",
"diameter" : 60,
"geometry" : "Лентикуляр",
"cover" : "Crizal Alize",
"technology" : "BlueControl",
"color" : "Green"
}
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"retailPrice": 500.0,
"manufacturer": "Hoya",
"brand": "Unor KID",
"type": "Прогрессивная с базовой кривизной",
"lensClass": "Компьютерная",
"material": "Минерал",
"technology": "BlueControl",
"geometry": "Лентикуляр",
"refractionIndex": 1.52,
"cover": "Crizal Alize",
"color": "Green",
"diameter": null,
"diameterFrom": 52,
"diameterTo": 80,
"sphereFrom": -10.0,
"sphereTo": 10.0,
"cylinderFrom": -10.0,
"cylinderTo": 10.0,
"addFrom": 0.0,
"addTo": 100.0
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 10,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 1,
"totalElements": 2,
"last": true,
"size": 10,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 2,
"first": true,
"empty": false
}
Поля ответа (content[] — LensesNomenclatureSearchResponse)
| Путь | Тип | Описание |
|---|---|---|
| id | Number | ID номенклатуры |
| retailPrice | Number | Розничная цена |
| manufacturer | String | Производитель |
| brand | String | Бренд |
| type | String | Тип |
| lensClass | String | Класс линз |
| material | String | Материал |
| technology | String | Технология |
| geometry | String | Геометрия |
| refractionIndex | Number | Показатель преломления |
| cover | String | Покрытие |
| color | String | Цвет |
| diameter | Number | Диаметр |
| diameterFrom | Number | Диаметр, нижняя граница доступного диапазона |
| diameterTo | Number | Диаметр, верхняя граница доступного диапазона |
| groupedInfos | Array<Object> | Сгруппированные диапазоны параметров (LensesNomenclatureSearchResponseGroupedInfo) |
| groupedInfos[].sphereFrom | Number | Сфера, нижняя граница диапазона |
| groupedInfos[].sphereTo | Number | Сфера, верхняя граница диапазона |
| groupedInfos[].cylinderFrom | Number | Цилиндр, нижняя граница диапазона |
| groupedInfos[].cylinderTo | Number | Цилиндр, верхняя граница диапазона |
| groupedInfos[].addFrom | Number | Аддидация, нижняя граница диапазона |
| groupedInfos[].addTo | Number | Аддидация, верхняя граница диапазона |
| groupedInfos[].lastUpdatedOn | String | Дата последнего обновления (LocalDate, yyyy-MM-dd) |
Поиск: Контактные линзы
Метод: POST /api/v2/good/nomenclature/search/contact-lenses
Тело запроса — ContactLensesNomenclatureFilter. Первые четыре поля унаследованы от AbstractGoodsNomenclatureFilter.
Поля запроса (тело)
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
| byPriceList | Boolean | Признак поиска по прайс-листу | Обязательное поле |
| deleted | Boolean | true — поиск в таблицах удалённой номенклатуры *_mv_deleted; работает только при byPriceList=false
|
|
| retailPriceFrom | Number | Розничная цена, нижняя граница диапазона | |
| retailPriceTo | Number | Розничная цена, верхняя граница диапазона | |
| manufacturer | String | Производитель | |
| name | String | Название | |
| color | String | Цвет | |
| diameter | Number | Диаметр | |
| curvatureRadius | Number | Радиус кривизны | |
| packageQuantity | Number | Количество в упаковке | |
| wearingPeriod | String | Период ношения |
Запрос
POST /api/v2/good/nomenclature/search/contact-lenses HTTP/1.1
{
"byPriceList" : true,
"manufacturer" : "CIBA",
"name" : "1-Day Acuvue Oasys",
"color" : "Aqua",
"diameter" : 14.0,
"curvatureRadius" : 7.4
}
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"retailPrice": 500.0,
"manufacturer": "CIBA",
"name": "1-Day Acuvue Oasys",
"wearingPeriod": "6-12 месяцев",
"color": "Aqua",
"packageQuantity": 6,
"add": "high",
"curvatureRadius": 7.4,
"diameter": null,
"diameterFrom": 13.2,
"diameterTo": 14.8,
"dioptreFrom": -10.0,
"dioptreTo": 10.0,
"cylinderFrom": -10.0,
"cylinderTo": 10.0,
"axisFrom": 0,
"axisTo": 100
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 10,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 1,
"totalElements": 2,
"last": true,
"size": 10,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 2,
"first": true,
"empty": false
}
Поля ответа (content[] — ContactLensesNomenclatureSearchResponse)
| Путь | Тип | Описание |
|---|---|---|
| id | Number | ID номенклатуры |
| retailPrice | Number | Розничная цена |
| manufacturer | String | Производитель |
| name | String | Название |
| wearingPeriod | String | Период ношения |
| color | String | Цвет |
| packageQuantity | Number | Количество в упаковке |
| add | String | Аддидация |
| curvatureRadius | Number | Радиус кривизны |
| diameter | Number | Диаметр |
| diameterFrom | Number | Диаметр, нижняя граница доступного диапазона |
| diameterTo | Number | Диаметр, верхняя граница доступного диапазона |
| dioptreFrom | Number | Диоптрии, нижняя граница доступного диапазона |
| dioptreTo | Number | Диоптрии, верхняя граница доступного диапазона |
| cylinderFrom | Number | Цилиндр, нижняя граница доступного диапазона |
| cylinderTo | Number | Цилиндр, верхняя граница доступного диапазона |
| axisFrom | Number | Ось, нижняя граница доступного диапазона |
| axisTo | Number | Ось, верхняя граница доступного диапазона |
Поиск: Сложные позиции (оправа с линзами)
Метод: POST /api/v2/good/nomenclature/search/extras
Тело запроса — ExtrasNomenclatureFilter. Первые четыре поля унаследованы от AbstractGoodsNomenclatureFilter.
Поля запроса (тело)
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
| byPriceList | Boolean | Признак поиска по прайс-листу | Обязательное поле |
| deleted | Boolean | true — поиск в таблицах удалённой номенклатуры *_mv_deleted; работает только при byPriceList=false
|
|
| retailPriceFrom | Number | Розничная цена, нижняя граница диапазона | |
| retailPriceTo | Number | Розничная цена, верхняя граница диапазона | |
| frameManufacturer | String | Производитель оправы | |
| frameBrand | String | Бренд оправы | |
| frameModel | String | Модель оправы | |
| frameType | String | Тип оправы | |
| frameMaterial | String | Материал оправы | |
| frameTargetGroup | String | Целевая группа оправы | |
| frameColor | String | Цвет оправы |
Запрос
POST /api/v2/good/nomenclature/search/extras HTTP/1.1
{
"byPriceList" : true,
"frameManufacturer" : "bro",
"frameBrand" : "Harley-Davidson",
"frameModel" : "1006 C3",
"frameType" : null,
"frameMaterial" : null,
"frameTargetGroup" : null,
"frameColor" : null
}
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"retailPrice": 500.0,
"frameManufacturer": "bro",
"frameBrand": "Harley-Davidson",
"frameModel": "1006 C3",
"frameType": null,
"frameMaterial": null,
"frameTargetGroup": null,
"frameColor": null,
"lensManufacturer": "bro",
"lensBrand": "Extenso 15 OR",
"dioptreFrom": 0.25,
"dioptreTo": 5.0
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 10,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 1,
"totalElements": 2,
"last": true,
"size": 10,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 2,
"first": true,
"empty": false
}
Поля ответа (content[] — ExtrasNomenclatureSearchResponse)
| Путь | Тип | Описание |
|---|---|---|
| id | Number | ID номенклатуры |
| retailPrice | Number | Розничная цена |
| frameManufacturer | String | Производитель оправы |
| frameBrand | String | Бренд оправы |
| frameModel | String | Модель оправы |
| frameType | String | Тип оправы |
| frameMaterial | String | Материал оправы |
| frameTargetGroup | String | Целевая группа оправы |
| frameColor | String | Цвет оправы |
| lensManufacturer | String | Производитель линз |
| lensBrand | String | Бренд линз |
| odManufacturer | String | Производитель линзы для правого глаза (OD) |
| osManufacturer | String | Производитель линзы для левого глаза (OS) |
| odBrand | String | Бренд линзы для правого глаза (OD) |
| osBrand | String | Бренд линзы для левого глаза (OS) |
| dioptreFrom | Number | Диоптрии, нижняя граница доступного диапазона |
| dioptreTo | Number | Диоптрии, верхняя граница доступного диапазона |
Поиск: Полуфабрикаты линз
Метод: POST /api/v2/good/nomenclature/search/semifinished-lenses
Тело запроса — SemifinishedLensesNomenclatureFilter. Первые четыре поля унаследованы от AbstractGoodsNomenclatureFilter.
Поля запроса (тело)
| Путь | Тип | Описание | Ограничения |
|---|---|---|---|
| byPriceList | Boolean | Признак поиска по прайс-листу | Обязательное поле |
| deleted | Boolean | true — поиск в таблицах удалённой номенклатуры *_mv_deleted; работает только при byPriceList=false
|
|
| retailPriceFrom | Number | Розничная цена, нижняя граница диапазона | |
| retailPriceTo | Number | Розничная цена, верхняя граница диапазона | |
| manufacturer | String | Производитель | |
| brand | String | Бренд | |
| type | String | Тип | |
| lensesClass | String | Класс линз | |
| refractionIndex | Number | Показатель преломления | |
| material | String | Материал | |
| diameter | Number | Диаметр | |
| geometry | String | Геометрия | |
| cover | String | Покрытие | |
| technology | String | Технология | |
| color | String | Цвет |
Запрос
POST /api/v2/good/nomenclature/search/semifinished-lenses HTTP/1.1
{
"byPriceList" : true,
"manufacturer" : "ИП Попугаев",
"brand" : "Betters",
"type" : "Бифокальная",
"lensesClass" : null,
"refractionIndex" : 1.7,
"material" : null,
"diameter" : null,
"geometry" : "Биасферическая",
"cover" : "Crizal Easy",
"technology" : "Transitions",
"color" : null
}
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"retailPrice": 500.0,
"manufacturer": "ИП Попугаев",
"brand": "Betters",
"type": "Бифокальная",
"lensesClass": null,
"refractionIndex": 1.7,
"diameter": null,
"cover": "Crizal Easy",
"color": null,
"geometry": "Биасферическая",
"technology": "Transitions"
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 10,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 1,
"totalElements": 2,
"last": true,
"size": 10,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 2,
"first": true,
"empty": false
}
Поля ответа (content[] — SemifinishedLensesNomenclatureSearchResponse)
| Путь | Тип | Описание |
|---|---|---|
| id | Number | ID номенклатуры |
| retailPrice | Number | Розничная цена |
| manufacturer | String | Производитель |
| brand | String | Бренд |
| material | String | Материал |
| type | String | Тип |
| lensesClass | String | Класс линз |
| refractionIndex | Number | Показатель преломления |
| diameter | Number | Диаметр |
| cover | String | Покрытие |
| color | String | Цвет |
| geometry | String | Геометрия |
| technology | String | Технология |
3.8. Параметры товаров (Goods params)
Возвращают доступные значения параметров номенклатуры (производители, бренды, модели, цвета, материалы и т. д.) с учётом уже выбранных значений.
Параметры: Аксессуары
Метод: GET /api/v2/accessories/params
Возвращает список доступных значений параметров для указанного типа товара. Параметры запроса позволяют сузить выборку по ранее выбранным значениям.
Запрос
GET /api/v2/accessories/params?accessoryCategory=%D0%91%D1%80%D0%B5%D0%BB%D0%BE%D0%BA HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| accessoryCategory | Выбранная категория аксессуара |
Ответ
HTTP/1.1 200 OK
{
"categories" : [ "Брелок", "Готовые очки", "Диагностические полоски", "Диспенсер", "Дорожный набор", "Дорожный набор для МКЛ", "Емкость для промывки МКЛ", "Капли", "Клипса", "Контейнер", "Контейнер для МКЛ", "Лупа", "Набор", "Набор для МКЛ", "Набор отверток", "Не маркируемые товары", "Окклюдер", "Очиститель энз", "Пинцет", "Пинцет-ножницы", "Подарок", "Подарочный сертификат", "Раствор", "Салфетка микрофибра", "Санитель", "Спрей", "Средство", "Средство офтальмологическое", "Таблетки", "Устройство для промывки МКЛ", "Футляр", "Футляр для контейнера", "Холдер", "Шнурки", "Шнурки-резинки" ],
"models" : [ "Брелок-отвертка" ]
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| categories | Array | Категории аксессуара |
| models | Array | Модели аксессуара. Зависят от переданной категории |
Параметры: Солнцезащитные очки
Метод: GET /api/v2/sunglasses/params
Возвращает список доступных значений параметров для указанного типа товара. Параметры запроса позволяют сузить выборку по ранее выбранным значениям.
Запрос
GET /api/v2/sunglasses/params?manufacturer=Kering&brand=Gucci HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| manufacturer | Выбранный производитель |
| brand | Выбранный бренд |
| model | Выбранная модель |
Ответ
HTTP/1.1 200 OK
{
"manufacturers" : [ "Kering", "Италия" ],
"brands" : [ "Alexander McQueen", "Bottega Veneta", "Boucheron", "Brioni", "Christopher Kane", "Gucci", "McQ", "Pomellato", "Puma", "Saint Laurent", "Stella McCartney", "Tomas Maier" ],
"models" : [ "1041", "4225", "GG0001S", "GG0002S", "GG0003S", "GG0008S", "GG0008SA", "GG0009S", "GG0010S", "GG0014S", "GG0015S", "GG0016S", "GG0017S", "GG0022S", "GG0022SA", "GG0023S", "GG0024S", "GG0028S", "GG0028SA", "GG0029S", "GG0029SA", "GG0032S", "GG0032SA", "GG0034S", "GG0034SA", "GG0035S", "GG0035SA", "GG0036S", "GG0043SA", "GG0045S", "GG0046S", "GG0047S", "GG0048S", "GG0050S", "GG0051S", "GG0052S", "GG0053S", "GG0054S", "GG0055S", "GG0056S", "GG0059S", "GG0061S", "GG0062S", "GG0065SK", "GG0066S", "GG0067S", "GG0068S", "GG0073S", "GG0074S", "GG0074SK", "GG0075S", "GG0075SK", "GG0076S", "GG0077SK", "GG0078SK", "GG0079SK", "GG0083S", "GG0084S", "GG0085S", "GG0086S", "GG0087S", "GG0088S" ],
"frameTypes" : [ "-", "Безободковая", "Винтовая", "Для чтения", "Лесочная", "Ободковая", "не указано" ],
"materials" : [ "-", "acetat", "Ацетат", "Комбинированная", "Металл", "Пластик", "Титан" ],
"targetGroups" : [ "-", "Дет.", "Детская", "Жен.", "Женская", "Муж.", "Мужская", "Унисекс" ],
"lensesTypes" : [ "-", "Поляризационная" ],
"colors" : [ "001", "002", "003", "004", "005", "006", "007" ],
"designs" : [ "good design" ]
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| manufacturers | Array | Производители. Зависят от переданного бренда |
| brands | Array | Бренды. Зависят от переданного производителя |
| models | Array | Модели |
| frameTypes | Array | Типы оправы |
| materials | Array | Материалы |
| targetGroups | Array | Целевые группы |
| lensesTypes | Array | Типы линз |
| colors | Array | Цвета. Зависят от выбранного бренда |
| designs | Array | Дизайны |
Параметры: Очки
Метод: GET /api/v2/glasses/params
Возвращает список доступных значений параметров для указанного типа товара. Параметры запроса позволяют сузить выборку по ранее выбранным значениям.
Запрос
GET /api/v2/glasses/params?manufacturer=%D0%98%D1%82%D0%B0%D0%BB%D0%B8%D1%8F&brand=Barracuda HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| manufacturer | Выбранный производитель |
| brand | Выбранный бренд |
| model | Выбранная модель |
Ответ
HTTP/1.1 200 OK
{
"manufacturers" : [ "Италия", "Китай" ],
"brands" : [ "Agent Fashion", "Air Force", "Alex Thorn", "Allison", "Aniramela", "Assoluto", "Barracuda", "Benetton", "Bikkembergs", "Blumarine", "COCO Song", "Carolina Herrera", "Ciao Ciao", "Cinema-Quentin", "DV", "Despada", "Dolce Vita", "Enni Marco", "Estee", "Fashion Agent", "Fashion Ferre", "Fendi", "Fila", "Free Style", "Furla", "Garfield", "Givenchy", "Gucci", "Hermossa", "Jessie", "Kiddes", "La Stella", "MIU MIU", "Mario Rossi", "Moiella Vagabonda", "Mont Blanc", "Muffler", "My Way", "OPMA", "Police", "Prd", "Pulsar", "Riviera", "Shrek", "Sting", "T. Morgan", "Tom Ford", "Versace", "Vy", "X", "You Young", "люкс" ],
"models" : [ "0601", "0602", "0704", "802", "804", "BJ 0501", "BS 0708" ],
"types" : [ "-", "Безободковая", "Винтовая", "Для чтения", "Лесочная", "Ободковая", "не указано" ],
"materials" : [ "-", "acetat", "Ацетат", "Комбинированная", "Металл", "Пластик", "Титан" ],
"targetGroups" : [ "-", "Дет.", "Детская", "Жен.", "Женская", "Муж.", "Мужская", "Унисекс" ],
"sizes" : [ "42-14-115", "43-13-115", "46-15-125", "47-16-130", "48-16-125", "48-16-135", "48-17-130", "48-18", "49", "49-15-125", "49-16-125", "49-16-130", "49-17", "49-19-135", "49-21-140", "49-23-140", "50", "50-16-125", "50-17-140", "50-19-140", "51-16", "51-16-135", "51-16-140", "51-17-137", "51-18-135", "51-18-140", "51-19-140", "51-20", "51-21-140", "52", "52-15-135", "52-15-140", "52-16", "52-16-137", "52-16-140", "52-17", "52-17-135", "52-17-138", "52-17-140", "52-18-135", "52-18-138", "52-19-140", "52-20-140", "53", "53-14-140", "53-15-135", "53-15-140", "53-16", "53-16-135", "53-16-140", "53-17-135", "53-17-138", "53-17-140", "53-17-145", "53-18-135", "53-18-140", "54", "54-13-140", "54-14-135", "54-15-135", "54-15-140", "54-16", "54-16-140", "54-16-145", "54-17-135", "54-17-140", "54-17-145", "55", "55-15-140", "55-15-150", "55-16-140", "55-17-135", "55-17-140", "55-17-145", "55-18-140", "55-18-145", "55018-145", "56", "56-15", "56-16-140", "56-16-145", "56-17-145", "56-18-145", "56-19-140", "56-19-150", "57-17-145", "57-18-145", "58-14-150", "59-16-140", "РЦ70" ],
"designs" : [ "good design" ],
"diameters" : [ 50, 52, 55, 56, 60, 65, 67, 70, 72, 73, 74, 75, 76, 80 ],
"colors" : [ "c1", "c2" ]
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| manufacturers | Array | Производители. Зависят от переданного бренда |
| brands | Array | Бренды. Зависят от переданного производителя |
| models | Array | Модели |
| types | Array | Типы оправы |
| materials | Array | Материалы |
| targetGroups | Array | Целевые группы |
| designs | Array | Дизайны |
| sizes | Array | Размеры |
| diameters | Array | Мин.диаметры |
| colors | Array | Цвета. Зависят от выбранного бренда |
Параметры: Линзы
Метод: GET /api/v2/lenses/params
Возвращает список доступных значений параметров для указанного типа товара. Параметры запроса позволяют сузить выборку по ранее выбранным значениям.
Запрос
GET /api/v2/lenses/params?manufacturer=Essilor&brand=Acclimates HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| manufacturer | Выбранный производитель |
| brand | Выбранный бренд |
Ответ
HTTP/1.1 200 OK
{
"brands" : [ "Acclimates", "Activations", "Airwear", "Airwear Baby", "Airwear Junior", "Airwear Transitions", "Anti-Fatigue", "Asphor", "Blue Cut", "E-Lens", "FSV", "Intervista 080 Orma", "Intervista 080 Ormix", "Intervista 130 Orma", "Intervista 130 Ormix", "Lineis", "Multivision Orma", "Orma 15", "Orma Physiotint", "Orma Thin", "Orma Transitions", "Orma XTRActive", "Orma Xperio", "Ormix", "Ormix Transitions", "Sharp", "Stylis", "Stylis Transitions", "VX Comfort", "VX Start 080" ],
"classes" : [ "-", "Для вождения", "Компьютерная", "Поляризационная", "Поляризационная Фотохромная", "Поляризационная фотохромная", "Солнцезащитная", "Стандарт", "Тонированная", "Фотохромная", "не указано" ],
"colors" : [ "Brown", "Brown 85%", "Graphite Green", "Gray", "Gray 1", "Gray 3", "Gray 85%", "Green", "Green 15", "Grey", "Pioneer 85%" ],
"covers" : [ "-", "Blue Cut", "Blue Shild", "CC STOK", "Clar's", "Combi NT", "Crizal A2", "Crizal Alize", "Crizal Alize UV", "Crizal Alize+", "Crizal Alize+ UV", "Crizal Alize+ UVX", "Crizal Easy", "Crizal Easy UV", "Crizal Forte", "Crizal Forte UV", "Crizal Prevencia", "DVBP UV", "DVDS UV", "DVP UV", "Diam's", "Diam's Clear UV", "E-lens", "Elixir", "Glacier", "Gold ET", "HC", "HC Supersin", "HCC", "HMC", "HMC Blue", "HMC UV EMI", "HMC+", "HVA", "Hi-Vision Aqua", "Hi-Vision LongLife", "LotuTec UV", "Net Blue UV", "Net UV", "Neva Max Blue UV", "Neva Max Secret UV", "Neva Max UV", "Optifog", "Protect+", "RX HC/ISC", "RX HC", "RX Mirror/ISC", "RX SCC", "RX SRB", "RX SRC", "RX UC", "RX UV 400", "Record", "SCC STOK", "SD", "SHMC", "SHV", "SRC STOK", "Sun", "Super HMC", "Super Hi-Vision", "SuperLite", "Supra", "Tonic", "Trio", "Trio Clean", "UC", "Без покрытия" ],
"diameters" : [ 50, 52, 55, 56, 60, 65, 67, 70, 72, 73, 74, 75, 76, 80 ],
"geometries" : [ "-", "BC 3", "BC 4", "BC 5", "BC 6", "BC 8", "Асферическая", "Биасферическая", "Внешняя прогрессия", "Внутренняя прогрессия", "Лентикуляр", "С 28", "Специальная", "Сферическая", "не указано" ],
"manufacturers" : [ "Essilor", "LTL" ],
"materials" : [ "Airwear", "CR-39", "EYNOA", "Orma 15", "Ormix", "Trivex", "Минерал", "Пластик", "Поликарбонат", "Полимер", "не указано" ],
"refractionIndexes" : [ 1.5, 1.52, 1.53, 1.54, 1.55, 1.56, 1.59, 1.6, 1.61, 1.67, 1.7, 1.74, 1.8 ],
"technologies" : [ "Blue Zero", "Blue-Shield", "BlueControl", "DEG-1.0", "DEG-1.5", "Deg-2.0", "Degression Power", "DriveWear", "Office Degression Power 1.00", "Office Degression Power 1.33", "PhotoFusion", "Polarising", "Progressive Fpal", "SunSwift", "Suntech", "Transitions", "Transitions 7", "Transitions V", "Transitions VI", "Transitions VII", "Transitions VII XTRActive", "Transitions XTRActive", "Tribrid", "Tribrid Deg-1.0", "Tribrid Deg-1.5", "Tribrid Deg-2.0", "Tribrid Transition 7", "Umbramatic" ],
"types" : [ "Астигматическая", "Бифокальная", "Однофокальная", "Офисная", "Прогрессивная", "Прогрессивная с базовой кривизной", "Стигматическая", "мультифокусная", "не указано", "с поддержкой аккомодации" ],
"dioptres" : [ -30.0, -29.75, -29.5, -29.25, -29.0, -28.75, -28.5, -28.25, -28.0, -27.75, -27.5, -27.25, -27.0, -26.75, -26.5, -26.25, -26.0, -25.75, -25.5, -25.25, -25.0, -24.75, -24.5, -24.25, -24.0, -23.75, -23.5, -23.25, -23.0, -22.75, -22.5, -22.25, -22.0, -21.75, -21.5, -21.25, -21.0, -20.75, -20.5, -20.25, -20.0, -19.75, -19.5, -19.25, -19.0, -18.75, -18.5, -18.25, -18.0, -17.75, -17.5, -17.25, -17.0, -16.75, -16.5, -16.25, -16.0, -15.75, -15.5, -15.25, -15.0, -14.75, -14.5, -14.25, -14.0, -13.75, -13.5, -13.25, -13.0, -12.75, -12.5, -12.25, -12.0, -11.75, -11.5, -11.25, -11.0, -10.75, -10.5, -10.25, -10.0, -9.75, -9.5, -9.25, -9.0, -8.75, -8.5, -8.25, -8.0, -7.75, -7.5, -7.25, -7.0, -6.75, -6.5, -6.25, -6.0, -5.75, -5.5, -5.25, -5.0, -4.75, -4.5, -4.25, -4.0, -3.75, -3.5, -3.25, -3.0, -2.75, -2.5, -2.25, -2.0, -1.75, -1.5, -1.25, -1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 4.25, 4.5, 4.75, 5.0, 5.25, 5.5, 5.75, 6.0, 6.25, 6.5, 6.75, 7.0, 7.25, 7.5, 7.75, 8.0, 8.25, 8.5, 8.75, 9.0, 9.25, 9.5, 9.75, 10.0, 10.25, 10.5, 10.75, 11.0, 11.25, 11.5, 11.75, 12.0, 12.25, 12.5, 12.75, 13.0, 13.25, 13.5, 13.75, 14.0, 14.25, 14.5, 14.75, 15.0, 15.25, 15.5, 15.75, 16.0, 16.25, 16.5, 16.75, 17.0, 17.25, 17.5, 17.75, 18.0, 18.25, 18.5, 18.75, 19.0, 19.25, 19.5, 19.75, 20.0, 20.25, 20.5, 20.75, 21.0, 21.25, 21.5, 21.75, 22.0, 22.25, 22.5, 22.75, 23.0, 23.25, 23.5, 23.75, 24.0, 24.25, 24.5, 24.75, 25.0, 25.25, 25.5, 25.75, 26.0, 26.25, 26.5, 26.75, 27.0, 27.25, 27.5, 27.75, 28.0, 28.25, 28.5, 28.75, 29.0, 29.25, 29.5, 29.75, 30.0 ]
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| manufacturers | Array | Производители. Зависят от переданного бренда |
| brands | Array | Бренды. Зависят от переданного производителя |
| types | Array | Типы линз |
| classes | Array | Классы линз |
| dioptres | Array | Диоптрии |
| refractionIndexes | Array | Индексы рефракции |
| materials | Array | Материалы |
| diameters | Array | Диаметры |
| geometries | Array | Геометрии |
| covers | Array | Покрытия |
| technologies | Array | Технологии |
| colors | Array | Цвета |
Параметры: Контактные линзы
Метод: GET /api/v2/contact-lenses/params
Возвращает список доступных значений параметров для указанного типа товара. Параметры запроса позволяют сузить выборку по ранее выбранным значениям.
Запрос
GET /api/v2/contact-lenses/params?manufacturer=ALCON&name=Air%20Optix%20Colors HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| manufacturer | Выбранный производитель |
| name | Выбранное наименование |
Ответ
HTTP/1.1 200 OK
{
"manufacturers" : [ "ALCON" ],
"names" : [ "Air Optix Colors", "Air Optix Colors Diag", "Air Optix Plus HydraGlyde", "Dailies Total One", "Fresh Look ColorBlends", "Fresh Look Colors Diag", "Fresh Look Dimensions Diag" ],
"addidations" : [ "+2.00", "high", "low", "med" ],
"colors" : [ "Amethyst", "Aqua", "BLUE", "Black", "Black out", "Blue", "Brilliant Blue", "Browen", "Brown", "Caribbean Aqua", "GREEN", "Gemstone Green", "Gold", "Gray", "Green", "Hazel", "Pacific Blue", "Pure Gold", "Pure Hazel", "Sapphire", "Sapphire Blue", "Sea Green", "Shimmer", "Sparkle", "Sterling Gray", "Sterling Grey", "TRUE SAPPHIRE", "TURQUOISE", "True Sapphire", "True sapphire", "Turquoise", "Violet", "~Aqua", "~Blue", "~Green" ],
"diameters" : [ 13.2, 13.8, 14.0, 14.1, 14.2, 14.3, 14.5, 14.8 ],
"radiuses" : [ 7.4, 7.7, 7.8, 8.0, 8.1, 8.3, 8.4, 8.5, 8.6, 8.7, 8.8, 8.9, 9.0, 9.2 ],
"wearingPeriods" : [ "1 день", "1 месяц", "2 недели", "3 месяца", "30 дней", "6-12 месяцев", "90 дней", "не указано" ],
"dioptres" : [ -30.0, -29.75, -29.5, -29.25, -29.0, -28.75, -28.5, -28.25, -28.0, -27.75, -27.5, -27.25, -27.0, -26.75, -26.5, -26.25, -26.0, -25.75, -25.5, -25.25, -25.0, -24.75, -24.5, -24.25, -24.0, -23.75, -23.5, -23.25, -23.0, -22.75, -22.5, -22.25, -22.0, -21.75, -21.5, -21.25, -21.0, -20.75, -20.5, -20.25, -20.0, -19.75, -19.5, -19.25, -19.0, -18.75, -18.5, -18.25, -18.0, -17.75, -17.5, -17.25, -17.0, -16.75, -16.5, -16.25, -16.0, -15.75, -15.5, -15.25, -15.0, -14.75, -14.5, -14.25, -14.0, -13.75, -13.5, -13.25, -13.0, -12.75, -12.5, -12.25, -12.0, -11.75, -11.5, -11.25, -11.0, -10.75, -10.5, -10.25, -10.0, -9.75, -9.5, -9.25, -9.0, -8.75, -8.5, -8.25, -8.0, -7.75, -7.5, -7.25, -7.0, -6.75, -6.5, -6.25, -6.0, -5.75, -5.5, -5.25, -5.0, -4.75, -4.5, -4.25, -4.0, -3.75, -3.5, -3.25, -3.0, -2.75, -2.5, -2.25, -2.0, -1.75, -1.5, -1.25, -1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 4.25, 4.5, 4.75, 5.0, 5.25, 5.5, 5.75, 6.0, 6.25, 6.5, 6.75, 7.0, 7.25, 7.5, 7.75, 8.0, 8.25, 8.5, 8.75, 9.0, 9.25, 9.5, 9.75, 10.0, 10.25, 10.5, 10.75, 11.0, 11.25, 11.5, 11.75, 12.0, 12.25, 12.5, 12.75, 13.0, 13.25, 13.5, 13.75, 14.0, 14.25, 14.5, 14.75, 15.0, 15.25, 15.5, 15.75, 16.0, 16.25, 16.5, 16.75, 17.0, 17.25, 17.5, 17.75, 18.0, 18.25, 18.5, 18.75, 19.0, 19.25, 19.5, 19.75, 20.0, 20.25, 20.5, 20.75, 21.0, 21.25, 21.5, 21.75, 22.0, 22.25, 22.5, 22.75, 23.0, 23.25, 23.5, 23.75, 24.0, 24.25, 24.5, 24.75, 25.0, 25.25, 25.5, 25.75, 26.0, 26.25, 26.5, 26.75, 27.0, 27.25, 27.5, 27.75, 28.0, 28.25, 28.5, 28.75, 29.0, 29.25, 29.5, 29.75, 30.0 ]
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| manufacturers | Array | Производители. Зависят от переданного наименования |
| names | Array | Наименования. Зависят от переданного производителя |
| dioptres | Array | Диоптрии |
| addidations | Array | Аддидации |
| diameters | Array | Диаметры |
| radiuses | Array | Радиусы |
| wearingPeriods | Array | Периоды ношения |
| colors | Array | Цвета |
Параметры: Сложные позиции (оправа с линзами)
Метод: GET /api/v2/extras/params
Возвращает список доступных значений параметров для указанного типа товара. Параметры запроса позволяют сузить выборку по ранее выбранным значениям.
Запрос
GET /api/v2/extras/params?manufacturer=%D0%9A%D0%B8%D1%82%D0%B0%D0%B9&brand=ELNINO HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| manufacturer | Выбранный производитель |
| brand | Выбранный бренд |
| model | Выбранная модель |
Ответ
HTTP/1.1 200 OK
{
"glassesManufacturers" : [ "Китай" ],
"glassesBrands" : [ "Agio", "Aimegi", "Alanie", "Amshar", "Automan", "Avva", "Babylook", "Baoma", "Barracuda", "Bauhaus", "Best", "Bigdos", "Boccaccio", "Bosiyan", "Caili", "Cardydony", "Carrera", "Casamorati", "Ccdk", "Charm", "Chimay", "Concul", "Consul", "Cool Mirror", "Corrado", "Crtr", "Dacchi", "Dacor", "Daniel Hechter", "Delli", "Diverona", "Duuel", "ELNINO", "Emma Moser", "Enni Marco", "Enrico Coveri", "FERELLI", "Fabiano", "Fabricio", "Fabrizio Garangi", "Ferret", "Fiore Dulivo", "Florenzi", "Foluolun", "Gentleman", "Gestion", "Givenchy", "Glodiatr", "Glory", "Good Child", "Grosso", "Gruppo Colombini", "Gucci", "Happy", "Harley-Davidson", "Hugoconti", "Jacopo", "Jessie", "Juniorlook", "Kalita", "Kalita Junior", "Karidi", "Kiddes", "Kingber", "Life", "Look&Feel", "Loris", "Mario Rossi", "Martin Wells", "Max Mitchell", "Max&Co", "Medici", "Megapolis", "Megapolis Premium", "Megastar", "Menticano", "Mien", "Monica", "Moschino Love", "Musenna", "Nano Bimbo", "Nazareno Corsini", "Newport", "Niccolo Giovanni", "Nikitana", "OPAA", "OPGG", "OPGM", "OPMM", "OWII", "OWMM", "Ocean", "Oliva", "Omuda", "Opal", "Oxydo", "PD", "Penguin Baby", "Perfect", "Personage Club", "Pierre Cardin", "Podium", "Polaroid", "Polaroid Kids", "Polivizor", "Prd", "Prefer", "RB", "Rafaelle", "Ray-Ban", "Rebus", "Red Sun", "Red Velvet", "Ricardo", "Rich Person", "Riviera", "Rolph", "Royring", "SAREMO", "Safilo", "San Rays", "Santarelli", "Saui Bass", "Senbird", "Sensuelle", "Silh", "Sone", "Sorrento", "Stephen Curry", "Sting", "Terra Pro", "Timberland", "Top-Optic", "Top-Style", "VOV", "Valencia", "Van Danis", "Victory", "Vizzini", "Vogue", "Vov", "ZF" ],
"models" : [ "16Q014A C3", "17Q002A C1", "17Q002A C2", "2001 C4", "2004 С3", "2014 С1", "RD1122 C2" ],
"glassesTypes" : [ "-", "Винтовая", "Для чтения", "Лесочная", "Ободковая", "не указано" ],
"materials" : [ "-", "acetat", "Ацетат", "Комбинированная", "Металл", "Пластик", "Титан" ],
"targetGroups" : [ "-", "Дет.", "Детская", "Жен.", "Женская", "Муж.", "Мужская", "Унисекс" ],
"colors" : [ ],
"dioptres" : [ -30.0, -29.75, -29.5, -29.25, -29.0, -28.75, -28.5, -28.25, -28.0, -27.75, -27.5, -27.25, -27.0, -26.75, -26.5, -26.25, -26.0, -25.75, -25.5, -25.25, -25.0, -24.75, -24.5, -24.25, -24.0, -23.75, -23.5, -23.25, -23.0, -22.75, -22.5, -22.25, -22.0, -21.75, -21.5, -21.25, -21.0, -20.75, -20.5, -20.25, -20.0, -19.75, -19.5, -19.25, -19.0, -18.75, -18.5, -18.25, -18.0, -17.75, -17.5, -17.25, -17.0, -16.75, -16.5, -16.25, -16.0, -15.75, -15.5, -15.25, -15.0, -14.75, -14.5, -14.25, -14.0, -13.75, -13.5, -13.25, -13.0, -12.75, -12.5, -12.25, -12.0, -11.75, -11.5, -11.25, -11.0, -10.75, -10.5, -10.25, -10.0, -9.75, -9.5, -9.25, -9.0, -8.75, -8.5, -8.25, -8.0, -7.75, -7.5, -7.25, -7.0, -6.75, -6.5, -6.25, -6.0, -5.75, -5.5, -5.25, -5.0, -4.75, -4.5, -4.25, -4.0, -3.75, -3.5, -3.25, -3.0, -2.75, -2.5, -2.25, -2.0, -1.75, -1.5, -1.25, -1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 4.25, 4.5, 4.75, 5.0, 5.25, 5.5, 5.75, 6.0, 6.25, 6.5, 6.75, 7.0, 7.25, 7.5, 7.75, 8.0, 8.25, 8.5, 8.75, 9.0, 9.25, 9.5, 9.75, 10.0, 10.25, 10.5, 10.75, 11.0, 11.25, 11.5, 11.75, 12.0, 12.25, 12.5, 12.75, 13.0, 13.25, 13.5, 13.75, 14.0, 14.25, 14.5, 14.75, 15.0, 15.25, 15.5, 15.75, 16.0, 16.25, 16.5, 16.75, 17.0, 17.25, 17.5, 17.75, 18.0, 18.25, 18.5, 18.75, 19.0, 19.25, 19.5, 19.75, 20.0, 20.25, 20.5, 20.75, 21.0, 21.25, 21.5, 21.75, 22.0, 22.25, 22.5, 22.75, 23.0, 23.25, 23.5, 23.75, 24.0, 24.25, 24.5, 24.75, 25.0, 25.25, 25.5, 25.75, 26.0, 26.25, 26.5, 26.75, 27.0, 27.25, 27.5, 27.75, 28.0, 28.25, 28.5, 28.75, 29.0, 29.25, 29.5, 29.75, 30.0 ],
"lensesManufacturers" : [ "BBGR", "Chemiglas Corp.", "Default for manufacturer", "Essilor", "Hoya", "ILT", "LTL", "Lencor Vision", "Rodenstock", "Seiko", "Shamir", "Synchrony", "Unor", "Younger Optics", "Zeiss", "bro" ],
"lensesBrands" : [ "A-ZONE", "AS", "AZ", "Access Easy A", "Access Easy B", "Access HD A", "Access HD B", "Acclimate", "Acclimates", "Acclimates II", "Activations", "Airwear", "Airwear Baby", "Airwear Junior", "Airwear Transitions", "Altolite", "Altolite (TINTABLE)", "Altolite Big", "Altolite Kids", "Anti-Fatigue", "Asphor", "Atolite", "Autograph InTouch", "Autograph InTouch(As Worm)", "BBGR", "Blue Cut", "Blue Zero", "Blue-Shield", "BlueBlocker", "BlueBlocker RX", "COMPUTER Xtra", "Computer", "Cristall", "Cryol", "Curved", "Curved X", "Discovery", "Drivewear", "E-Lens", "EMBLEM XtraWide", "EXTENSIVE VISION", "Extenso 10 OR", "Extenso 15 OR", "Eyezen Lite", "FSV", "FSV POLY", "FSV Sunactives G2", "Fin Finite C-12", "Fin Flat Top", "Fit 35", "Genesis", "Glance", "Glance AS", "HOYA", "Hilux Eyas", "Hilux PNX", "INDI- SV", "INDOR", "Intervista 080 Orma", "Intervista 080 Ormix", "Intervista 130 Orma", "Intervista 130 Ormix", "Lineis", "Maxxee", "Multivision Orma", "NuPolar", "Office Degression Power 1.00", "Office Degression Power 1.33", "Optima Lite", "Organic CR-39", "Organic Maximalite", "Organic Middle", "Organic Office", "Orma 15", "Orma Physiotint", "Orma Thin", "Orma Transitions", "Orma XTRActive", "Orma Xperio", "Ormix", "Ormix Transitions", "PH Extra", "Perfalit", "Photobrown UV", "Photogrey UV", "Policarbonate Gentex", "Progressive Fpal 13", "Progressive Starter HD", "Relax", "SUPERIOR Xcel", "SV Rx", "SYNERGI Xtra", "Seiko 1.5", "Seiko 1.5 DriveWear", "Seiko 1.60", "Seiko 1.67", "Seiko 1.74", "Sharp", "Single Vision", "Single Vision AS", "Single Vision AS PhotoFusion", "Single Vision Mineral", "Single Vision Mineral Umbramatic", "Single Vision PhotoFusion", "Single Vision Sun", "Spectrum", "Stigmal 15", "Stylis", "Stylis Transitions", "SunSensors", "SunSensors ", "SunSwift", "SunSwift ФХ", "Supra", "Supra Lite", "Tintable (покраска)", "Transitions", "Transitions VII", "Transitions XTRActive", "Tribrid", "Trilogy", "Unor", "Unor KID", "Urban", "VISION X", "VX Comfort", "VX Start 080", "WING", "White Glass UV", "Первооткрыватели", "С 28" ],
"lensesTypes" : [ "Астигматическая", "Бифокальная", "Однофокальная", "Офисная", "Прогрессивная", "Прогрессивная с базовой кривизной", "Стигматическая", "мультифокусная", "не указано", "с поддержкой аккомодации" ],
"classes" : [ "-", "Компьютерная", "Поляризационная", "Поляризационная Фотохромная", "Поляризационная фотохромная", "Солнцезащитная", "Стандарт", "Тонированная", "Фотохромная", "не указано" ],
"covers" : [ "-", "Blue Cut", "Blue Shild", "CC STOK", "Clar's", "Combi NT", "Crizal A2", "Crizal Alize", "Crizal Alize UV", "Crizal Alize+", "Crizal Alize+ UV", "Crizal Alize+ UVX", "Crizal Easy", "Crizal Easy UV", "Crizal Forte", "Crizal Forte UV", "Crizal Prevencia", "DVBP UV", "DVDS UV", "DVP UV", "Diam's", "Diam's Clear UV", "E-lens", "Elixir", "Glacier", "Gold ET", "HC", "HC Supersin", "HCC", "HMC", "HMC Blue", "HMC UV EMI", "HMC+", "HVA", "Hi-Vision Aqua", "Hi-Vision LongLife", "LotuTec UV", "Net Blue UV", "Net UV", "Neva Max Blue UV", "Neva Max Secret UV", "Neva Max UV", "Optifog", "Protect+", "RX HC/ISC", "RX HC", "RX Mirror/ISC", "RX SCC", "RX SRB", "RX SRC", "RX UC", "RX UV 400", "Record", "SCC STOK", "SD", "SHMC", "SHV", "SRC STOK", "Sun", "Super HMC", "Super Hi-Vision", "SuperLite", "Supra", "Tonic", "Trio", "Trio Clean", "UC", "Без покрытия" ]
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| glassesManufacturers | Array | Производители оправ. Зависят от переданного бренда оправ |
| glassesBrands | Array | Бренды оправ. Зависят от переданного производителя оправ |
| models | Array | Модели |
| glassesTypes | Array | Типы оправ |
| materials | Array | Материалы |
| targetGroups | Array | Целевые группы |
| colors | Array | Цвета |
| dioptres | Array | Диоптрии |
| lensesManufacturers | Array | Производители линз |
| lensesBrands | Array | Бренды линз |
| lensesTypes | Array | Типы линз |
| classes | Array | Классы линз |
| covers | Array | Покрытия линз |
Параметры: Полуфабрикаты линз
Метод: GET /api/v2/semifinished-lens/params
Возвращает список доступных значений параметров для указанного типа товара. Параметры запроса позволяют сузить выборку по ранее выбранным значениям.
Запрос
GET /api/v2/semifinished-lens/params HTTP/1.1
Ответ
HTTP/1.1 200 OK
{
"manufacturers" : [ "Future Vision", "ИП Бубликов", "ООО Ромашка" ],
"brands" : [ "Betters", "Our Future", "Почти готово" ],
"types" : [ "Астигматическая", "Бифокальная", "Однофокальная", "Офисная", "Прогрессивная", "Прогрессивная с базовой кривизной", "Стигматическая", "мультифокусная", "не указано", "с поддержкой аккомодации" ],
"classes" : [ "-", "Для вождения", "Компьютерная", "Поляризационная", "Поляризационная Фотохромная", "Поляризационная фотохромная", "Солнцезащитная", "Стандарт", "Тонированная", "Фотохромная", "не указано" ],
"bases" : [ 0.0, 0.5, 1.0, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 9.0, 10.0 ],
"refractionIndexes" : [ 1.5, 1.52, 1.53, 1.54, 1.55, 1.56, 1.59, 1.6, 1.61, 1.67, 1.7, 1.74, 1.8 ],
"materials" : [ "Airwear", "CR-39", "EYNOA", "Orma 15", "Ormix", "Trivex", "Минерал", "Пластик", "Поликарбонат", "Полимер", "не указано" ],
"diameters" : [ 50, 52, 55, 56, 60, 65, 67, 70, 72, 73, 74, 75, 76, 80 ],
"geometries" : [ "-", "BC 3", "BC 4", "BC 5", "BC 6", "BC 8", "Асферическая", "Биасферическая", "Внешняя прогрессия", "Внутренняя прогрессия", "Лентикуляр", "С 28", "Специальная", "Сферическая", "не указано" ],
"covers" : [ "-", "Blue Cut", "Blue Shild", "CC STOK", "Clar's", "Combi NT", "Crizal A2", "Crizal Alize", "Crizal Alize UV", "Crizal Alize+", "Crizal Alize+ UV", "Crizal Alize+ UVX", "Crizal Easy", "Crizal Easy UV", "Crizal Forte", "Crizal Forte UV", "Crizal Prevencia", "DVBP UV", "DVDS UV", "DVP UV", "Diam's", "Diam's Clear UV", "E-lens", "Elixir", "Glacier", "Gold ET", "HC", "HC Supersin", "HCC", "HMC", "HMC Blue", "HMC UV EMI", "HMC+", "HVA", "Hi-Vision Aqua", "Hi-Vision LongLife", "LotuTec UV", "Net Blue UV", "Net UV", "Neva Max Blue UV", "Neva Max Secret UV", "Neva Max UV", "Optifog", "Protect+", "RX HC/ISC", "RX HC", "RX Mirror/ISC", "RX SCC", "RX SRB", "RX SRC", "RX UC", "RX UV 400", "Record", "SCC STOK", "SD", "SHMC", "SHV", "SRC STOK", "Sun", "Super HMC", "Super Hi-Vision", "SuperLite", "Supra", "Tonic", "Trio", "Trio Clean", "UC", "Без покрытия" ],
"technologies" : [ "Blue Zero", "Blue-Shield", "BlueControl", "DEG-1.0", "DEG-1.5", "Deg-2.0", "Degression Power", "DriveWear", "Office Degression Power 1.00", "Office Degression Power 1.33", "PhotoFusion", "Polarising", "Progressive Fpal", "SunSwift", "Suntech", "Transitions", "Transitions 7", "Transitions V", "Transitions VI", "Transitions VII", "Transitions VII XTRActive", "Transitions XTRActive", "Tribrid", "Tribrid Deg-1.0", "Tribrid Deg-1.5", "Tribrid Deg-2.0", "Tribrid Transition 7", "Umbramatic" ],
"colors" : [ "Brown", "Brown 85%", "Graphite Green", "Gray", "Gray 1", "Gray 3", "Gray 85%", "Green", "Green 15", "Grey", "Pioneer 85%" ]
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| manufacturers | Array | Производители |
| brands | Array | Бренды |
| types | Array | Типы линз |
| classes | Array | Классы линз |
| bases | Array | Базовые кривизны |
| refractionIndexes | Array | Индексы рефракции |
| materials | Array | Материалы |
| diameters | Array | Диаметры |
| geometries | Array | Геометрии |
| covers | Array | Покрытия |
| technologies | Array | Технологии |
| colors | Array | Цвета |
3.9. Заказы (Order)
Журнал заказов, справочники типов и статусов, карточка заказа и данные о последних купленных контактных линзах клиента.
Журнал заказов
Метод: GET /api/v2/orders
Возвращает страницу заказов с фильтрацией по ID, типу, статусу, департаменту, клиенту, пользователю, основанию рецепта и периодам создания/ожидаемой готовности. Поддерживается пагинация (см. раздел 1.3).
Запрос
GET /api/v2/orders?size=5&page=0 HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| orderId | ID заказа |
| type | тип заказа |
| status | статус заказа |
| departmentId | ID подразделения |
| familyNameCient | фамилия клиента |
| userId | ID пользователя |
| prescriptionBasis | основание рецепта |
| createdOnFrom | дата создания, с |
| createdOnTo | дата создания, по |
| finishExpectingOnFrom | ожидаемая дата завершения, с |
| finishExpectingOnTo | ожидаемая дата завершения, по |
| pageable | Описание постраничной навигации |
Ответ
HTTP/1.1 200 OK
{
"content" : [ {
"id" : 9000111225,
"clientId" : 1000001527,
"createdAt" : "2024-02-06T00:00:00",
"finishedAt" : null,
"finishExpectingAt" : null,
"departmentId" : "1000000003",
"departmentName" : "Первый магазин",
"client" : {
"id" : 1000001527,
"familyName" : "Михайлов",
"firstName" : "Евгений",
"patronymicName" : "Александрович"
},
"type" : "SALE",
"status" : "ORDER_READY",
"sum" : 1.0,
"paidSum" : 12.0,
"receiptPrinted" : false,
"createdById" : 1000000004,
"redo" : true,
"medicalSendingFailed" : false,
"readyStatusInStore" : true
} ],
"totalPages" : 41,
"totalElements" : 201,
"size" : 5,
"page" : 0,
"number" : 0,
"pageable" : {
"pageNumber" : 0,
"pageSize" : 5
},
"totalResult" : {
"sum" : 298706.0,
"pageSum" : 1.0,
"paidSum" : 273798.1,
"pagePaidSum" : 12.0,
"purchaseSum" : null,
"pagePurchaseSum" : null,
"retailSum" : null,
"pageRetailSum" : null,
"count" : 201
}
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| content[]. | Array | массив отфильтрованных заказов |
| [].id | Number | ID заказа |
| [].clientId | Number | ID клиента |
| [].createdAt | String | дата и время создания заказа |
| [].finishedAt | String | дата и время завершения заказа |
| [].finishExpectingAt | String | ожидаемые дата и время завершения заказа |
| [].type | String | тип заказа |
| [].status | Array | статусы заказов |
| [].receiptPrinted | Boolean | проверить, напечатан ли чек |
| [].client | Object | client |
| [].client.firstName | String | имя |
| [].client.secondName | String | второе имя |
| [].client.patronymicName | String | отчество |
| [].departmentId | Number | ID подразделения |
| [].departmentName | String | название подразделения |
| [].userId | Number | ID пользователя |
| [].sum | Number | сумма заказа |
| [].paidSum | Number | оплаченная сумма |
| [].redo | Boolean | переделка или нет |
| [].createdById | Number | ID пользователя, создавшего заказ |
| [].isReadyStatusInStore | Boolean | готов ли заказ в магазине |
| [].isMedicalSendingFailed | Boolean | были ли ошибки при отправке в EGISZ или N3Health |
Базовые типы заказов
Метод: GET /api/v2/orders/types
Справочник типов заказов: id (например, SALE, REPAIR, GLASSES, CONTACT_LENS, CHECK_VISION) и локализованное название.
Запрос
GET /api/v2/orders/types HTTP/1.1
Ответ
HTTP/1.1 200 OK
[
{
"id": "GLASSES",
"localName": "Изготовление очков"
}
]
Поля
| Путь | Тип | Описание |
|---|---|---|
| [] | Array | Список базовых типов заказов |
| [].id | String | ID типа счёта |
| [].localName | String | Локализованное название типа счёта |
Статусы заказов
Метод: GET /api/v2/orders/statuses
Справочник возможных значений статуса заказа: WAIT, ACCEPTED, IN_WORK, ORDER_READY, ORDER_COMPLETED, RETURN, CANCEL.
Запрос
GET /api/v2/orders/statuses HTTP/1.1
Ответ
HTTP/1.1 200 OK
[ "WAIT", "ACCEPTED", "IN_WORK", "ORDER_READY", "ORDER_COMPLETED", "RETURN", "CANCEL" ]
Поля
| Путь | Тип | Описание |
|---|---|---|
| [] | Array | массив доступных статусов заказов |
Статусы заказов с комментариями или активные
Метод: GET /api/v2/orders/commented-or-active/statuses
Возвращает статусы заказов за период с фильтрацией по департаменту — используется для поиска заказов, требующих внимания (с комментариями или в активных статусах).
Запрос
GET /api/v2/orders/commented-or-active/statuses?createdOnFrom=2020-12-08&createdOnTo=2022-09-05&departmentId=1000000003 HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| createdOnFrom | дата создания заказа, с |
| createdOnTo | дата создания заказа, по |
| departmentId | ID подразделения |
| pageable | Описание постраничной навигации |
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"orderId": 1000000131,
"status": "ORDER_COMPLETED"
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 100,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 1,
"totalElements": 5,
"last": true,
"size": 100,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 5,
"first": true,
"empty": false
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| content[]. | Array | статусы заказов «прокомментирован» или «активен» |
| [].orderId | Number | Идентификатор заказа |
| [].status | Number | Статус заказа |
Заказ по ID
Метод: GET /api/v2/orders/{orderId}
Возвращает карточку заказа: состав, суммы, статусы, оплаты, привязки к клиенту и департаменту.
Запрос
GET /api/v2/orders/1000000012 HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| orderId | ID заказа |
Ответ
HTTP/1.1 200 OK
{
"id" : 1000000012,
"createdAt" : "2019-01-31T17:13:00.000Z",
"clientId" : 1000000002,
"type" : "SALE",
"departmentName" : "Первый магазин",
"productionDepartmentName" : "Первый магазин",
"status" : "ORDER_COMPLETED",
"sum" : 3500.0,
"paidSum" : 3500.0,
"comment" : null
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| id | Number | id |
| createdAt | String | createdAt |
| type | String | type |
| departmentName | String | departmentName |
| productionDepartmentName | String | productionDepartmentName |
| status | String | status |
| sum | Number | Сумма скидки по заказу |
| paidSum | Number | Сумма, оплаченная за заказ |
Последние купленные контактные линзы клиента
Метод: GET /api/v2/orders/last-purchased/contact-lenses
Возвращает последнюю купленную (или заказанную) позицию контактных линз клиента.
Параметры запроса
| Параметр | Тип | Описание | Ограничения |
|---|---|---|---|
| clientId | Number (Long) | ID клиента | Обязательный параметр запроса |
Запрос
GET /api/v2/orders/last-purchased/contact-lenses?clientId=1110012983 HTTP/1.1
Ответ
HTTP/1.1 200 OK
{
"manufacturerName" : "Johnson&Johnson",
"brandName" : "1-DAY Acuvue Define Diag",
"color" : "Shimmer",
"packageQuantity" : 5,
"wearingPeriod" : "1 день",
"retailPrice" : 1.0,
"dioptre" : 0.0,
"cylinder" : null,
"axis" : null,
"add" : null,
"curvatureRadius" : 8.5,
"diameter" : 14.2,
"purchasedAt" : "2023-04-23T15:25:00",
"orderId" : 1110000056,
"requestType" : "FROM_SUPPLIER",
"departmentId" : null,
"eyeType" : "LEFT_EYE",
"expected" : true
}
Поля ответа (LastPurchasedContactLensesDto, один объект, не список)
| Путь | Тип | Описание |
|---|---|---|
| expected | Boolean | Является ли последняя позиция заявкой на контактные линзы (а не фактической покупкой) |
| manufacturerName | String | Производитель |
| brandName | String | Бренд |
| color | String | Цвет |
| packageQuantity | Number | Количество в упаковке |
| wearingPeriod | String | Период ношения |
| retailPrice | Number | Розничная цена |
| dioptre | Number | Диоптрии |
| cylinder | Number | Цилиндр |
| axis | Number | Ось |
| add | String | Аддидация |
| curvatureRadius | Number | Радиус кривизны |
| diameter | Number | Диаметр |
| purchasedAt | String (LocalDateTime) | Дата и время покупки |
| orderId | Number | ID заказа, в котором была куплена линза |
| requestType | String (enum ContactLensesRequestType) |
Тип заявки: FROM_ANOTHER_DEPARTMENT (из другого департамента) или FROM_SUPPLIER (от поставщика) — заполняется, если позиция оформлена через заявку |
| departmentId | Number | Департамент, из которого куплены линзы — заполняется, если позиция оформлена через заявку |
| eyeType | String (enum EyeSearchType) |
Тип глаза: RIGHT_EYE, LEFT_EYE, BOTH_EYES
|
Причины заказов
Метод: GET /api/v2/orders/reasons
Справочник причин заказов по типу заказа (orderType). Поддерживается сортировка.
Сортировка по умолчанию — name,asc.
Запрос
GET /api/v2/orders/reasons?orderType=SALE HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| orderType | [SALE, REPAIR, GLASSES, CONTACT_LENS, CHECK_VISION, REPAIR_GLASSES_ORDER] |
| sort | Описание сортировки |
Ответ
HTTP/1.1 200 OK
[
{
"names": [
"Test for getting order reason"
],
"required": true,
"active": true
}
]
Поля
| Путь | Тип | Описание |
|---|---|---|
| names | Array | Варианты информационного поля |
| required | Array | Является ли настройка обязательной |
| active | Array | Активно ли поле (если нет, его не нужно отрисовывать) |
3.10. Рецепты (Prescription)
Рецепты клиента (очки)
Метод: GET /api/v2/clients/{clientId}/prescription
Возвращает рецепты клиента на очки: параметры для правого и левого глаза, данные врача, даты выдачи и сроки действия.
Запрос
GET /api/v2/clients/1000000010/prescription HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| clientId | ID клиента |
Ответ
HTTP/1.1 200 OK
{
"prescriptions": [
{
"id": 1000000002,
"sphOd": -1.25,
"sphOs": -2.0,
"cylOd": -0.5,
"cylOs": -0.5,
"axOd": 70,
"axOs": 90,
"prism1DioptreOd": null,
"prism1DioptreOs": null,
"prism2DioptreOd": null,
"prism2DioptreOs": null,
"prism1BaseOd": null,
"prism1BaseOs": null,
"prism2BaseOd": null,
"prism2BaseOs": null,
"addOd": null,
"addOs": null,
"dpp": 66.0,
"dppOd": 33.0,
"dppOs": 33.0,
"visusOd": null,
"visusOs": null,
"purpose": "Рецепт клиента",
"purposeForClientPrescription": null,
"basis": "CLIENT_PRESCRIPTION",
"recommendedLenses": null,
"comments": "",
"date": "2018-10-04T00:00:00.000+00:00",
"deleted": false,
"empty": null,
"doctor": null
}
],
"contactLensPrescriptions": []
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| prescriptions.id | Number | Prescription: id |
| prescriptions.sphOd | Number | Prescription: sphOd |
| prescriptions.sphOs | Number | Prescription: sphOs |
| prescriptions.cylOd | Number | Prescription: cylOd |
| prescriptions.cylOs | Number | Prescription: cylOs |
| prescriptions.axOd | Number | Prescription: axOd |
| prescriptions.axOs | Number | Prescription: axOs |
| prescriptions.addOd | Number | Prescription: addOd |
| prescriptions.addOs | Number | Prescription: addOs |
| prescriptions.dpp | Number | Prescription: dpp |
| prescriptions.dppOd | Number | Prescription: dppOd |
| prescriptions.dppOs | Number | Prescription: dppOs |
| prescriptions.visusOd | Number | Prescription: visusOd |
| prescriptions.visusOs | Number | Prescription: visusOs |
| prescriptions.purpose | String | Prescription: purpose |
| prescriptions.purposeForClientPrescription | String | Prescription: purposeForClientPrescription |
| prescriptions.basis | String | Prescription: basis |
| prescriptions.recommendedLenses | String | Prescription: recommendedLenses |
| prescriptions.comments | String | Prescription: comments |
| prescriptions.date | String | Prescription: date |
| prescriptions.deleted | Boolean | Prescription: deleted |
| prescriptions.empty | Boolean | Prescription: empty |
| clPrescriptions.id | Number | CL Prescription: id |
| clPrescriptions.sphOd | Number | CL Prescription: sphOd |
| clPrescriptions.sphOs | Number | CL Prescription: sphOs |
| clPrescriptions.cylOd | Number | CL Prescription: cylOd |
| clPrescriptions.cylOs | Number | CL Prescription: cylOs |
| clPrescriptions.axOd | Number | CL Prescription: axOd |
| clPrescriptions.axOs | Number | CL Prescription: axOs |
| clPrescriptions.addidationOd | Number | CL Prescription: addidationOd |
| clPrescriptions.addidationOs | Number | CL Prescription: addidationOs |
| clPrescriptions.radiusOd | Number | CL Prescription: radiusOd |
| clPrescriptions.radiusOs | Number | CL Prescription: radiusOs |
| clPrescriptions.diameterOd | Number | CL Prescription: diameterOd |
| clPrescriptions.diameterOs | Number | CL Prescription: diameterOs |
| clPrescriptions.model | String | CL Prescription: model |
| clPrescriptions.color | String | CL Prescription: color |
| clPrescriptions.basis | String | CL Prescription: basis |
| clPrescriptions.comments | String | CL Prescription: comments |
| clPrescriptions.date | String | CL Prescription: date |
| clPrescriptions.deleted | Boolean | CL Prescription: deleted |
Рецепты клиента на контактные линзы
Метод: GET /api/v2/clients/{clientId}/prescription/contact-lens
Возвращает рецепты клиента на контактные линзы: радиус кривизны, диаметр, диоптрии, цилиндр, ось, аддидация, период ношения и т. д.
Запрос
GET /api/v2/clients/122333/prescription/contact-lens HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| clientId | ID клиента |
Ответ
HTTP/1.1 200 OK
[
{
"id": 1100000002,
"model": null,
"color": null,
"basis": "DOCTOR_PRESCRIPTION",
"comment": null,
"createdOn": "2025-04-09",
"doctor": {
"id": 9000000010,
"firstName": "doctorstore",
"familyName": "doctorstore",
"patronymicName": "doctorstore",
"fullName": "doctorstore doctorstore doctorstore",
"shortName": "doctorstore d. d."
},
"deleted": false,
"leftEye": {
"dioptre": -1.25,
"cylinder": null,
"axis": null,
"add": null,
"curvatureRadius": 7.0,
"diameter": 14.0,
"expirationOn": null
},
"rightEye": {
"dioptre": -1.25,
"cylinder": null,
"axis": null,
"add": null,
"curvatureRadius": 7.0,
"diameter": 14.0,
"expirationOn": null
}
}
]
Поля
| Путь | Тип | Описание |
|---|---|---|
| id | Number | CL Prescription: id |
| model | String | CL Prescription: model |
| color | String | CL Prescription: color |
| basis | String | CL Prescription: basis |
| comment | String | CL Prescription: comments |
| createdOn | String | CL Prescription: date |
| doctorId | Number | doctor |
| deleted | Boolean | CL Prescription: deleted |
| leftEye | Object | CL Prescription: левый глаз |
| leftEye.dioptre | Number | CL Prescription: левый глаз, диоптрия |
| leftEye.cylinder | Number | CL Prescription: левый глаз, цилиндр |
| leftEye.axis | Number | CL Prescription: левый глаз, ось |
| leftEye.add | String | CL Prescription: левый глаз, add |
| leftEye.curvatureRadius | Number | CL Prescription: левый глаз, радиус кривизны |
| leftEye.diameter | Number | CL Prescription: левый глаз, диаметр |
| rightEye | Object | CL Prescription: левый глаз |
| rightEye.dioptre | Number | CL Prescription: левый глаз, диоптрия |
| rightEye.cylinder | Number | CL Prescription: левый глаз, цилиндр |
| rightEye.axis | Number | CL Prescription: левый глаз, ось |
| rightEye.add | String | CL Prescription: левый глаз, add |
| rightEye.curvatureRadius | Number | CL Prescription: левый глаз, радиус кривизны |
| rightEye.diameter | Number | CL Prescription: левый глаз, диаметр |
3.11. Типы услуг (Serve type)
Тип услуги по ID
Метод: GET /api/v2/services/types/{id}
Возвращает описание типа услуги по его идентификатору.
Параметры пути
| Параметр | Тип | Описание | Ограничения |
|---|---|---|---|
| id | Number (Long) | ID типа услуги | Обязательный параметр пути |
Запрос
GET /api/v2/services/types/107450 HTTP/1.1
Ответ
HTTP/1.1 200 OK
{
"id" : 107450,
"name" : "Test serve types for licenced doctor",
"bonus" : 0.0,
"deleted" : false,
"price" : 500.0,
"purchasing" : null,
"showInAPI" : true,
"medical" : true,
"insurable" : false,
"needsComment" : false,
"doctorAvailable" : true,
"optometristAvailable" : false,
"storeAvailable" : false,
"productionAvailable" : false,
"categories" : [ "Врач с лицензией" ]
}
Поля ответа (ServeTypeResponse)
| Путь | Тип | Описание |
|---|---|---|
| id | Number | ID типа услуги |
| name | String | Название типа услуги |
| bonus | Number | Бонус |
| deleted | Boolean | Признак удаления |
| price | Number | Цена продажи |
| purchasing | Number | Закупочная цена |
| showInAPI | Boolean | Признак отображения в API |
| medical | Boolean | Признак медицинской услуги |
| insurable | Boolean | Признак возможности страхования |
| needsComment | Boolean | Признак обязательного комментария |
| doctorAvailable | Boolean | Доступно для врача |
| optometristAvailable | Boolean | Доступно для оптометриста |
| storeAvailable | Boolean | Доступно для магазина |
| productionAvailable | Boolean | Доступно для производства/цеха |
| categories | Array<String> | Категории врача (doctorCategory из привязок к группам пользователей) |
Список типов услуг
Метод: GET /api/v2/services/types
Возвращает страницу типов услуг с фильтрацией по доступности для группы пользователей (userGroupFilter) и строке поиска (searchString).
Запрос
GET /api/v2/services/types?userGroupFilter=%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BD%D0%BE+%D0%B4%D0%BB%D1%8F+API HTTP/1.1
Ответ
HTTP/1.1 200 OK
{
"content" : [ {
"id" : 1000000100,
"name" : "1",
"bonus" : 0.0,
"deleted" : false,
"price" : 1.0,
"purchasing" : null,
"showInAPI" : true,
"medical" : true,
"insurable" : false,
"needsComment" : false,
"doctorAvailable" : true,
"optometristAvailable" : true,
"storeAvailable" : true,
"productionAvailable" : true,
"categories" : [ ]
} ],
"pageable" : {
"pageNumber" : 0,
"pageSize" : 10,
"sort" : {
"empty" : false,
"sorted" : true,
"unsorted" : false
},
"offset" : 0,
"paged" : true,
"unpaged" : false
},
"totalPages" : 1,
"totalElements" : 1,
"last" : true,
"size" : 10,
"number" : 0,
"sort" : {
"empty" : false,
"sorted" : true,
"unsorted" : false
},
"numberOfElements" : 1,
"first" : true,
"empty" : false
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| id | Number | ID типа услуги |
| deleted | Boolean | Тип услуги удалён? |
| name | String | Название типа услуги |
| price | Number | Базовая цена услуги данного типа |
3.12. Пользователи (User)
Справочники пользователей: ассистенты, врачи, активные пользователи, сотрудники производства, карточка пользователя и привязки к типам услуг.
Доступные ассистенты
Метод: GET /api/v2/users/available/assistant
Возвращает список пользователей, которых можно назначить ассистентом клиента.
Запрос
GET /api/v2/users/available/assistant HTTP/1.1
Ответ
HTTP/1.1 200 OK
[
{
"id": 9000000003,
"firstName": "doctor",
"familyName": "doctor",
"patronymicName": "doctor",
"fullName": "doctor doctor doctor",
"shortName": "doctor d. d."
}
]
Поля
| Путь | Тип | Описание |
|---|---|---|
| id | Number | id |
| firstName | String | firstName |
| familyName | String | familyName |
| patronymicName | String | patronymicName |
Доступные врачи
Метод: GET /api/v2/users/available/doctors
Возвращает список пользователей-врачей, доступных для выбора.
Запрос
GET /api/v2/users/available/doctors HTTP/1.1
Ответ
HTTP/1.1 200 OK
[
{
"id": 9000000003,
"firstName": "doctor",
"familyName": "doctor",
"patronymicName": "doctor",
"fullName": "doctor doctor doctor",
"shortName": "doctor d. d."
}
]
Поля
| Путь | Тип | Описание |
|---|---|---|
| id | Number | id |
| firstName | String | firstName |
| familyName | String | familyName |
| patronymicName | String | patronymicName |
Активные пользователи
Метод: GET /api/v2/users/active
Возвращает список активных (не уволенных и не заблокированных) пользователей.
Запрос
GET /api/v2/users/active HTTP/1.1
Ответ
HTTP/1.1 200 OK
[
{
"id": 1000000013,
"firstName": "2",
"familyName": "1",
"patronymicName": null,
"fullName": "1 2",
"shortName": "1 2."
}
]
Поля
| Путь | Тип | Описание |
|---|---|---|
| id | Number | id |
| firstName | String | firstName |
| familyName | String | familyName |
| patronymicName | String | patronymicName |
Пользователи производства
Метод: GET /api/v2/users/production
Возвращает список пользователей, работающих в департаментах производства (цехах).
Запрос
GET /api/v2/users/production HTTP/1.1
Ответ
HTTP/1.1 200 OK
[
{
"id": 9000000005,
"firstName": "production",
"familyName": "production",
"patronymicName": "production",
"fullName": "production production production",
"shortName": "production p. p."
}
]
Поля
| Путь | Тип | Описание |
|---|---|---|
| content[]. | Array | Доступные пользователи производства |
| [].id | Number | id |
| [].firstName | String | firstName |
| [].familyName | String | familyName |
| [].patronymicName | String | patronymicName |
Пользователь по ID
Метод: GET /api/v2/users/{userId}
Возвращает карточку пользователя по его идентификатору.
Запрос
GET /api/v2/users/1000000001 HTTP/1.1
Ответ
HTTP/1.1 200 OK
{
"id": 1000000001,
"firstName": "Тимофей",
"familyName": "Кадын",
"patronymicName": null,
"birthday": null,
"passportNumber": null,
"address": null,
"tel1": null,
"tel2": null,
"email": null,
"login": "admin",
"pincode": null,
"department": {
"id": 1000000003,
"type": "STORE",
"name": "Первый магазин",
"location": {
"data": {
"qc": null,
"area": null,
"city": "Псков",
"flat": null,
"block": null,
"floor": null,
"house": "1",
"metro": null,
"okato": "58401000000",
"oktmo": "58701000001",
"stead": null,
"qc_geo": "0",
"region": "Псковская",
"source": null,
"street": "Льва Толстого",
"country": "Россия",
"fias_id": "863354b1-4be8-4020-9158-7559144fd932",
"geo_lat": "57.814117",
"geo_lon": "28.347668",
"entrance": null,
"kladr_id": "6000000100004760126",
"qc_house": null,
"timezone": null,
"area_type": null,
"city_area": null,
"city_type": "г",
"divisions": null,
"fias_code": null,
"flat_area": null,
"flat_type": null,
"block_type": null,
"fias_level": "8",
"flat_price": null,
"geoname_id": "504341",
"house_type": "д",
"postal_box": null,
"settlement": null,
"stead_type": null,
"tax_office": "6027",
"beltway_hit": null,
"flat_cadnum": null,
"postal_code": "180000",
"qc_complete": null,
"region_type": "обл",
"street_type": "ул",
"area_fias_id": null,
"city_fias_id": "2858811e-448a-482e-9863-e03bf06bb5d4",
"flat_fias_id": null,
"house_cadnum": null,
"stead_cadnum": null,
"area_kladr_id": null,
"city_district": null,
"city_kladr_id": "6000000100000",
"house_fias_id": "863354b1-4be8-4020-9158-7559144fd932",
"stead_fias_id": null,
"area_type_full": null,
"area_with_type": null,
"capital_marker": "2",
"city_type_full": "город",
"city_with_type": "г Псков",
"flat_type_full": null,
"history_values": null,
"house_kladr_id": "6000000100004760126",
"region_fias_id": "f6e148a1-c9d0-4141-a608-93e3bd95e6c4",
"street_fias_id": "bd85e8d8-3064-41ca-baed-9fc3f57a07ed",
"unparsed_parts": null,
"block_type_full": null,
"house_type_full": "дом",
"region_iso_code": "RU-PSK",
"region_kladr_id": "6000000000000",
"settlement_type": null,
"stead_type_full": null,
"street_kladr_id": "60000001000047600",
"beltway_distance": null,
"country_iso_code": "RU",
"federal_district": "Северо-Западный",
"region_type_full": "область",
"region_with_type": "Псковская обл",
"street_type_full": "улица",
"street_with_type": "ул Льва Толстого",
"tax_office_legal": "6027",
"city_district_type": null,
"settlement_fias_id": null,
"square_meter_price": null,
"settlement_kladr_id": null,
"fias_actuality_state": "0",
"settlement_type_full": null,
"settlement_with_type": null,
"city_district_fias_id": null,
"city_district_kladr_id": null,
"city_district_type_full": null,
"city_district_with_type": null
},
"string": "г Псков, ул Льва Толстого, д 1"
},
"city": "Псков",
"description": "ул. Льва Толстого, д.1",
"phone": "+7(812) 425-64-22",
"timeZone": 180,
"closed": false,
"frMode": true,
"hasServices": true,
"baseLegalEntityId": 1,
"storeBrandId": 1,
"otherDepartmentSearchId": null,
"depotId": 1000000005,
"productionId": 1000000004,
"departmentOid": "9999",
"departmentGuid": null,
"departmentLpuId": null
},
"userGroup": {
"id": 1000000006,
"name": "Продавцы",
"user": null,
"users": []
},
"doctorCategory": "Врач без лицензии",
"userPosition": null,
"lang": "ru",
"fired": false,
"canLoginWithoutCertificate": false,
"restricted": true,
"snilsNumber": null,
"additionalDepartments": [],
"roles": [
{
"name": "clientsExcel",
"description": "Выгрузка данных по клиентам в Excel"
}
],
"accessLevels": [
{
"id": 1000000008,
"name": "Топ-менеджмент",
"user": {
"id": 1000000021,
"login": "client7"
},
"users": [
{
"id": 1000000021,
"login": "client7"
}
]
}
],
"medicalPosition": "DOCTOR"
}
Параметры
| Параметр | Описание |
|---|---|
| userId | userId |
Пользователи, привязанные к типу услуги
Метод: GET /api/v2/serves/types/{serveTypeId}/users
Возвращает список пользователей, для которых доступен указанный тип услуги.
Запрос
GET /api/v2/serves/types/1000000100/users HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| serveTypeId | Id типа услуги |
Ответ
HTTP/1.1 200 OK
[
{
"id": 9000000003,
"firstName": "doctor",
"familyName": "doctor",
"patronymicName": "doctor",
"departmentName": "Первый магазин",
"userGroupName": "Офтальмологи"
}
]
Поля
| Путь | Тип | Описание |
|---|---|---|
| login | String | login |
| firstName | String | firstName |
| familyName | String | familyName |
| patronymicName | String | patronymicName |
| departmentName | String | departmentName |
| userGroupName | String | userGroupName |
| fired | Boolean | fired |
| roleId | Number | roleId |
Список пользователей
Метод: GET /api/v2/users
Возвращает страницу пользователей с фильтрацией по строке поиска (searchString), признаку увольнения (fired) и имени роли (roleName).
Внимание. Метод GET /api/v2/users пока недоступен пользователю внешнего API и возвращает 403 Forbidden. Остальные методы раздела доступны.
Запрос
GET /api/v2/users?size=3&fired=false HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| searchString | поиск по familyName или login, все совпадения Пример: ?searchString=an |
| fired | фильтр уволенных пользователей Пример: ?fired=true |
| roleName | фильтр пользователей по roleName Пример: ?roleName=clientsExcel |
| pageable | Описание постраничной навигации |
Ответ
HTTP/1.1 200 OK
{
"content": [
{
"id": 1000000001,
"login": "admin",
"firstName": "Тимофей",
"familyName": "Кадын",
"patronymicName": "Юрьевич",
"departmentName": "Центральный офис",
"userGroupName": "Системный администратор",
"fired": false
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 3,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"totalPages": 12,
"totalElements": 34,
"last": false,
"size": 3,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 3,
"first": true,
"empty": false
}
Поля
| Путь | Тип | Описание |
|---|---|---|
| login | String | login |
| firstName | String | firstName |
| familyName | String | familyName |
| patronymicName | String | patronymicName |
| departmentName | String | departmentName |
| userGroupName | String | userGroupName |
| fired | Boolean | fired |
| roleId | Number | roleId |
3.13. Категории врачей (Doctor Category)
Категории врачей по группе пользователей
Метод: GET /api/v2/doctor/categories
Возвращает список категорий врачей для указанной группы пользователей (userGroupId).
Запрос
GET /api/v2/doctor/categories?userGroupId=1000000003 HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| userGroupId | список для UserGroup Пример: ?userGroupId=1000000003 |
Ответ
HTTP/1.1 200 OK
[
{
"name": "Офтальмолог",
"deleted": false
}
]
3.14. Остатки товаров (Remains)
Выгрузка остатков по департаментам. Методы рассчитаны на высокую нагрузку: используйте фильтры и пагинацию, чтобы ограничивать объём выборки. Размер страницы по умолчанию — 1000 элементов.
Остатки: Аксессуары
Метод: GET /api/v2/good/remains/accessories
Возвращает страницу остатков по указанному типу товара с фильтрацией по департаменту, диапазону цен и характеристикам товара. Параметр page задаёт номер страницы (начиная с 0); размер страницы — 1000.
Запрос
GET /api/v2/good/remains/accessories?departmentId=1000000003&minPrice=250.00&maxPrice=700.00&category=%D0%9A%D0%B0%D0%BF%D0%BB%D0%B8&model=Comfort+Drops+20+ml HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| page | Страница выдачи. Начинается с 0 |
| departmentId | Номер департамента |
| minPrice | Минимальная цена товара (включительно) |
| maxPrice | Максимальная цена товара (включительно) |
| category | Категория аксессуара |
| model | Модель аксессуара |
Ответ
HTTP/1.1 200 OK
[ {
"price" : 400.0,
"amount" : 4,
"departmentId" : 1000000003,
"category" : "Капли",
"model" : "Comfort Drops 20 ml"
} ]
Поля
| Путь | Тип | Описание |
|---|---|---|
| category | String | Категория аксессуара |
| model | String | Модель аксессуара |
| price | Number | Цена товара |
| departmentId | Number | Номер департамента |
| amount | Number | Количество товара |
Остатки: Солнцезащитные очки
Метод: GET /api/v2/good/remains/sunglasses
Возвращает страницу остатков по указанному типу товара с фильтрацией по департаменту, диапазону цен и характеристикам товара. Параметр page задаёт номер страницы (начиная с 0); размер страницы — 1000.
Запрос
GET /api/v2/good/remains/sunglasses?departmentId=1000000005&minPrice=1000.00&maxPrice=1500.00&manufacturer=%D0%9A%D0%B8%D1%82%D0%B0%D0%B9&brand=Polarstar&model=PSGF0706&color=c2&targetGroup=%D0%A3%D0%BD%D0%B8%D1%81%D0%B5%D0%BA%D1%81&material=-&frameType=%D0%9E%D0%B1%D0%BE%D0%B4%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F&lensesType=- HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| page | Страница выдачи. Начинается с 0 |
| departmentId | Номер департамента |
| minPrice | Минимальная цена товара (включительно) |
| maxPrice | Максимальная цена товара (включительно) |
| manufacturer | Производитель |
| brand | Бренд |
| model | Модель |
| color | Цвет |
| targetGroup | Целевая группа |
| material | Материал |
| frameType | Тип оправы |
| lensesType | Тип линз |
| design | Дизайн |
Ответ
HTTP/1.1 200 OK
[ {
"price" : 1300.0,
"amount" : 1,
"departmentId" : 1000000005,
"manufacturer" : "Китай",
"brand" : "Polarstar",
"model" : "PSGF0706",
"color" : "c2",
"targetGroup" : "Унисекс",
"material" : "-",
"frameType" : "Ободковая",
"lensesType" : "-",
"design" : null
} ]
Поля
| Путь | Тип | Описание |
|---|---|---|
| manufacturer | String | Производитель |
| brand | String | Бренд |
| model | String | Модель |
| color | String | Цвет |
| targetGroup | String | Целевая группа |
| material | String | Материал |
| frameType | String | Тип оправы |
| lensesType | String | Тип линз |
| design | String | Дизайн |
| price | Number | Цена товара |
| departmentId | Number | Номер департамента |
| amount | Number | Количество товара |
Остатки: Очки
Метод: GET /api/v2/good/remains/glasses
Возвращает страницу остатков по указанному типу товара с фильтрацией по департаменту, диапазону цен и характеристикам товара. Параметр page задаёт номер страницы (начиная с 0); размер страницы — 1000.
Запрос
GET /api/v2/good/remains/glasses?departmentId=1000000005&minPrice=5000.00&maxPrice=6000.00&manufacturer=%D0%98%D1%82%D0%B0%D0%BB%D0%B8%D1%8F&brand=Enni+Marco&model=11-429&color=20&targetGroup=%D0%A3%D0%BD%D0%B8%D1%81%D0%B5%D0%BA%D1%81&material=-&type=%D0%9E%D0%B1%D0%BE%D0%B4%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| page | Страница выдачи. Начинается с 0 |
| departmentId | Номер департамента |
| minPrice | Минимальная цена товара (включительно) |
| maxPrice | Максимальная цена товара (включительно) |
| manufacturer | Производитель |
| brand | Бренд |
| model | Модель |
| color | Цвет |
| targetGroup | Целевая группа |
| material | Материал |
| type | Тип оправы |
| size | Размер |
| design | Дизайн |
Ответ
HTTP/1.1 200 OK
[ {
"price" : 5500.0,
"amount" : 1,
"departmentId" : 1000000005,
"manufacturer" : "Италия",
"brand" : "Enni Marco",
"model" : "11-429",
"color" : "20",
"targetGroup" : "Унисекс",
"material" : "-",
"type" : "Ободковая",
"size" : null,
"design" : null
} ]
Поля
| Путь | Тип | Описание |
|---|---|---|
| manufacturer | String | Производитель |
| brand | String | Бренд |
| model | String | Модель |
| color | String | Цвет |
| targetGroup | String | Целевая группа |
| material | String | Материал |
| type | String | Тип оправы |
| size | String | Размер |
| design | String | Дизайн |
| price | Number | Цена товара |
| departmentId | Number | Номер департамента |
| amount | Number | Количество товара |
Остатки: Линзы
Метод: GET /api/v2/good/remains/lenses
Возвращает страницу остатков по указанному типу товара с фильтрацией по департаменту, диапазону цен и характеристикам товара. Параметр page задаёт номер страницы (начиная с 0); размер страницы — 1000.
Запрос
GET /api/v2/good/remains/lenses?departmentId=1000000003&minPrice=200.00&maxPrice=900.00&manufacturer=BBGR&brand=Asphor&refractionIndex=1.60&cover=Diam%27s+Clear+UV&diameter=70&material=%D0%9F%D0%BB%D0%B0%D1%81%D1%82%D0%B8%D0%BA&geometry=%D0%90%D1%81%D1%84%D0%B5%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F&type=%D0%9E%D0%B4%D0%BD%D0%BE%D1%84%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F&lensClass=-&dioptre=-6.50 HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| page | Страница выдачи. Начинается с 0 |
| departmentId | Номер департамента |
| minPrice | Минимальная цена товара (включительно) |
| maxPrice | Максимальная цена товара (включительно) |
| manufacturer | Производитель |
| brand | Бренд |
| refractionIndex | Индекс рефракции |
| cover | Покрытие |
| color | Цвет |
| material | Материал |
| type | Тип линзы |
| diameter | Диаметр |
| geometry | Геометрия |
| lensClass | Класс линзы |
| technology | Технология |
| dioptre | Сфера |
| cylinderDioptre | Цилиндр |
| add | Аддидация |
Ответ
HTTP/1.1 200 OK
[ {
"price" : 500.0,
"amount" : 3,
"departmentId" : 1000000003,
"manufacturer" : "BBGR",
"brand" : "Asphor",
"refractionIndex" : 1.6,
"cover" : "Diam's Clear UV",
"color" : null,
"diameter" : 70,
"material" : "Пластик",
"geometry" : "Асферическая",
"type" : "Однофокальная",
"lensClass" : "-",
"technology" : null,
"dioptre" : -6.5,
"cylinderDioptre" : null,
"add" : null
} ]
Поля
| Путь | Тип | Описание |
|---|---|---|
| manufacturer | String | Производитель |
| brand | String | Бренд |
| refractionIndex | Number | Индекс рефракции |
| cover | String | Покрытие |
| color | String | Цвет |
| material | String | Материал |
| type | String | Тип линзы |
| diameter | Number | Диаметр |
| geometry | String | Геометрия |
| lensClass | String | Класс линзы |
| technology | String | Технология |
| dioptre | Number | Сфера |
| cylinderDioptre | Number | Цилиндр |
| add | Number | Аддидация |
| price | Number | Цена товара |
| departmentId | Number | Номер департамента |
| amount | Number | Количество товара |
Остатки: Контактные линзы
Метод: GET /api/v2/good/remains/contact-lenses
Возвращает страницу остатков по указанному типу товара с фильтрацией по департаменту, диапазону цен и характеристикам товара. Параметр page задаёт номер страницы (начиная с 0); размер страницы — 1000.
Запрос
GET /api/v2/good/remains/contact-lenses?departmentId=1000000005&minPrice=1000.00&maxPrice=1800.00&manufacturer=CooperVision&name=Free+Eyes&curvatureRadius=8.60&diameter=14.00&wearingPeriod=1+%D0%B4%D0%B5%D0%BD%D1%8C&dioptre=-2.00&packageQuantity=30 HTTP/1.1
Параметры
| Параметр | Описание |
|---|---|
| page | Страница выдачи. Начинается с 0 |
| departmentId | Номер департамента |
| minPrice | Минимальная цена товара (включительно) |
| maxPrice | Максимальная цена товара (включительно) |
| manufacturer | Производитель |
| name | Наименование |
| color | Цвет |
| curvatureRadius | Радиус кривизны |
| diameter | Диаметр |
| wearingPeriod | Период ношения |
| dioptre | Сфера |
| cylinder | Цилиндр |
| axis | Ось |
| add | Аддидация |
| packageQuantity | Кол-во в упаковке |
Ответ
HTTP/1.1 200 OK
[ {
"price" : 1650.0,
"amount" : 2,
"departmentId" : 1000000005,
"manufacturer" : "CooperVision",
"name" : "Free Eyes",
"color" : null,
"curvatureRadius" : 8.6,
"diameter" : 14.0,
"wearingPeriod" : "1 день",
"dioptre" : -2.0,
"cylinder" : null,
"axis" : null,
"add" : null,
"packageQuantity" : 30
} ]
Поля
| Путь | Тип | Описание |
|---|---|---|
| manufacturer | String | Производитель |
| name | String | Наименование |
| color | String | Цвет |
| curvatureRadius | Number | Радиус кривизны |
| diameter | Number | Диаметр |
| wearingPeriod | String | Период ношения |
| dioptre | Number | Сфера |
| cylinder | Number | Цилиндр |
| axis | Number | Ось |
| add | String | Аддидация |
| packageQuantity | Number | Кол-во в упаковке |
| price | Number | Цена товара |
| departmentId | Number | Номер департамента |
| amount | Number | Количество товара |
Приложение А. Сводная таблица методов
| № | Раздел | Название метода | Метод и путь |
|---|---|---|---|
| 1 | Клиенты (Clients) | Создание клиента | POST /api/v2/clients |
| 2 | Клиенты (Clients) | Обновление клиента | PUT /api/v2/clients/{clientId} |
| 3 | Клиенты (Clients) | Телефоны клиента | GET /api/v2/clients/{clientId}/phones |
| 4 | Клиенты (Clients) | E-mail клиента | GET /api/v2/clients/{clientId}/email |
| 5 | Клиенты (Clients) | Карточка клиента (сводная информация) | GET /api/v2/clients/{clientId}/info |
| 6 | Клиенты (Clients) | Поиск клиентов (журнал клиентов) | GET /api/v2/clients |
| 7 | Клиенты (Clients) | Статистика покупок клиента | GET /api/v2/clients/{clientId}/shopping-statistics |
| 8 | Клиенты (Clients) | Подтверждение анкеты клиента | POST /api/v2/clients/{clientId}/agree |
| 9 | Клиенты (Clients) | Источники информации о клиенте | GET /api/v2/clients/information-source |
| 10 | Клиенты (Clients) | Заказы клиента | GET /api/v2/clients/{clientId}/orders |
| 11 | Клиенты (Clients) | Обновление основного телефона клиента (tel1) | PUT /api/v2/clients/{clientId}/tel1 |
| 12 | Клиенты (Clients) | Изменения клиентов за период | GET /api/v2/clients/changes |
| 13 | Комментарии клиентов (Clients comments) | Комментарии клиента | GET /api/v2/clients/{clientId}/comments |
| 14 | Карта клиента (Clients Card) | Проверка существования карты по ID | POST /api/v2/clients/cards/{cardId}/check |
| 15 | Фильтры клиентов (Client filters) | Список фильтров клиентов | GET /api/v2/clients/filters |
| 16 | Фильтры клиентов (Client filters) | Фильтр по ID | GET /api/v2/clients/filters/{filterId} |
| 17 | Фильтры клиентов (Client filters) | Справочные значения параметров фильтров | GET /api/v2/clients/filters/values |
| 18 | Фильтры клиентов (Client filters) | Справочные значения параметров по типу товара | GET /api/v2/clients/filters/goods/values |
| 19 | Фильтры клиентов (Client filters) | Применение фильтра, переданного в запросе | POST /api/v2/clients/filters/apply |
| 20 | Фильтры клиентов (Client filters) | Применение сохранённого фильтра по ID | GET /api/v2/clients/filters/{filterId}/apply |
| 21 | Фильтры клиентов (Client filters) | Применение фильтра для рассылки по ID | GET /api/v2/clients/filters/{filterId}/mailing/apply |
| 22 | Фильтры клиентов (Client filters) | Применение фильтра для рассылки, переданного в запросе | POST /api/v2/clients/filters/mailing/apply |
| 23 | Согласия клиента (Client agreement) | Подготовка текста согласия | POST /api/v2/clients/{clientId}/agreements/prepare-text |
| 24 | Согласия клиента (Client agreement) | Проверка наличия активного согласия | GET /api/v2/clients/{clientId}/agreements/active |
| 25 | Согласия клиента (Client agreement) | Проверка необходимости сбора согласия по заказу | GET /api/v2/clients/agreements/necessity |
| 26 | Согласия клиента (Client agreement) | Получение текста согласия | GET /api/v2/clients/{clientId}/agreements |
| 27 | Согласия клиента (Client agreement) | Проверка, было ли ранее отправлено сообщение с согласием | GET /api/v2/clients/{clientId}/agreements/is-message-sent |
| 28 | Согласия клиента (Client agreement) | Отправка сообщения с кодом подтверждения | POST /api/v2/clients/{clientId}/agreements/message |
| 29 | Согласия клиента (Client agreement) | Принятие согласия (сохранение по коду) | POST /api/v2/clients/{clientId}/agreements |
| 30 | Согласия клиента (Client agreement) | Отзыв согласия | DELETE /api/v2/clients/{clientId}/agreements |
| 31 | Департаменты (Department) | Список департаментов | GET /api/v2/departments |
| 32 | Департаменты (Department) | Краткий список департаментов (метки) | GET /api/v2/departments/labels |
| 33 | Департаменты (Department) | Департаменты, доступные группе пользователей | GET /api/v2/departments/by-user-group |
| 34 | Департаменты (Department) | Департамент по ID | GET /api/v2/departments/{departmentId} |
| 35 | Департаменты (Department) | Магазины (департаменты типа «Магазин») | GET /api/v2/departments/stores |
| 36 | Поиск номенклатуры товаров (Goods nomenclature search) | Поиск: Аксессуары | POST /api/v2/good/nomenclature/search/accessories |
| 37 | Поиск номенклатуры товаров (Goods nomenclature search) | Поиск: Солнцезащитные очки | POST /api/v2/good/nomenclature/search/sunglasses |
| 38 | Поиск номенклатуры товаров (Goods nomenclature search) | Поиск: Очки | POST /api/v2/good/nomenclature/search/glasses |
| 39 | Поиск номенклатуры товаров (Goods nomenclature search) | Поиск: Линзы | POST /api/v2/good/nomenclature/search/lenses |
| 40 | Поиск номенклатуры товаров (Goods nomenclature search) | Поиск: Контактные линзы | POST /api/v2/good/nomenclature/search/contact-lenses |
| 41 | Поиск номенклатуры товаров (Goods nomenclature search) | Поиск: Сложные позиции (оправа с линзами) | POST /api/v2/good/nomenclature/search/extras |
| 42 | Поиск номенклатуры товаров (Goods nomenclature search) | Поиск: Полуфабрикаты линз | POST /api/v2/good/nomenclature/search/semifinished-lenses |
| 43 | Параметры товаров (Goods params) | Параметры: Аксессуары | GET /api/v2/accessories/params |
| 44 | Параметры товаров (Goods params) | Параметры: Солнцезащитные очки | GET /api/v2/sunglasses/params |
| 45 | Параметры товаров (Goods params) | Параметры: Очки | GET /api/v2/glasses/params |
| 46 | Параметры товаров (Goods params) | Параметры: Линзы | GET /api/v2/lenses/params |
| 47 | Параметры товаров (Goods params) | Параметры: Контактные линзы | GET /api/v2/contact-lenses/params |
| 48 | Параметры товаров (Goods params) | Параметры: Сложные позиции (оправа с линзами) | GET /api/v2/extras/params |
| 49 | Параметры товаров (Goods params) | Параметры: Полуфабрикаты линз | GET /api/v2/semifinished-lens/params |
| 50 | Заказы (Order) | Журнал заказов | GET /api/v2/orders |
| 51 | Заказы (Order) | Базовые типы заказов | GET /api/v2/orders/types |
| 52 | Заказы (Order) | Статусы заказов | GET /api/v2/orders/statuses |
| 53 | Заказы (Order) | Статусы заказов с комментариями или активные | GET /api/v2/orders/commented-or-active/statuses |
| 54 | Заказы (Order) | Заказ по ID | GET /api/v2/orders/{orderId} |
| 55 | Заказы (Order) | Последние купленные контактные линзы клиента | GET /api/v2/orders/last-purchased/contact-lenses |
| 56 | Заказы (Order) | Причины заказов | GET /api/v2/orders/reasons |
| 57 | Рецепты (Prescription) | Рецепты клиента (очки) | GET /api/v2/clients/{clientId}/prescription |
| 58 | Рецепты (Prescription) | Рецепты клиента на контактные линзы | GET /api/v2/clients/{clientId}/prescription/contact-lens |
| 59 | Типы услуг (Serve type) | Тип услуги по ID | GET /api/v2/services/types/{id} |
| 60 | Типы услуг (Serve type) | Список типов услуг | GET /api/v2/services/types |
| 61 | Пользователи (User) | Доступные ассистенты | GET /api/v2/users/available/assistant |
| 62 | Пользователи (User) | Доступные врачи | GET /api/v2/users/available/doctors |
| 63 | Пользователи (User) | Активные пользователи | GET /api/v2/users/active |
| 64 | Пользователи (User) | Пользователи производства | GET /api/v2/users/production |
| 65 | Пользователи (User) | Пользователь по ID | GET /api/v2/users/{userId} |
| 66 | Пользователи (User) | Пользователи, привязанные к типу услуги | GET /api/v2/serves/types/{serveTypeId}/users |
| 67 | Пользователи (User) | Список пользователей | GET /api/v2/users |
| 68 | Категории врачей (Doctor Category) | Категории врачей по группе пользователей | GET /api/v2/doctor/categories |
| 69 | Остатки товаров (Remains) | Остатки: Аксессуары | GET /api/v2/good/remains/accessories |
| 70 | Остатки товаров (Remains) | Остатки: Солнцезащитные очки | GET /api/v2/good/remains/sunglasses |
| 71 | Остатки товаров (Remains) | Остатки: Очки | GET /api/v2/good/remains/glasses |
| 72 | Остатки товаров (Remains) | Остатки: Линзы | GET /api/v2/good/remains/lenses |
| 73 | Остатки товаров (Remains) | Остатки: Контактные линзы | GET /api/v2/good/remains/contact-lenses |
Приложение Б. Типовые сценарии
Примеры последовательностей вызовов для частых задач интеграции.
Б.1. Найти клиента и получить его данные
- Поиск клиента (например, по фамилии или телефону):
GET /api/v2/clients?clientSearchType=FULL_NAME&searchString=Иванов&deleted=false&page=0&size=20
Допустимые значения clientSearchType: FULL_NAME, PHONE_NUMBER, CARD_NUMBER, PRESCRIPTION_ID, CL_PRESCRIPTION_ID.
- Из ответа взять
content[].idи запросить карточку клиента:
GET /api/v2/clients/{clientId}/info
- Дополнительно можно получить телефоны, e-mail, комментарии и статистику покупок:
GET /api/v2/clients/{clientId}/phones
GET /api/v2/clients/{clientId}/email
GET /api/v2/clients/{clientId}/comments
GET /api/v2/clients/{clientId}/shopping-statistics
Б.2. Получить заказы клиента и карточку заказа
GET /api/v2/clients/{clientId}/orders?page=0&size=50&sort=createdAt,desc
GET /api/v2/orders/{orderId}
Для отбора только нужных статусов используйте справочник GET /api/v2/orders/statuses и параметры метода заказов клиента: statuses (несколько статусов, повторяемый параметр) или status (один статус).
Б.3. Выгрузить остатки по департаменту
GET /api/v2/good/remains/accessories?departmentId={departmentId}&page=0
GET /api/v2/good/remains/lenses?departmentId={departmentId}&minPrice=200&maxPrice=2000&page=0
Размер страницы по умолчанию — 1000 элементов; для полной выгрузки увеличивайте page, пока ответ не станет пустым. Список доступных департаментов — GET /api/v2/departments или GET /api/v2/departments/labels.
Б.4. Оформить согласие клиента
- Подготовить текст согласия:
POST /api/v2/clients/{clientId}/agreements/prepare-text
{ "agreementType": "PERSONAL_DATA_PROCESSING" }
- При необходимости проверить текущий статус согласия и отправлялось ли сообщение:
GET /api/v2/clients/{clientId}/agreements/active?clientAgreementType=PERSONAL_DATA_PROCESSING
GET /api/v2/clients/{clientId}/agreements/is-message-sent
- Отправить клиенту сообщение с кодом подтверждения:
POST /api/v2/clients/{clientId}/agreements/message
{ "phoneNumber": "79990000000", "agreementType": "PERSONAL_DATA_PROCESSING", "collectionMethod": "SMS" }
- Сохранить согласие по коду, который ввёл клиент:
POST /api/v2/clients/{clientId}/agreements
{ "confirmationCode": "1234", "agreementType": "PERSONAL_DATA_PROCESSING", "collectionMethod": "SMS" }
Ответ true — код верный и согласие сохранено; false — код неверный.
- При необходимости отозвать согласие:
DELETE /api/v2/clients/{clientId}/agreements?clientAgreementType=PERSONAL_DATA_PROCESSING
Б.5. Получить список клиентов для рассылки
- Найти нужный фильтр:
GET /api/v2/clients/filters?name=Петров&page=0&size=30
- Получить клиентов по сохранённому фильтру (для рассылки — с типом рассылки):
GET /api/v2/clients/filters/{filterId}/mailing/apply?mailingType=SMS&page=0&size=30
Если фильтр формируется «на лету», используйте POST /api/v2/clients/filters/mailing/apply и передайте параметры фильтра в теле запроса.
Допустимые значения mailingType (канал уведомления): VK, VIBER, SMS, EMAIL, PUSH, WHATSAPP, MAX.