Ошибки

Доступ для AI:

Ошибка с любым статусом 4xx или 5xx приходит в одном формате:

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

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

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

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

СтатусcodeКогда
400bad_requestЗапрос корректен по схеме, но не прошёл проверку на сервере.
401unauthorizedНет заголовка X-API-Key или ключ неверный.
402access_suspendedДоступ к API приостановлен: отклоняются все запросы, кроме DELETE.
402access_expiredОплаченный период закончился: работают чтение и DELETE, остальная запись отклоняется.
403forbiddenНе хватает прав: запись ключом read_only.
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Когда
402refresh_requires_upgradeДополнительный сбор отзывов входит в тариф «Полный».
402refresh_trial_exhaustedВсе 5 дополнительных сборов пробного периода использованы. На тарифе «Полный» дополнительный сбор доступен раз в сутки для каждого объекта.
409refresh_in_progressСбор по объекту уже идёт. Итог – в GET /v3/objects/{object_id}/refresh.
409refresh_nothing_to_scrapeУ объекта нет ссылок, которые можно собрать.
429refresh_limitedДополнительный сбор по объекту был меньше суток назад, собирать ещё раз нечего. Retry-After – секунд до следующего сбора.

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

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

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

СтатусcodeКогда
402reply_requires_upgradeПубликация ответов и «Пропустить» входят в тариф «Полный». Удалить уже опубликованный ответ можно на любом тарифе.
402reply_trial_quota_exhaustedПробный доступ включает три ответа на каждую площадку, и они израсходованы. Лимит снимает переход на «Полный».
403reply_card_not_yoursОбъект не закреплён за вашим аккаунтом. Мы отвечаем от имени организации, поэтому публикуем только там, где подтверждено, что объект ваш. Чтобы подтвердить, напишите в поддержку.
403reply_access_revokedПлощадка не даёт нам отвечать по этой ссылке: доступ был, но его отозвали. Что сделать, написано в detail.
404reply_not_foundОтвета нет. Для GET /reply – нет ответа через нас (написанный не через нас виден как reply_text отзыва); для DELETE – на отзыве нет никакого ответа.
409reply_not_supportedНа этой площадке мы пока не публикуем ответы. Смотрите can_publish_reply в GET /v3/sources.
409reply_not_replyableОтзыв не нативен для площадки: она показывает его в своей ленте, но собран он с другой (provider ≠ source_slug: tbank, booking, tripadvisor, …). Ответить на него через эту площадку нельзя.
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.

Жалобы на отзывы

СтатусcodeКогда
402complaint_requires_upgradeЖалобы входят в тариф «Полный».
402complaint_trial_quota_exhaustedПробный доступ включает три жалобы на каждую площадку, и они израсходованы.
403complaint_access_missingНа этой карточке у вас не подключены ответы – а жалобы живут там же.
403complaint_card_not_yoursОбъект не закреплён за вашим аккаунтом. Чтобы подтвердить, напишите в поддержку.
409complaint_not_supportedНа этой площадке мы не подаём жалобы. Смотрите can_file_complaint в GET /v3/sources.
409complaint_not_replyableОтзыв собран с другой площадки (provider ≠ source_slug): жаловаться на него нужно там.
409complaint_already_filedНа отзыв уже подана жалоба, а площадка принимает одну (Яндекс).
409complaint_pending_reviewПрежняя жалоба ещё на рассмотрении (2ГИС).
409complaint_cooldownПовторно – не чаще раза в трое суток (Google). Когда можно, говорит заголовок Retry-After и retry_at в форме.
409complaint_in_progressЖалоба на этот отзыв сейчас отправляется.
422complaint_category_invalidНет category или код не из form.categories.
422complaint_text_requiredПлощадка принимает жалобу текстом, а text пуст.
422complaint_text_too_longtext длиннее form.max_length.
422complaint_text_invalidВ text управляющие символы.
503complaint_source_pausedПодача жалоб на площадке временно приостановлена: у площадки сбой.

Если жалоба не подана уже после 202, у неё status: failed и error.code из того же словаря:

  • за время отправки что-то изменилось – complaint_requires_upgrade, complaint_trial_quota_exhausted, complaint_access_missing, complaint_access_revoked (доступ к площадке отозван), complaint_card_not_yours, complaint_source_paused, complaint_already_filed;
  • отзыв или площадка – complaint_not_replyable (отзыва больше нет на площадке), complaint_target_unresolved (не нашли отзыв на площадке), complaint_not_supported;
  • площадка не приняла – complaint_rejected_by_platform;
  • не удалось за сутки – complaint_session_expired, complaint_rate_limited или complaint_transport_failed.

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

  • Повторяйте 429 и 5xx с нарастающей задержкой. Исключение – 429 refresh_limited: раньше Retry-After дополнительный сбор по объекту не запустится. Остальные 4xx не повторяйте без исправления запроса; исключения – 409 idempotency_in_progress и 409 reply_in_progress, их повторяют с задержкой.
  • Логируйте code вместе с detail: по коду мы быстрее поймём, что случилось.
  • При добавлении ссылок отказ приходит по каждой ссылке отдельно: текст в error, машинная причина в error_code. Негодная ссылка не отменяет остальные – они добавятся. Форматы адресов смотрите в разделе «Форматы ссылок».

Примеры:

// 401 – ключ не передан
{ "detail": "API key required. Provide X-API-Key header.", "code": "unauthorized" }

// 403 – запись ключом на чтение
{ "detail": "This operation requires full access. Your API key has read-only access.", "code": "forbidden" }

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

On this page