API Документация

Реальный Vendor API Hattrix: товары, заказы, ключи, вебхуки, импорт и логи интеграций.

Base URL

https://hattrix.ru/api/vendors

Health

https://hattrix.ru/health

Auth

JWT Bearer token

Формат

JSON over HTTPS

Быстрый старт (5 минут)

Минимальный сценарий интеграции: проверка health, авторизованный запрос товаров, создание товара и проверка логов вызовов API.

Пример запроса

bash
curl --request GET \
  --url https://hattrix.ru/health \
  --header 'Accept: application/json'

curl --request GET \
  --url 'https://hattrix.ru/api/vendors/products?page=1&limit=20' \
  --header 'Authorization: Bearer <JWT_ACCESS_TOKEN>'

curl --request POST \
  --url https://hattrix.ru/api/vendors/products \
  --header 'Authorization: Bearer <JWT_ACCESS_TOKEN>' \
  --header 'Idempotency-Key: 1d7e73f0-98f1-4f65-a2d4-3d11f955b2ba' \
  --header 'Content-Type: application/json' \
  --data '{"name":"Клюшка BAUER Nexus","price":12990,"stock":12}'

Примечания

  • - 1) Получите JWT access token через вход продавца или developer-участника организации.
  • - 2) Проверьте доступность API через GET /health.
  • - 3) Запросите список товаров GET /api/vendors/products?page=1&limit=20.
  • - 4) Создайте тестовый товар POST /api/vendors/products.
  • - 5) Проверьте последние вызовы в GET /api/vendors/integrations/logs.
  • - Для проверки лимитов смотрите раздел «Лимиты и квоты».

Формат ответа, пагинация и логи

Публичные list-endpoint обычно возвращают items/page/limit/total, а vendor-интеграции используют доменные ключи ответа: keys, jobs, webhooks, logs. Для диагностики используйте записи API-логов.

ПараметрТипОбязательныйОписание
itemsarrayfor listСписок сущностей на текущей странице
pageintegerfor listНомер страницы (начинается с 1)
limitintegerfor listКоличество элементов на странице
totalintegerfor listОбщее число элементов
logsarrayfor /integrations/logsПоследние вызовы API с id, method, path, status и timeMs

Пример ответа

json
{
  "items": [
    {
      "id": "prd_2v9k9x",
      "name": "Клюшка BAUER Nexus",
      "price": 12990
    }
  ],
  "page": 1,
  "limit": 20,
  "total": 187
}

Примечания

  • - Для vendor-интеграций сверяйте форму ответа с конкретным разделом документации.
  • - При page * limit > total список может быть пустым — это нормальное поведение.

Введение и базовый URL

Vendor API Hattrix работает через текущий backend проекта и проксируется фронтендом по пути /api/vendors. Все запросы выполняются по HTTPS и возвращают JSON.

ПараметрТипОбязательныйОписание
Base URLstringyeshttps://hattrix.ru/api/vendors
Health URLstringnohttps://hattrix.ru/health
Content-Typeheaderyesapplication/json
Acceptheaderyesapplication/json

HTTP-статусы

200Backend и база данных доступны
503Backend отвечает, но база данных недоступна или degraded

Пример запроса

bash
curl --request GET \
  --url https://hattrix.ru/health \
  --header 'Accept: application/json'

Пример ответа

json
{
  "status": "ok",
  "timestamp": "2026-05-01T06:01:00.000Z"
}

Аутентификация

Для рабочих vendor-endpoint используйте JWT access token в формате Bearer. API-ключи создаются в разделе Developers, но текущие защищённые маршруты проекта проверяют именно JWT пользователя продавца или developer-участника.

ПараметрТипОбязательныйОписание
AuthorizationheaderyesBearer <JWT_ACCESS_TOKEN>
X-Org-IdheadernoID организации, если один пользователь работает с несколькими организациями

HTTP-статусы

200Токен принят, запрос выполнен
401JWT отсутствует, истёк или отозван
403Пользователь не продавец и не developer-участник организации

Пример запроса

bash
curl --request GET \
  --url https://hattrix.ru/api/vendors/products \
  --header 'Authorization: Bearer <JWT_ACCESS_TOKEN>'

Получение и обновление JWT

Перед вызовом vendor endpoint получите access token через /api/auth/login. Refresh token обновляет сессию, а /api/auth/me проверяет текущего пользователя и его vendor/developer контекст.

/api/auth/login, /api/auth/refresh, /api/auth/me, /api/auth/logout
ПараметрТипОбязательныйОписание
emailstringyesEmail продавца или developer-участника
passwordstringyesПароль пользователя
tokenresponse stringyesJWT access token для Authorization header
refreshTokenresponse stringyesТокен обновления access token
user.roleseller | developerfor integrationsРоль пользователя в vendor dashboard
user.vendorIdnumberfor integrationsID организации продавца

HTTP-статусы

200Успешный login/refresh/me/logout
400Не передан email/password или refreshToken
401Неверные credentials, истёкший или неверный токен

Пример запроса

bash
curl --request POST \
  --url https://hattrix.ru/api/auth/login \
  --header 'Content-Type: application/json' \
  --data '{
    "email": "vendor@example.com",
    "password": "secret-password"
  }'

Пример ответа

json
{
  "token": "<JWT_ACCESS_TOKEN>",
  "refreshToken": "<JWT_REFRESH_TOKEN>",
  "user": {
    "id": 42,
    "email": "vendor@example.com",
    "firstName": "Иван",
    "lastName": "Петров",
    "userType": "V",
    "role": "seller",
    "vendorId": 42
  }
}

Примечания

  • - Access token передавайте как Authorization: Bearer <JWT_ACCESS_TOKEN>.
  • - Для developer-участника role будет developer, а vendorId укажет организацию продавца.
  • - Не храните JWT в публичном JavaScript без защиты от XSS; для серверных интеграций храните токены в секретном хранилище.

Управление товарами (CRUD)

Получение списка товаров, создание, обновление и удаление карточек товаров продавца.

/api/vendors/products, /api/vendors/products/{id}
ПараметрТипОбязательныйОписание
namestringyesНазвание товара
pricenumberyesЦена в рублях
stocknumbernoОстаток на складе, по умолчанию 10
skustringnoВнешний SKU поставщика
descriptionstringnoПолное HTML/текстовое описание товара
shortDescriptionstringnoКороткое описание для списков
listPricenumbernoСтарая цена/цена до скидки
status (body)stringnoA — активен, D — выключен
categoryIdsnumber[]noКатегории, к которым привязать товар
imagesarraynoМассив изображений: path, alt
optionsarraynoОпции товара и варианты (например, размер/хват)
pagequery integernoСтраница списка, минимум 1
limitquery integernoРазмер страницы, 1..100
searchquery stringnoПоиск по названию, описанию и product_code
status (query)query stringnoФильтр списка по статусу A/D
category_idquery integernoФильтр списка по категории
sort_byquery stringnotimestamp | price | name
sort_orderquery stringnoasc | desc
Idempotency-Keyheaderrecommended for POST/PUTУникальный ключ для безопасных повторов

HTTP-статусы

200Список/карточка товара получены или товар обновлён
201Товар создан
400Некорректные поля товара
401/403Нет авторизации или прав продавца
404Товар не найден или не принадлежит продавцу

Пример запроса

bash
curl --request POST \
  --url https://hattrix.ru/api/vendors/products \
  --header 'Authorization: Bearer <JWT_ACCESS_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "Клюшка BAUER Nexus",
    "price": 12990,
    "stock": 12
  }'

Пример ответа

json
{
  "id": 1024,
  "name": "Клюшка BAUER Nexus",
  "sku": "BAUER-NEXUS-77",
  "price": 12990,
  "listPrice": 14990,
  "stock": 12,
  "status": "A",
  "images": [
    {
      "id": 501,
      "path": "https://hattrix.ru/images/detailed/stick.jpg",
      "type": "M",
      "alt": "Клюшка BAUER Nexus"
    }
  ],
  "categories": [
    { "id": 12, "name": "Клюшки" }
  ]
}

Примечания

  • - GET /api/vendors/products поддерживает пагинацию через page и limit.
  • - PUT /api/vendors/products/{id} обновляет карточку товара.
  • - DELETE /api/vendors/products/{id} удаляет товар продавца.
  • - Idempotency-Key полезен для повторов POST/PUT, если клиент не уверен, дошёл ли первый запрос.

Импорт товаров (CSV / JSON / URL)

Импорт поддерживает загрузку файла CSV/JSON и импорт по URL внешнего сайта. Процесс асинхронный: API возвращает jobId.

POST/api/vendors/integrations/import
ПараметрТипОбязательныйОписание
sourceTypeenumyescsv | json | url
filefilefor csv/jsonФайл импорта
sourceUrlstringfor urlСсылка на внешний каталог

HTTP-статусы

202Import job поставлен в очередь
400Некорректный sourceType, sourceUrl или fileName
401/403Нет доступа к интеграциям продавца

Пример запроса

bash
curl --request POST \
  --url https://hattrix.ru/api/vendors/integrations/import \
  --header 'Authorization: Bearer <JWT_ACCESS_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
    "sourceType": "url",
    "sourceUrl": "https://vendor.example.com/catalog.json"
  }'

Пример ответа

json
{
  "job": {
    "id": 79,
    "sourceType": "url",
    "sourceUrl": "https://vendor.example.com/catalog.json",
    "status": "queued",
    "createdAt": "2026-05-01T06:11:00.000Z"
  }
}

Примечания

  • - Успешный запуск возвращает HTTP 202 Accepted.
  • - Не отправляйте одновременно больше 20 импортов на организацию.
  • - Историю импортов можно получить через GET /api/vendors/integrations/import-jobs.

Заказы и статусы

Отслеживайте заказы, фильтруйте их по статусу и подтверждайте смену статуса обработки, отправки и доставки.

GET/api/vendors/orders
ПараметрТипОбязательныйОписание
statusstringnonew | confirmed | shipped | delivered | canceled
fromstringnoДата начала периода (ISO 8601)
tostringnoДата окончания периода (ISO 8601)
pagequery integernoСтраница списка, минимум 1
limitquery integernoРазмер страницы, 1..100

HTTP-статусы

200Список заказов или заказ получен
200/204Заказ подтверждён через /orders/{id}/confirm
401/403Нет прав продавца
404Заказ не найден

Пример запроса

bash
curl --request GET \
  --url 'https://hattrix.ru/api/vendors/orders?status=confirmed&from=2026-05-01T00:00:00Z&to=2026-05-31T23:59:59Z&page=1&limit=20' \
  --header 'Authorization: Bearer <JWT_ACCESS_TOKEN>'

Пример ответа

json
{
  "items": [
    {
      "id": "ord_91ab2c",
      "status": "confirmed",
      "total": 24580,
      "createdAt": "2026-05-03T12:45:00.000Z"
    }
  ],
  "page": 1,
  "limit": 20,
  "total": 1
}

Примечания

  • - Подтверждение заказа выполняется через POST /api/vendors/orders/{id}/confirm.
  • - Рекомендуется валидировать допустимые переходы статусов на стороне интеграции.

История импортов

Endpoint возвращает последние import jobs продавца: статус очереди, количество обработанных товаров и ошибку, если импорт завершился неуспешно.

GET/api/vendors/integrations/import-jobs
ПараметрТипОбязательныйОписание
idnumberresponseID import job
sourceTypecsv | json | urlresponseИсточник импорта
statusstringresponsequeued | processing | completed | failed
processedCountnumberresponseСколько позиций обработано
errorMessagestring | nullresponseТекст ошибки при failed

HTTP-статусы

200История импортов получена
401/403Нет доступа к интеграциям продавца

Пример запроса

bash
curl --request GET \
  --url https://hattrix.ru/api/vendors/integrations/import-jobs \
  --header 'Authorization: Bearer <JWT_ACCESS_TOKEN>'

Пример ответа

json
{
  "jobs": [
    {
      "id": 79,
      "sourceType": "url",
      "sourceUrl": "https://vendor.example.com/catalog.json",
      "fileName": null,
      "status": "queued",
      "processedCount": 0,
      "errorMessage": null,
      "createdAt": "2026-05-01T06:11:00.000Z"
    }
  ]
}

Примечания

  • - Используйте этот endpoint для polling после POST /api/vendors/integrations/import.
  • - Не опрашивайте чаще одного раза в несколько секунд, чтобы не создавать лишнюю нагрузку.

Жизненный цикл заказа

Базовая модель статусов: new → confirmed → shipped → delivered. Отмена (`canceled`) обычно допустима до доставки.

ПараметрТипОбязательныйОписание
newstatusnoЗаказ создан и ожидает подтверждения
confirmedstatusnoЗаказ подтверждён продавцом
shippedstatusnoЗаказ передан в доставку
deliveredstatusnoЗаказ доставлен клиенту
canceledstatusnoЗаказ отменён

Примечания

  • - Рекомендуется хранить у себя журнал переходов статусов с timestamp и id записи из интеграционных логов.
  • - При получении `order.status_changed` валидируйте переход статуса перед обновлением локальной БД.
  • - Событие `order.created` желательно обрабатывать идемпотентно по order.id.

Developer-доступ к организации

Продавец может пригласить внешнего разработчика в организацию. Developer получает доступ к интеграциям и работает в контексте vendorId продавца.

/api/vendors/developers/invites, /api/auth/register-developer-invite
ПараметрТипОбязательныйОписание
emailstringyesEmail разработчика для приглашения
inviteTokenresponse stringyesОдноразовый токен приглашения
inviteLinkresponse stringyesСсылка регистрации developer-аккаунта
expiresAtnumberyesUnix timestamp истечения приглашения

HTTP-статусы

201Приглашение создано или developer зарегистрирован
400Некорректный email/token/password
403Приглашать разработчиков может только seller
409Пользователь с таким email уже существует

Пример запроса

bash
curl --request POST \
  --url https://hattrix.ru/api/vendors/developers/invites \
  --header 'Authorization: Bearer <JWT_ACCESS_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{"email":"developer@example.com"}'

Пример ответа

json
{
  "success": true,
  "inviteToken": "4c83f0...",
  "inviteLink": "/vendor/register-developer?token=4c83f0...",
  "expiresAt": 1778256000
}

Примечания

  • - Developer-участник не становится продавцом; он получает роль developer в рамках организации.
  • - Для регистрации по invite используйте POST /api/auth/register-developer-invite.

Вебхуки

Подпишитесь на события `order.created` и `order.status_changed`. Вебхуки подписываются на URL и подписываются HMAC-сигнатурой.

/api/vendors/integrations/webhooks
ПараметрТипОбязательныйОписание
urlstringyesHTTPS endpoint вашей системы
events[]arrayyesСписок событий для подписки
secretstringautoГенерируется при создании вебхука
X-Hattrix-Signatureheaderyeshex(HMAC_SHA256(raw_body, secret))
X-Hattrix-TimestampheaderyesUnix timestamp доставки события
X-Hattrix-EventheaderyesИмя события (например, order.created)

HTTP-статусы

200Список вебхуков получен
201Вебхук создан, secret показан один раз
400URL вебхука невалиден
401/403Нет доступа к интеграциям

Пример запроса

bash
curl --request POST \
  --url https://hattrix.ru/api/vendors/integrations/webhooks \
  --header 'Authorization: Bearer <JWT_ACCESS_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
    "url": "https://merchant.example.com/hattrix/webhook",
    "events": ["order.created", "order.status_changed"]
  }'

Пример ответа

json
{
  "webhook": {
    "id": 6,
    "url": "https://merchant.example.com/hattrix/webhook",
    "events": ["order.created", "order.status_changed"],
    "status": "active",
    "createdAt": "2026-05-01T06:20:00.000Z"
  },
  "secret": "whsec_***",
  "showOnce": true
}

Примечания

  • - Проверяйте подпись на исходном raw-body, а не на повторно сериализованном JSON.
  • - Отклоняйте события со старыми timestamp (например, старше 5 минут).
  • - См. раздел «Лимиты и квоты» для поведения при всплесках событий.

Формат payload вебхука

События доставляются JSON-пакетом с именем события, временем и объектом данных. Верификацию выполняйте по raw body.

Пример ответа

json
{
  "event": "order.status_changed",
  "timestamp": "2026-05-01T07:12:00.000Z",
  "data": {
    "id": "ord_91ab2c",
    "status": "shipped",
    "previousStatus": "confirmed",
    "updatedAt": "2026-05-01T07:11:57.000Z"
  }
}

Примечания

  • - Поддерживайте дедупликацию вебхуков по паре (event, data.id, timestamp).
  • - Возвращайте 2xx только после успешной обработки; иначе Hattrix повторит доставку.
  • - Ограничьте время обработки одного webhook handler (например, до 3-5 секунд).

API-ключи организации

Управление API-ключами организации: просмотр, создание и отзыв ключей со scope read/write/full.

/api/vendors/api-keys
ПараметрТипОбязательныйОписание
namestringyesНазвание ключа, видимое в кабинете
scopeenumyesread | write | full

HTTP-статусы

200Список ключей получен или ключ отозван
201Ключ создан, secret показан один раз
400Не передано имя ключа
401/403Нет доступа к Developers

Пример запроса

bash
curl --request POST \
  --url https://hattrix.ru/api/vendors/api-keys \
  --header 'Authorization: Bearer <JWT_ACCESS_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{"name":"ERP Integration","scope":"write"}'

Пример ответа

json
{
  "key": {
    "id": 12,
    "name": "ERP Integration",
    "scope": "write",
    "status": "active",
    "createdAt": "2026-05-01T06:23:00.000Z"
  },
  "secret": "sk_live_***",
  "showOnce": true
}

Примечания

  • - Полное значение token показывается только один раз в момент создания.
  • - Рекомендуется регулярно ротировать ключи и ограничивать scope по принципу минимальных прав.

API-логи

Просмотр последних 100 API-вызовов для диагностики интеграции.

GET/api/vendors/integrations/logs

HTTP-статусы

200Возвращены последние 100 записей
401/403Нет доступа к логам интеграций

Пример запроса

bash
curl --request GET \
  --url https://hattrix.ru/api/vendors/integrations/logs \
  --header 'Authorization: Bearer <JWT_ACCESS_TOKEN>'

Пример ответа

json
{
  "logs": [
    {
      "id": 101,
      "path": "/products",
      "method": "POST",
      "status": 201,
      "timeMs": 0,
      "at": "2026-05-01T06:24:00.000Z"
    }
  ]
}

Примечания

  • - Используйте id записи и путь из логов при обращении в поддержку.

Лимиты и квоты

Текущие лимиты: до 120 запросов в минуту и до 20 одновременных импортов. Актуальные значения возвращаются в заголовках ответа.

ПараметрТипОбязательныйОписание
X-RateLimit-LimitheaderyesОбщий лимит запросов в текущем окне
X-RateLimit-RemainingheaderyesОставшееся число запросов
X-RateLimit-ResetheaderyesUnix timestamp сброса окна
Retry-Afterheaderfor 429Через сколько секунд повторить запрос

Пример ответа

json
{
  "error": "Слишком много запросов. Пожалуйста, попробуйте позже."
}

Примечания

  • - При 429 используйте экспоненциальный backoff с jitter и учитывайте Retry-After.
  • - Параллельные импорты ограничены 20 активными job на организацию.

Коды ошибок

Backend возвращает JSON с полем `error`; для validation-ошибок дополнительно может быть `details`, а в development — stack/message.

ПараметрТипОбязательныйОписание
INVALID_REQUEST4xxnoНекорректный формат запроса или параметров
UNAUTHORIZED401noОтсутствует или неверный Bearer token
FORBIDDEN403noНедостаточно прав для выбранного scope
NOT_FOUND404noРесурс не найден
TOO_MANY_REQUESTS429noПревышен лимит, безопасно повторять
INTEGRATION_ERROR5xxnoВременная ошибка сервиса, повторить позже

Пример ответа

json
{
  "error": "Слишком много запросов. Пожалуйста, попробуйте позже."
}

Примечания

  • - Повторяйте только временные ошибки: 429 и часть 5xx.
  • - Для расследования передавайте в поддержку endpoint, method, время ошибки и запись из API-логов.
  • - См. раздел «Лимиты и квоты» для стратегии повторов.

Схемы основных объектов

Краткий справочник по структурам, которые чаще всего встречаются в ответах API. Поля могут расширяться без breaking changes.

Пример ответа

json
{
  "Product": {
    "id": 1024,
    "name": "Клюшка BAUER Nexus",
    "sku": "BAUER-NEXUS-77",
    "description": "Полное описание",
    "shortDescription": "Короткое описание",
    "price": 12990,
    "listPrice": 14990,
    "stock": 12,
    "status": "A",
    "categories": [{ "id": 12, "name": "Клюшки" }],
    "images": [{ "id": 501, "path": "https://hattrix.ru/images/detailed/stick.jpg", "type": "M", "alt": "Клюшка" }]
  },
  "Order": {
    "id": 9101,
    "status": "N",
    "total": 24580,
    "customer": { "email": "customer@example.com", "name": "Анна Иванова" },
    "items": [{ "id": 1, "product": "Клюшка BAUER Nexus", "quantity": 2, "price": 12990, "productId": 1024 }],
    "createdAt": "2026-05-01T10:00:00.000Z"
  },
  "ApiKey": {
    "id": 12,
    "name": "ERP Integration",
    "scope": "write",
    "status": "active",
    "lastUsedAt": null,
    "createdAt": "2026-05-01T06:23:00.000Z"
  },
  "Webhook": {
    "id": 6,
    "url": "https://merchant.example.com/hattrix/webhook",
    "events": ["order.created", "order.status_changed"],
    "status": "active",
    "createdAt": "2026-05-01T06:20:00.000Z"
  },
  "ImportJob": {
    "id": 79,
    "sourceType": "url",
    "status": "queued",
    "processedCount": 0,
    "errorMessage": null
  }
}

Примечания

  • - Списки товаров и заказов возвращают pagination с page, limit, total и totalPages.
  • - Секреты api-key и webhook показываются только один раз при создании.
  • - Для совместимости не полагайтесь на порядок полей JSON.

Типовые сценарии интеграции

Рекомендуемые последовательности вызовов для ERP, складской системы, CRM и обработчика вебхуков.

ПараметрТипОбязательныйОписание
Первичная синхронизация каталогаworkflownologin → GET products → POST/PUT products → GET logs
Импорт каталога по URLworkflownologin → POST integrations/import → polling import-jobs → разбор errorMessage
Обработка заказовworkflownoGET orders?status=N → GET orders/{id} → POST orders/{id}/confirm
Webhook-подключениеworkflownoPOST integrations/webhooks → сохранить secret → проверять HMAC raw body
Ротация доступаworkflownoPOST api-keys → обновить интеграцию → POST api-keys/{id}/revoke

Примечания

  • - Каждый workflow должен иметь интеграционный тест на вашей стороне.
  • - Для операций записи используйте ограниченные ретраи и идемпотентность.
  • - После релиза первые сутки мониторьте 4xx/5xx, длительность запросов и количество failed import jobs.

Справочник endpoint'ов

Краткая карта API-методов для интеграции. Используйте как чеклист покрытия при запуске.

ПараметрТипОбязательныйОписание
POST /api/auth/loginAuthnoПолучить token и refreshToken
POST /api/auth/refreshAuthnoОбновить access token
GET /api/auth/meAuthJWTПроверить текущего пользователя и роль
POST /api/auth/logoutAuthJWTОтозвать текущий access token
GET /healthpublicnoПроверка доступности backend и базы данных
GET /api/vendors/productsProductsJWTСписок товаров продавца (page, limit)
POST /api/vendors/productsProductsJWTСоздание товара
PUT /api/vendors/products/{id}ProductsJWTОбновление товара
DELETE /api/vendors/products/{id}ProductsJWTУдаление товара
POST /api/vendors/integrations/importImportsJWTЗапуск импорта (csv/json/url), ответ 202
GET /api/vendors/integrations/import-jobsImportsJWTПоследние import jobs продавца
GET /api/vendors/ordersOrdersJWTСписок заказов и фильтры по статусу/периоду
POST /api/vendors/orders/{id}/confirmOrdersJWTПодтверждение заказа продавцом
POST /api/vendors/developers/invitesDevelopersJWT sellerСоздать приглашение разработчика
POST /api/auth/register-developer-inviteDevelopersinvite tokenЗарегистрировать developer-участника
GET /api/vendors/integrations/webhooksWebhooksJWTСписок активных подписок вебхуков
POST /api/vendors/integrations/webhooksWebhooksJWTСоздание подписки на события
GET /api/vendors/api-keysApiKeysJWTСписок API-ключей организации
POST /api/vendors/api-keysApiKeysJWTСоздание ключа (секрет показывается один раз)
POST /api/vendors/api-keys/{id}/revokeApiKeysJWTОтзыв ключа
GET /api/vendors/integrations/logsLogsJWTПоследние 100 API-вызовов

Примечания

  • - Этот список синхронизирован с реальными маршрутами backend/src/routes/vendorRoutes.ts.
  • - Для production запуска убедитесь, что каждая нужная операция покрыта вашим интеграционным тестом.

Troubleshooting: частые проблемы

Быстрые сценарии диагностики при ошибках интеграции. Начинайте с endpoint, времени ошибки и логов API.

ПараметрТипОбязательныйОписание
401 UNAUTHORIZEDauthnoПроверьте Bearer token, отсутствие лишних пробелов и срок действия ключа
403 FORBIDDENscopenoПрава ключа не соответствуют операции (например, read вместо write)
404 NOT_FOUNDresourcenoПроверьте id ресурса и организацию (X-Org-Id при мульти-аккаунте)
429 TOO_MANY_REQUESTSquotanoПримените backoff + jitter и уважайте Retry-After
Signature mismatchwebhooknoHMAC считайте от raw body, а не от пересобранного JSON

Примечания

  • - При любой проблеме фиксируйте endpoint, method, время, HTTP-статус и тело ошибки.
  • - Если ошибка воспроизводится, приложите запись из /api/vendors/integrations/logs при обращении в поддержку.
  • - Для нестабильных сетевых ошибок используйте ограниченные ретраи с экспоненциальной паузой.

Changelog

v1.2.0 — добавлен импорт по URL и API-логи. v1.1.0 — события вебхуков. v1.0.0 — базовый релиз CRUD товаров и заказов.

Примечания

  • - v1.2.0: добавлены /api/vendors/integrations/import и /api/vendors/integrations/logs.
  • - v1.1.0: добавлены события вебхуков order.created и order.status_changed.
  • - v1.0.0: релиз CRUD товаров и списка заказов.

Чеклист перед запуском в production

Короткий контрольный список для безопасного запуска интеграции и снижения рисков в первые дни после релиза.

Примечания

  • - Проверены health-check, авторизация и получение товаров в production.
  • - Включено логирование endpoint, method, статуса, тела ошибки и Retry-After на вашей стороне.
  • - Реализована идемпотентность для create/update операций и webhook-обработчиков.
  • - Настроены алерты на рост 429/5xx и на количество неуспешных webhook-обработок.
  • - Проверена ротация API-ключей и ограничение прав по scope.
  • - Команда поддержки знает, где смотреть /api/vendors/integrations/logs.