Skip to content

Breaking Changes ​

Авторизация ​

GET /auth/token/:login оставлен только для совместимости ​

В v1 токен выдавался через:

http
GET /auth/token/:login
Authorization: Bearer password

Legacy endpoint временно поддерживается слоем совместимости, но новый контракт v2 использует:

http
POST /auth/token
Content-Type: application/json
json
{
  "login": "user@example.com",
  "password": "secret"
}

Причины изменения:

  • выдача токена является действием авторизации и не должна быть GET-запросом;
  • логин не должен попадать в URL, access logs, browser history и proxy logs;
  • Authorization: Bearer ... должен использоваться для уже выданного токена, а не для пароля;
  • body проще валидировать и расширять без изменения URL-контракта.

Структурированная проверка v2 доступна на GET /auth/v2/check. Исходный GET /auth/check занят legacy-контрактом и возвращает Mongo-документ без password.

Срок действия токена вынесен в data ​

В v1 дата окончания токена была частью человекочитаемого message. В v2 срок действия токена возвращается структурно:

json
{
  "status": true,
  "data": {
    "token": "JWTToken",
    "tokenType": "Bearer",
    "expiresAt": "2026-07-09T11:11:16.000Z",
    "expiresIn": 86400
  },
  "error": {},
  "message": ""
}

Клиенты должны использовать data.expiresAt или data.expiresIn, а не парсить message.

HTTP-коды ошибок ​

В v1 ошибки авторизации часто отдавались с HTTP 200 и status: false в теле ответа. В v2 API возвращает соответствующий HTTP-код и сохраняет JSON-обертку.

Каталог ​

Публичный идентификатор раздела ​

В v2 публичный идентификатор раздела каталога - строковое значение umi_hierarchy_id.

json
{
  "id": "37057"
}

Клиенты не должны использовать PostgreSQL catalog_sections.id или UMI object id umi_id как публичный идентификатор раздела.

Каталог ограничен витриной nnz-ipc.ru ​

Публичные catalog routes v2 возвращают только активные разделы с url.host = "nnz-ipc.ru".

Разделы других доменов из общей UMI-базы (iei.ru, axiomtek.pro, cincoze.pro, weintek.pro) и служебные разделы без URL не попадают в публичный каталог v2.

URL отдается структурно ​

Вместо отдельного строкового поля пути v2 возвращает URL-группу:

json
{
  "url": {
    "full": "https://nnz-ipc.ru/catalogue/ipc/",
    "host": "nnz-ipc.ru",
    "path": "/catalogue/ipc/",
    "slug": "ipc"
  }
}

slug является последним сегментом path, но не является уникальным идентификатором раздела.

Счетчики считаются только по публично активным товарам ​

directProductCount, productCount и availableProductCount считаются только по активным публичным товарам v2.

availableProductCount дополнительно учитывает только товары с положительным остатком хотя бы на одном складе.

Товары ​

Публичный идентификатор товара ​

В v2 публичный id товара равен строковому stockNumber. UMI object id из v1 больше не используется как идентификатор товарного endpoint.

http
GET /api/v2/products/6119904

Типизированный объект вместо v1 field-оберток ​

Базовые поля, цена, доступность, vendor и media имеют стабильную структуру. Формат { name, value, field_id, uid } сохранен только внутри PostgreSQL payload и не отдается напрямую.

Характеристики отсутствуют в базовом ответе и подключаются через include=features в виде массива публичных групп с вложенными items. Фасетные значения не смешиваются с характеристиками и доступны отдельно через include=filterValues; SEO подключается через include=seo.

Розница, персональная цена и распродажа ​

pricing.retail возвращается вместе с разрешенной персональной ценой. Sale отдается отдельно и не перезаписывает уровень пользователя. Валюта исходных цен - USD; автоматической конвертации в RUB нет.

Нулевые и скрытые цены имеют явный onRequest: true, а не требуют от клиента интерпретировать магическое значение 0.

Выберите версию API в верхнем меню.