Ошибки

Доступ для AI:

Любая ошибка приходит одним и тем же телом, с любым статусом 4xx или 5xx:

{
  "detail": "Понятное человеку описание, что пошло не так",
  "code": "machine_readable_code"
}

detail – текст для логов, его формулировка может меняться.

code – стабильный код. Реализуйте логику по нему.

Коды состояния

СтатусcodeКогда
400bad_requestБитые параметры или невалидное тело.
401unauthorizedНет заголовка X-API-Key или ключ неверный.
402payment_requiredДоступ к API приостановлен. Что именно произошло, написано в detail.
403forbiddenНе хватает прав: запись ключом на чтение или чужой ресурс.
403session_requiredОперация выполняется только из личного кабинета. Никакой ключ на неё не действует.
404not_foundРесурс не найден или принадлежит другому аккаунту.
405method_not_allowedМетод не поддерживается этим адресом.
409conflictКонфликт состояния, например дубликат.
422validation_errorТело или параметры не прошли проверку схемы.
429rate_limitedСлишком много запросов подряд. Повторите с задержкой.
500internal_errorНаша ошибка. Стоит повторить с нарастающей задержкой.
503service_unavailableСервис временно недоступен. Повторите с задержкой.

Адресация и папки

СтатусcodeКогда
400object_or_folder_requiredВ запросе отзывов или аналитики нет ни object_id, ни folder_id.
400object_and_folder_conflictПереданы оба сразу. Адресовать нужно ровно один.
400folder_depth_exceededНарушена глубина: родитель сам вложен, у папки есть подпапки, или её делают родителем самой себе.
403folder_limit_reachedДостигнут потолок в 1000 живых папок на аккаунт.
404folder_not_foundПапка не найдена или чужая.
409folder_not_emptyУ папки есть живые подпапки. Сначала перенесите или удалите их.
СтатусcodeКогда
403object_limit_reachedДостигнут потолок активных объектов на вашем тарифе.
403object_creation_budget_exhaustedИсчерпан бюджет пересозданий объектов. Это защита от абьюза, а не тарифный лимит: как поднять – написано в detail.
402source_requires_upgradeПлощадка не входит в ваш тариф.
400pinned_limit_exceededЗакреплённых отзывов на объект не больше 30.
400duplicate_review_idsВ ordered_review_ids есть повторы.
409idempotency_conflictТот же Idempotency-Key пришёл с другим телом запроса.
409idempotency_in_progressЗапрос с этим Idempotency-Key ещё выполняется. Повторите позже.

Отказы по отдельным ссылкам при создании объекта и добавлении площадок ошибкой не считаются: они приходят внутри 201, в поле error_code каждой ссылки – source_not_detected, source_url_invalid, source_requires_upgrade, source_already_linked, link_already_added.

Синхронизация отзывов

СтатусcodeКогда
400invalid_cursorКурсор не читается: испорчен, изменён или выдан другому аккаунту. Начните обход заново, без cursorкак это работает.
400cursor_mismatchВместе с курсором передан object_id, folder_id или mode, не совпадающий с тем, для которого курсор выдан.

Ответы на отзывы

СтатусcodeКогда
402reply_requires_upgradeПубликация ответов входит в тариф «Полный». Удалить уже опубликованный ответ можно на любом тарифе.
403reply_access_revokedПлощадка не даёт нам отвечать по этой ссылке: доступ был и отозван. Что сделать, написано в detail.
404reply_not_foundУ этого отзыва нет вашего ответа. Ответ, написанный не через нас, виден как reply_text самого отзыва.
409reply_not_supportedНа этой площадке мы пока не публикуем ответы. Смотрите can_publish_reply в GET /v3/sources.
409reply_owned_by_other_accountНа отзыв уже отвечает другой аккаунт: на площадке место под ответ одно.
409reply_in_progressПредыдущий ответ сейчас публикуется, отменить его нечем. Повторите через несколько секунд.
409reply_edit_not_supportedНа этой площадке опубликованный ответ нельзя переписать.
409reply_delete_not_supportedНа этой площадке ответ нельзя удалить.
422validation_errorТекст пуст, содержит управляющие символы или длиннее допустимого на площадке.

202 означает, что задачу мы приняли; опубликованный ответ виден в самом отзыве (reply_text) и приходит событием replies.new. Если ответ не появился, причина обычно одна из этих – и почти все мы отрабатываем сами:

ПричинаЧто происходит
Наш доступ к площадке обновляетсяНичего делать не нужно, ответ уйдёт сам.
Площадка просит подождатьПовтор произойдёт автоматически.
Сеть или сбой на стороне площадкиПовторим сами, до трёх раз.
Из ссылки не выводится объект площадкиПроверьте адрес ссылки в объекте.
Площадка отклонила текстЕдинственный случай, где нужны вы: измените текст и отправьте снова.

Ответ не появился – напишите на info@rewio.ru.

Как обрабатывать

  • Повторяйте 429 и 5xx с нарастающей задержкой. Остальные 4xx повторять бессмысленно – запрос надо чинить.
  • Логируйте code вместе с detail: по коду мы быстрее поймём, что случилось.
  • При добавлении ссылок отказ приходит по каждой ссылке отдельно: текст в error, машинная причина в error_code. Негодная ссылка не отменяет остальные – они добавятся. Форматы адресов смотрите в Форматах ссылок.

Примеры:

// 401 – ключ не передан
{ "detail": "Missing API key", "code": "unauthorized" }

// 403 – запись ключом на чтение
{ "detail": "This key is read-only", "code": "forbidden" }

// 422 – невалидное тело
{ "detail": "url: field required", "code": "validation_error" }

On this page