REST API

Ошибки

Обрабатывайте ответы о проблемах и сопоставляйте их с запросами.

Ошибки следуют формату problem JSON из RFC 9457 с типом содержимого application/problem+json.

{
  "type": "https://www.ninjabuy.com/api/v1/problems/bad-body",
  "title": "Invalid request",
  "status": 400,
  "detail": "The request did not match the expected shape.",
  "request_id": "REQUEST_ID",
  "errors": [{"pointer": "/links", "detail": "Validation detail"}]
}

type — постоянный идентификатор проблемы; title и detail описывают её. status совпадает с HTTP-статусом. Необязательные элементы errors содержат JSON Pointer и сведения о проверке; пустой указатель означает всё тело. При сообщении о проблеме укажите request_id (также доступен в X-Request-Id).

Все перечисленные типы начинаются с https://www.ninjabuy.com/api/v1/problems/.

Окончание типаHTTPЗначение / действие
bad-json400Тело не является корректным JSON. Исправьте синтаксис.
bad-body400Тело, параметры запроса или курсор не прошли проверку. Прочитайте errors.
bad-idempotency-key400Используйте от 1 до 255 печатных символов ASCII в Idempotency-Key.
unauthorized401Передайте действительный Bearer-токен; WWW-Authenticate указывает метаданные.
not-found404Ресурс недоступен, неизвестен или не принадлежит этому аккаунту.
method-not-allowed405Используйте метод из Allow.
idempotency-key-in-progress409Первый запрос с этим ключом ещё выполняется. Подождите согласно Retry-After.
upload-too-large413Загруженные байты превышают заявленный размер или 20 MiB.
unsupported-media-type415Отправьте Content-Type: application/json.
idempotency-key-reused422Этот ключ уже использован с другим запросом. Используйте новый ключ.
invalid-workbook422Загрузка не является читаемым XLSX/CSV в пределах ограничений. Прочитайте errors.
upload-expired422Резервирование загрузки истекло. Загрузите файл заново.
rate-limited429Перед повтором подождите число секунд из Retry-After.
search-rate-limited429Квота поиска по ключевым словам исчерпана. Подождите согласно Retry-After.
service-unavailable503Повторите вскоре; учитывайте Retry-After, если заголовок есть.
internal-error500Повторите позже; сохраните идентификатор запроса, если проблема не исчезнет.

Успешный запрос всё равно может содержать ошибки отдельных входных значений. Обрабатывайте статусы ссылок отдельно от ошибок HTTP. Используйте Idempotency-Key для воспроизведения запроса создания; без ключа повторная отправка пакета создаёт ещё одно задание.