API Системы Оптима

Оглавление


API Системы Оптима

API (программный интерфейс) связывает Систему Оптима с внешними системами. Через него сайт, мобильное приложение или программа учёта клиентов получают и записывают данные: клиентов, заказы, остатки товаров. Чтобы подключить внешнюю систему, задайте пароль пользователю «itigris_external_api» — он уже есть в списке пользователей. Затем передайте разработчику адрес системы, название базы данных, идентификатор департамента, логин и пароль. Справочник по API для разработчика — ниже в этой статье.

Доступно пользователям с уровнем доступа «Системный администратор».

Статья о том, как внешняя система сама запрашивает данные из Системы Оптима. Как Система Оптима сама отправляет уведомления во внешнюю систему — см. Как подключить внешнюю систему через вебхук. Как сменить пароль любому пользователю — см. Как сменить пароль пользователя.

Как подключить внешнюю систему к API

  1. Откройте в левом меню «Пользователи» и выберите в списке пользователя с логином «itigris_external_api». Откроется его карточка.
  2. Нажмите значок карандаша вверху карточки, затем в блоке «Безопасность» нажмите «Изменить пароль». Задайте новый пароль и сохраните его — подробно см. Как сменить пароль пользователя. Сертификат скачивать не нужно: для подключения по API он не используется.
  3. Посмотрите в карточке поле «Департамент» — например, «Центральный офис». От имени этого департамента внешняя система будет работать с данными.
  4. Откройте в левом меню «Департаменты» и выберите этот департамент. Перепишите число из поля «Идентификатор» — это идентификатор департамента для разработчика.
  5. Откройте страницу входа в Систему Оптима и посмотрите на адресную строку браузера. Часть адреса до косой черты — адрес системы, часть после неё — название вашей базы данных.

Например, если в адресной строке «optima.itigris.ru/demo», то адрес системы — «optima.itigris.ru», а название базы данных — «demo». В справочнике ниже оно называется «company».

  1. Передайте разработчику внешней системы адрес системы, название базы данных, идентификатор департамента, логин «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 символов включительно
email String email Длина от 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
email String email
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 символов включительно
email String email Длина от 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
email String email
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"
}

Поля

Путь Тип Описание
email 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 Дополнительный телефон
email 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 Номер телефона клиента
email 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. Найти клиента и получить его данные

  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.

  1. Из ответа взять content[].id и запросить карточку клиента:
   GET /api/v2/clients/{clientId}/info
  1. Дополнительно можно получить телефоны, 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. Оформить согласие клиента

  1. Подготовить текст согласия:
   POST /api/v2/clients/{clientId}/agreements/prepare-text
   { "agreementType": "PERSONAL_DATA_PROCESSING" }
  1. При необходимости проверить текущий статус согласия и отправлялось ли сообщение:
   GET /api/v2/clients/{clientId}/agreements/active?clientAgreementType=PERSONAL_DATA_PROCESSING
   GET /api/v2/clients/{clientId}/agreements/is-message-sent
  1. Отправить клиенту сообщение с кодом подтверждения:
   POST /api/v2/clients/{clientId}/agreements/message
   { "phoneNumber": "79990000000", "agreementType": "PERSONAL_DATA_PROCESSING", "collectionMethod": "SMS" }
  1. Сохранить согласие по коду, который ввёл клиент:
   POST /api/v2/clients/{clientId}/agreements
   { "confirmationCode": "1234", "agreementType": "PERSONAL_DATA_PROCESSING", "collectionMethod": "SMS" }

Ответ true — код верный и согласие сохранено; false — код неверный.

  1. При необходимости отозвать согласие:
   DELETE /api/v2/clients/{clientId}/agreements?clientAgreementType=PERSONAL_DATA_PROCESSING

Б.5. Получить список клиентов для рассылки

  1. Найти нужный фильтр:
   GET /api/v2/clients/filters?name=Петров&page=0&size=30
  1. Получить клиентов по сохранённому фильтру (для рассылки — с типом рассылки):
   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.

Связанные статьи


Комментарии

Теги: api