{"openapi":"3.1.0","info":{"title":"Review Aggregator","description":"Единый REST API для отзывов: сервис собирает отзывы с площадок (Яндекс Карты, 2ГИС, Google, Островок, ДокДок и др.), приводит их к общей модели и отдаёт с фильтрами и аналитикой.\n\n📚 **Гайды, quickstart и полный справочник – на портале разработчика: https://docs.rewio.ru**\n\n#### Как начать\n1. Создайте **объект** – единицу бизнеса, отзывы по которой собираем.\n2. Добавьте в него **ссылки** на страницы объекта на нужных площадках.\n3. Запрашивайте **отзывы** и **аналитику** – данные обновляются дважды в сутки.\n\n#### Что вы получаете по каждому отзыву\n- **Текст**, **автор**, **оценка** – приведена к единой шкале 1–5 независимо от площадки\n- **Ответ организации** – текст и дата\n- **Изображения и видео** – превью и полноразмерные ссылки\n\n#### Работа с отзывами\nНа тарифе «Полный»:\n- **Ответы** – публикация, замена и удаление ответа от лица организации (на пробном доступе – 3 на площадку)\n- **Жалобы** – подача жалобы на отзыв через форму площадки и её итог (на пробном доступе – 3 на площадку)\n- **Дополнительный сбор** – новые отзывы по объекту вне расписания, раз в сутки (на пробном доступе – 5 сборов)\n\n#### Соглашения\n- **Базовый URL:** `https://api.rewio.ru`. Актуальная версия – `/v3`.\n- **Авторизация:** заголовок `X-API-Key: <ключ>` в каждом запросе. Области ключа: `read_only` / `full`.\n- **Формат:** JSON на вход и выход.\n- **Даты:** UTC, ISO 8601 без таймзоны (`2026-02-25T09:28:07`). Время площадки (`review_date`, `reply_date`) приводится к UTC везде, где это возможно; в противном случае – как на площадке.\n- **Оценки:** нормализованы к единой шкале 1–5 независимо от площадки; исходное значение площадки сохраняется отдельно (`rating_original`).\n- **Списки:** ключ элементов всегда `data`. Постраничные ответы – `{data, total, limit, offset, has_next}` (параметры `limit` 1–1000 и `offset`); полные списки – только `{data}`.\n- **Ошибки:** единый формат `{\"detail\": \"...\", \"code\": \"...\"}` с машиночитаемым `code`. Отдельно стоит `402`: доступ приостановлен (закончился пробный период или оплата) либо площадка не входит в тариф – повтор запроса не поможет.\n- **Ограничение частоты:** при слишком частых запросах – `429`; повторите с задержкой.\n\n#### Проба\nВ блоке авторизации уже подставлен тестовый ключ (только чтение) – можно сразу выполнить любой GET-запрос.\n\n**Тестовый ключ (только чтение):** `hrev_FaDGMKJEDDeCR5BCBgEg0aEjMogI7O7hOzE53YY4T1M`  \n**Тестовый объект:** Отель Националь, **object_id = 20**\n\nБесплатный тестовый доступ на создание 30 объектов.  \n**Подключение и доступ:** 📧 info@rewio.ru · ✈️ @const_rewio","version":"3.0.0"},"servers":[{"url":"https://api.rewio.tech","description":"Production"}],"paths":{"/health":{"get":{"tags":["health"],"summary":"Проверка доступности","description":"Отвечает, если API на связи. Ключ не нужен.\n\nКлюч не проверяется, поэтому метод отделяет сеть от ключа: нет ответа – проблема в\nсети или на нашей стороне, отвечает, а запрос с ключом даёт `401` – дело\nв ключе.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/health/read":{"get":{"tags":["health"],"summary":"Проверка чтения данных","description":"Отвечает `200`, если чтение данных работает: методы отзывов и аналитики\nответят. Если нет – `503`. Ключ не нужен.\n\nПодходит для внешнего мониторинга доступности.","operationId":"read_health_check_health_read_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/reviews/sync":{"get":{"tags":["reviews"],"summary":"Синхронизация отзывов: поток изменений с курсором","description":"Отзывы, изменившиеся у нас после точки, на которой вы остановились.\n\nПервый запрос – с адресом (`object_id` или `folder_id`), дальше достаточно\n`cursor` из предыдущего ответа. `next_cursor` приходит **всегда**, в том\nчисле на последней и на пустой странице: это закладка, которую вы храните\nмежду прогонами.\n\nПорядок фиксирован (от давних изменений к свежим) и не настраивается,\nфильтров нет. Строки могут повторяться между страницами – применяйте upsert\nпо `id`. Строки поток не теряет.","operationId":"sync_reviews_v3_v3_reviews_sync_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Синхронизировать папку целиком: все объекты папки и её подпапок. Взаимоисключима с `object_id` – ровно один из двух.","title":"Folder Id"},"description":"Синхронизировать папку целиком: все объекты папки и её подпапок. Взаимоисключима с `object_id` – ровно один из двух."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Курсор из `next_cursor` предыдущего ответа. С ним остальные параметры можно не передавать: адресат, режим и размер страницы хранятся в курсоре.","title":"Cursor"},"description":"Курсор из `next_cursor` предыдущего ответа. С ним остальные параметры можно не передавать: адресат, режим и размер страницы хранятся в курсоре."},{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(all|new)$"},{"type":"null"}],"description":"Что присылать:\n\n* `all` (по умолчанию) – и новые отзывы, и изменения. Полная актуальная копия.\n* `new` – только впервые появившиеся отзывы. Правки, ответы и пропажи не\n  приходят. После смены состава объекта отзывы могут прийти повторно –\n  применяйте upsert по `id`.","title":"Mode"},"description":"Что присылать:\n\n* `all` (по умолчанию) – и новые отзывы, и изменения. Полная актуальная копия.\n* `new` – только впервые появившиеся отзывы. Правки, ответы и пропажи не\n  приходят. После смены состава объекта отзывы могут прийти повторно –\n  применяйте upsert по `id`."},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1000,"minimum":1},{"type":"null"}],"description":"Размер страницы (1–1000). По умолчанию 100.","title":"Limit"},"description":"Размер страницы (1–1000). По умолчанию 100."},{"name":"object_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Идентификатор объекта. Взаимоисключим с `folder_id` – в запросе может быть только один из двух.","title":"Object Id"},"description":"Идентификатор объекта. Взаимоисключим с `folder_id` – в запросе может быть только один из двух."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewsSyncPageV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/reviews":{"get":{"tags":["reviews"],"summary":"Получить отзывы объекта или папки","description":"Отзывы объекта или папки с фильтрацией, сортировкой и пагинацией.\n\nАдресат – `object_id` (один объект), `folder_id` (папка целиком) или\n**ничего**: тогда лента идёт по всем включённым объектам аккаунта. Объект и\nпапка сразу – `400 object_and_folder_conflict`.\n\nОтвет – конверт `Page`: `{data, total, limit, offset, has_next}`. По каждому\nотзыву: `author`, `text`, `rating` (шкала 1–5), `reply_text` / `reply_date`,\n`images` и остальное.\n\n**Сортировка:** `sort_by=review_date` (по умолчанию), `rating` или\n`reply_date`. При `sort_by=reply_date` отзывы без ответа идут **в конце** при обоих направлениях,\nа неотвеченные выбирает фильтр `has_reply=false`.","operationId":"get_reviews_v3_v3_reviews_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Единая лента по всей папке: все объекты папки и её подпапок. Взаимоисключим с `object_id`; без обоих – лента всего аккаунта. Выключенные и удалённые объекты в состав не входят. В папочном режиме закрепления объектов не применяются, а скрытия применяются по составу папки.","title":"Folder Id"},"description":"Единая лента по всей папке: все объекты папки и её подпапок. Взаимоисключим с `object_id`; без обоих – лента всего аккаунта. Выключенные и удалённые объекты в состав не входят. В папочном режиме закрепления объектов не применяются, а скрытия применяются по составу папки."},{"name":"replyable","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"`true` – только отзывы, на которые можно ответить через Rewio (`is_replyable: true`: ответы на ссылке подключены, отзыв родной для площадки); `false` – все остальные.","title":"Replyable"},"description":"`true` – только отзывы, на которые можно ответить через Rewio (`is_replyable: true`: ответы на ссылке подключены, отзыв родной для площадки); `false` – все остальные."},{"name":"reply_state","in":"query","required":false,"schema":{"anyOf":[{"enum":["unanswered","waiting","answered","skipped"],"type":"string"},{"type":"null"}],"description":"Состояние ответа: `unanswered` – ответа нет, вашего в ожидании нет, отзыв не пропущен; `waiting` – ваш ответ отправлен, на карточке ещё не появился; `answered` – на карточке стоит ответ организации (ваш или поставленный не через Rewio); `skipped` – вы отметили отзыв «Пропустить». На тарифе без ответов `waiting` и `skipped` всегда пусты. Для «есть ли ответ на площадке» – `has_reply`.","title":"Reply State"},"description":"Состояние ответа: `unanswered` – ответа нет, вашего в ожидании нет, отзыв не пропущен; `waiting` – ваш ответ отправлен, на карточке ещё не появился; `answered` – на карточке стоит ответ организации (ваш или поставленный не через Rewio); `skipped` – вы отметили отзыв «Пропустить». На тарифе без ответов `waiting` и `skipped` всегда пусты. Для «есть ли ответ на площадке» – `has_reply`."},{"name":"object_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Идентификатор объекта. Взаимоисключим с `folder_id` – в запросе может быть только один из двух.","title":"Object Id"},"description":"Идентификатор объекта. Взаимоисключим с `folder_id` – в запросе может быть только один из двух."},{"name":"link_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"description":"Filter by link IDs.","default":[],"title":"Link Ids"},"description":"Filter by link IDs."},{"name":"source_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"description":"Фильтр по площадкам: id из `GET /v3/sources`. Пусто – все площадки объекта.","default":[],"title":"Source Ids"},"description":"Фильтр по площадкам: id из `GET /v3/sources`. Пусто – все площадки объекта."},{"name":"sort_by","in":"query","required":false,"schema":{"enum":["review_date","rating","reply_date"],"type":"string","description":"Поле сортировки: `review_date` (дата публикации отзыва), `rating` (оценка) или `reply_date` (дата ответа организации; отзывы без ответа – в конце при любом направлении).","default":"review_date","title":"Sort By"},"description":"Поле сортировки: `review_date` (дата публикации отзыва), `rating` (оценка) или `reply_date` (дата ответа организации; отзывы без ответа – в конце при любом направлении)."},{"name":"sort_order","in":"query","required":false,"schema":{"enum":["desc","asc"],"type":"string","description":"Направление сортировки: `desc` / `asc`.","default":"desc","title":"Sort Order"},"description":"Направление сортировки: `desc` / `asc`."},{"name":"min_rating","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":5,"minimum":0},{"type":"null"}],"description":"Минимальная оценка включительно, шкала 1–5. `0` – без нижней границы и **вместе с отзывами без оценки**.","title":"Min Rating"},"description":"Минимальная оценка включительно, шкала 1–5. `0` – без нижней границы и **вместе с отзывами без оценки**."},{"name":"max_rating","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":5,"minimum":1},{"type":"null"}],"description":"Максимальная оценка включительно, шкала 1–5.","title":"Max Rating"},"description":"Максимальная оценка включительно, шкала 1–5."},{"name":"published_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Нижняя граница по дате публикации (`review_date`), включительно. Формат `YYYY-MM-DD`.","title":"Published From"},"description":"Нижняя граница по дате публикации (`review_date`), включительно. Формат `YYYY-MM-DD`."},{"name":"published_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Верхняя граница по дате публикации (`review_date`), включительно. Формат `YYYY-MM-DD`.","title":"Published To"},"description":"Верхняя граница по дате публикации (`review_date`), включительно. Формат `YYYY-MM-DD`."},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"description":"Часовой пояс (IANA: `Europe/Moscow`, `Asia/Vladivostok`): `published_from` / `published_to` – дни этого пояса, а не UTC. Неизвестный пояс – Москва; без параметра – UTC.","title":"Tz"},"description":"Часовой пояс (IANA: `Europe/Moscow`, `Asia/Vladivostok`): `published_from` / `published_to` – дни этого пояса, а не UTC. Неизвестный пояс – Москва; без параметра – UTC."},{"name":"has_images","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Фильтр по наличию изображений.","title":"Has Images"},"description":"Фильтр по наличию изображений."},{"name":"has_videos","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Фильтр по наличию видео.","title":"Has Videos"},"description":"Фильтр по наличию видео."},{"name":"has_media","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Фильтр по наличию фото или видео: `true` – есть хотя бы одно из них, `false` – нет ни того, ни другого.","title":"Has Media"},"description":"Фильтр по наличию фото или видео: `true` – есть хотя бы одно из них, `false` – нет ни того, ни другого."},{"name":"has_rating","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Фильтр по наличию оценки: `true` – только с оценкой, `false` – только без оценки.","title":"Has Rating"},"description":"Фильтр по наличию оценки: `true` – только с оценкой, `false` – только без оценки."},{"name":"has_text","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Фильтр по наличию текста отзыва.","title":"Has Text"},"description":"Фильтр по наличию текста отзыва."},{"name":"has_reply","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Фильтр по наличию ответа организации.","title":"Has Reply"},"description":"Фильтр по наличию ответа организации."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"Поиск подстроки по тексту отзыва (регистронезависимо).","title":"Search"},"description":"Поиск подстроки по тексту отзыва (регистронезависимо)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Размер страницы (1–1000). По умолчанию 100.","default":100,"title":"Limit"},"description":"Размер страницы (1–1000). По умолчанию 100."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Смещение для пагинации.","default":0,"title":"Offset"},"description":"Смещение для пагинации."},{"name":"show_deleted","in":"query","required":false,"schema":{"type":"boolean","description":"Показывать отзывы, помеченные удалёнными на площадке.","default":false,"title":"Show Deleted"},"description":"Показывать отзывы, помеченные удалёнными на площадке."},{"name":"only_deleted","in":"query","required":false,"schema":{"type":"boolean","description":"Только удалённые отзывы (приоритет над `show_deleted`).","default":false,"title":"Only Deleted"},"description":"Только удалённые отзывы (приоритет над `show_deleted`)."},{"name":"show_hidden","in":"query","required":false,"schema":{"type":"boolean","description":"Показывать скрытые отзывы (с флагом `is_hidden`).","default":false,"title":"Show Hidden"},"description":"Показывать скрытые отзывы (с флагом `is_hidden`)."},{"name":"show_pinned","in":"query","required":false,"schema":{"type":"boolean","description":"Показывать закреплённые отзывы (с флагом `is_pinned`).","default":false,"title":"Show Pinned"},"description":"Показывать закреплённые отзывы (с флагом `is_pinned`)."},{"name":"split_pros_cons","in":"query","required":false,"schema":{"type":"boolean","description":"Разбирать слитый текст на `pros` / `cons`.","default":false,"title":"Split Pros Cons"},"description":"Разбирать слитый текст на `pros` / `cons`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewsPageV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/reviews/{review_id}":{"get":{"tags":["reviews"],"summary":"Получить один отзыв по идентификатору","description":"Один отзыв целиком – по идентификатору из списка.\n\nОтзыв должен принадлежать вашему объекту; чужой и несуществующий отвечают\nодинаково `404`, чтобы по ответу нельзя было проверять существование чужих\nзаписей.","operationId":"get_review_v3_v3_reviews__review_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"integer","description":"Encoded review ID","title":"Review Id"},"description":"Encoded review ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/ratings":{"get":{"tags":["reviews"],"summary":"Оценка объекта на площадках","description":"Рейтинг объекта на площадках. Оценка – звёзды, которые поставил пользователь.\nОтзыв – оценка с текстом или фото.\n\nПо каждой ссылке приходит последнее известное значение: оценка, число\nоценок и число отзывов **по данным площадки**.\n\nНеобходимо указать либо объект (`object_id`), либо папку (`folder_id`) –\nровно один из двух.\n\nСсылка, по которой замеров ещё не было, в ответе не появляется. Чтобы\nотслеживать динамику оценки, воспользуйтесь `GET /v3/ratings/history`.","operationId":"get_ratings_v3_v3_ratings_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Оценки по всей папке: все объекты папки и её подпапок. Взаимоисключим с `object_id` – ровно один из двух. Выключенные и удалённые объекты в состав не входят.","title":"Folder Id"},"description":"Оценки по всей папке: все объекты папки и её подпапок. Взаимоисключим с `object_id` – ровно один из двух. Выключенные и удалённые объекты в состав не входят."},{"name":"source_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"description":"Фильтр по площадкам: id из `GET /v3/sources`. Пусто – все площадки.","default":[],"title":"Source Ids"},"description":"Фильтр по площадкам: id из `GET /v3/sources`. Пусто – все площадки."},{"name":"object_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Идентификатор объекта. Взаимоисключим с `folder_id` – в запросе может быть только один из двух.","title":"Object Id"},"description":"Идентификатор объекта. Взаимоисключим с `folder_id` – в запросе может быть только один из двух."},{"name":"link_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"description":"Filter by link IDs.","default":[],"title":"Link Ids"},"description":"Filter by link IDs."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReturnAll_RatingV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/ratings/history":{"get":{"tags":["analytics"],"summary":"Как менялась оценка на площадках","description":"Ряд изменений оценки по каждой ссылке – свежее первым.\n\nНовое значение оценки записывается только в том случае, если оно\nизменилось.\n\nНеобходимо указать либо объект (`object_id`), либо папку (`folder_id`) –\nровно один из двух.","operationId":"get_ratings_history_v3_v3_ratings_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Оценки по всей папке: все объекты папки и её подпапок. Взаимоисключим с `object_id` – ровно один из двух. Выключенные и удалённые объекты в состав не входят.","title":"Folder Id"},"description":"Оценки по всей папке: все объекты папки и её подпапок. Взаимоисключим с `object_id` – ровно один из двух. Выключенные и удалённые объекты в состав не входят."},{"name":"source_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"description":"Фильтр по площадкам: id из `GET /v3/sources`. Пусто – все площадки.","default":[],"title":"Source Ids"},"description":"Фильтр по площадкам: id из `GET /v3/sources`. Пусто – все площадки."},{"name":"measured_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Нижняя граница по дате замера, включительно. Формат `YYYY-MM-DD`. Не передана – с самого начала наблюдений.","title":"Measured From"},"description":"Нижняя граница по дате замера, включительно. Формат `YYYY-MM-DD`. Не передана – с самого начала наблюдений."},{"name":"measured_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Верхняя граница по дате замера, включительно. Формат `YYYY-MM-DD`. Не передана – по сегодня.","title":"Measured To"},"description":"Верхняя граница по дате замера, включительно. Формат `YYYY-MM-DD`. Не передана – по сегодня."},{"name":"object_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Идентификатор объекта. Взаимоисключим с `folder_id` – в запросе может быть только один из двух.","title":"Object Id"},"description":"Идентификатор объекта. Взаимоисключим с `folder_id` – в запросе может быть только один из двух."},{"name":"link_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"description":"Filter by link IDs.","default":[],"title":"Link Ids"},"description":"Filter by link IDs."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReturnAll_RatingHistoryV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/objects":{"post":{"tags":["objects"],"summary":"Создать объект","description":"Создать объект – единицу бизнеса, по которой вы получаете отзывы,\nаналитику и (опционально) вебхуки.\n\nОбъект – основная единица адресации в API: `GET /v3/reviews`,\n`GET /v3/analytics` и подписки `POST /v3/webhooks` работают через\n`object_id`. Внутри объекта – ссылки: по одной на каждую площадку (Яндекс\nКарты, Google, 2ГИС, Островок и т.д.), которые сервис сам периодически\nопрашивает.\n\nСсылки можно передать сразу (`links`, до 200 штук) или не передавать –\nобъект создастся пустым, ссылки добавляются позже через\n`POST /v3/objects/{object_id}/links`. Площадка определяется по домену URL.\n\nОбъект занимает место в тарифе с момента создания – при исчерпании лимита\nответ `403`. `link_results` показывает итог по каждой ссылке отдельно:\nчасть ссылок может не добавиться, но сам объект при этом создаётся.","operationId":"create_object_v3_v3_objects_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectCreateV3"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectCreateResponseV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["objects"],"summary":"Список объектов","description":"Список объектов с пагинацией. Порядок – `id` по убыванию.","operationId":"list_objects_v3_v3_objects_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Размер страницы (1–1000). По умолчанию 100.","default":100,"title":"Limit"},"description":"Размер страницы (1–1000). По умолчанию 100."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Смещение для пагинации.","default":0,"title":"Offset"},"description":"Смещение для пагинации."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_ObjectV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["objects"],"summary":"Включить/выключить объекты","description":"Массово включить или выключить объекты – то же поле `is_active`, что и в\n`PUT /v3/objects/{object_id}`, применённое к набору за один вызов.\n\n**Недоступные объекты пропускаются.** Чужие, несуществующие и удалённые\n`object_id` пропускаются молча, остальные переключаются как обычно. Не нашлось ни одного – ответ с пустым\n`data`. Лимит объектов переключение не трогает: место в тарифе занимает\nсуществование объекта, а не его включённость.","operationId":"switch_objects_v3_v3_objects_put","security":[{"APIKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectsSwitchV3"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReturnAll_ObjectV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/objects/refresh":{"get":{"tags":["objects"],"summary":"Дополнительный сбор: состояние всех объектов","description":"Состояние дополнительного сбора по всем объектам аккаунта одним запросом – поля как у `GET /v3/objects/{object_id}/refresh`.","operationId":"list_object_refresh_v3_v3_objects_refresh_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReturnAll_ObjectRefreshV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v3/objects/{object_id}":{"get":{"tags":["objects"],"summary":"Получить объект","description":"Получить один объект целиком – с составом ссылок и статусом сбора по каждой.\n\nЗдесь же видно `is_active` – общий выключатель объекта. Он не влияет на\nдоступность самого объекта: выключенный всё равно возвращается этим\nметодом, но `GET /v3/reviews` и `GET /v3/analytics` по нему отвечают `404`.","operationId":"get_object_v3_v3_objects__object_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["objects"],"summary":"Обновить объект","description":"Обновить объект: название (`name`) и/или выключатель (`is_active`).\n\n**`is_active=false`** выключает объект: `GET /v3/reviews` и\n`GET /v3/analytics` по нему отвечают `404`, ссылки перестают собираться,\nсобытия вебхуков по нему не отправляются. Сам объект остаётся – виден в списке,\nпереименовывается, ссылки правятся и удаляются, `DELETE` работает.\n\n**Лимит объектов переключение не трогает**: место в тарифе занимает\nсуществование объекта, освобождает – удаление.","operationId":"update_object_v3_v3_objects__object_id__put","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectUpdateV3"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["objects"],"summary":"Удалить объект","description":"Удалить объект вместе со ссылками. Место в тарифе освобождается сразу.\n\nОтвет – идентификатор и название удалённого объекта.","operationId":"delete_object_v3_v3_objects__object_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectDeleteResponseV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/objects/{object_id}/refresh":{"get":{"tags":["objects"],"summary":"Дополнительный сбор: состояние объекта","description":"Можно ли сейчас запустить дополнительный сбор по объекту; если нельзя – почему и когда снова. Плюс итог сборов этих суток по каждой ссылке.","operationId":"get_object_refresh_v3_v3_objects__object_id__refresh_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectRefreshV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["objects"],"summary":"Дополнительный сбор по объекту","description":"Дополнительный сбор новых отзывов: сбор по ссылкам объекта вне расписания, раз в сутки.\n\nОтвет `202` – состояние сбора; сбор идёт в фоне. Новые отзывы появляются в\n`GET /v3/reviews` по мере того, как собираются ссылки; ход сбора – в\n`GET /v3/objects/{object_id}/refresh` (`is_running`, `links`).\n\n- **Раз в сутки на объект**: следующий сбор всех ссылок – через 23 ч 59 мин\n  после предыдущего (`next_available_at`).\n- **Один повтор**: ссылки, не собравшиеся в этот раз, можно пересобрать в те же\n  сутки – следующий `POST` возьмёт только их (`mode: retry`). Не собравшаяся и\n  при повторе ссылка ждёт следующих суток.\n- **Тариф**: «Полный». В пробном периоде – 5 сборов на аккаунт, повторы не считаются.\n\nОтказы: `402 refresh_requires_upgrade`, `402 refresh_trial_exhausted`,\n`409 refresh_in_progress`, `409 refresh_nothing_to_scrape`,\n`429 refresh_limited` (заголовок `Retry-After` – секунд до `next_available_at`).","operationId":"refresh_object_v3_v3_objects__object_id__refresh_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectRefreshV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/objects/{object_id}/links":{"post":{"tags":["links"],"summary":"Добавить ссылки","description":"Добавить ссылки в объект – до 200 за раз.\n\nПлощадка определяется по домену URL. Ответ содержит итог по каждой ссылке\nотдельно: успех с `link_id` или `error` – часть ссылок может не добавиться,\nостальные при этом добавляются. Сбор по новым ссылкам стартует сразу.","operationId":"add_links_v3_v3_objects__object_id__links_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LinkInputV3"},"title":"Links"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkLinksResponseV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["links"],"summary":"Список ссылок","description":"Все ссылки объекта. Метод отдаёт их целиком – страниц здесь нет.","operationId":"list_links_v3_v3_objects__object_id__links_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReturnAll_LinkV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/objects/{object_id}/links/{link_id}":{"put":{"tags":["links"],"summary":"Обновить ссылку","description":"Обновить ссылку объекта: своё название (`link_name`) и/или участие в\nсборе (`is_active`).","operationId":"update_link_v3_v3_objects__object_id__links__link_id__put","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"},{"name":"link_id","in":"path","required":true,"schema":{"type":"integer","description":"Encoded link ID","title":"Link Id"},"description":"Encoded link ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkUpdateV3"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["links"],"summary":"Удалить ссылку","description":"Убрать ссылку из объекта. Собранные по ней отзывы перестают отдаваться.","operationId":"remove_link_v3_v3_objects__object_id__links__link_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"},{"name":"link_id","in":"path","required":true,"schema":{"type":"integer","description":"Encoded link ID","title":"Link Id"},"description":"Encoded link ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkRemoveResponseV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/objects/{object_id}/hidden-reviews":{"post":{"tags":["hidden & pinned"],"summary":"Скрыть отзывы в объекте","description":"Скрыть отзывы в выдаче объекта. Отзывы остаются\nсобранными и в любой момент возвращаются обратно. Сам отзыв не меняется.","operationId":"hide_reviews_v3_v3_objects__object_id__hidden_reviews_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewIdsRequestV3"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HiddenReviewsMutationResponseV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["hidden & pinned"],"summary":"Вернуть отзывы из скрытых","description":"Вернуть скрытые отзывы в выдачу объекта.","operationId":"unhide_reviews_v3_v3_objects__object_id__hidden_reviews_delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewIdsRequestV3"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HiddenReviewsMutationResponseV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["hidden & pinned"],"summary":"Список скрытых отзывов объекта","description":"Что именно скрыто в объекте – с теми же фильтрами, что у обычной выдачи.","operationId":"list_hidden_reviews_v3_v3_objects__object_id__hidden_reviews_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"},{"name":"link_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"description":"Filter by link IDs.","default":[],"title":"Link Ids"},"description":"Filter by link IDs."},{"name":"source_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"description":"Фильтр по площадкам.","default":[],"title":"Source Ids"},"description":"Фильтр по площадкам."},{"name":"sort_by","in":"query","required":false,"schema":{"enum":["review_date","rating","reply_date"],"type":"string","description":"Поле сортировки.","default":"review_date","title":"Sort By"},"description":"Поле сортировки."},{"name":"sort_order","in":"query","required":false,"schema":{"enum":["desc","asc"],"type":"string","description":"Направление сортировки.","default":"desc","title":"Sort Order"},"description":"Направление сортировки."},{"name":"min_rating","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":5,"minimum":1},{"type":"null"}],"description":"Минимальная оценка включительно.","title":"Min Rating"},"description":"Минимальная оценка включительно."},{"name":"max_rating","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":5,"minimum":1},{"type":"null"}],"description":"Максимальная оценка включительно.","title":"Max Rating"},"description":"Максимальная оценка включительно."},{"name":"published_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Нижняя граница по дате публикации, включительно.","title":"Published From"},"description":"Нижняя граница по дате публикации, включительно."},{"name":"published_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Верхняя граница по дате публикации, включительно.","title":"Published To"},"description":"Верхняя граница по дате публикации, включительно."},{"name":"has_images","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Фильтр по наличию изображений.","title":"Has Images"},"description":"Фильтр по наличию изображений."},{"name":"has_text","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Фильтр по наличию текста.","title":"Has Text"},"description":"Фильтр по наличию текста."},{"name":"has_reply","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Фильтр по наличию ответа организации.","title":"Has Reply"},"description":"Фильтр по наличию ответа организации."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"Поиск подстроки по тексту отзыва.","title":"Search"},"description":"Поиск подстроки по тексту отзыва."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Размер страницы (1–1000).","default":100,"title":"Limit"},"description":"Размер страницы (1–1000)."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Смещение для пагинации.","default":0,"title":"Offset"},"description":"Смещение для пагинации."},{"name":"show_deleted","in":"query","required":false,"schema":{"type":"boolean","description":"Показывать отзывы, помеченные удалёнными на площадке.","default":false,"title":"Show Deleted"},"description":"Показывать отзывы, помеченные удалёнными на площадке."},{"name":"only_deleted","in":"query","required":false,"schema":{"type":"boolean","description":"Только удалённые отзывы.","default":false,"title":"Only Deleted"},"description":"Только удалённые отзывы."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_ReviewV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/objects/{object_id}/pinned-reviews":{"put":{"tags":["hidden & pinned"],"summary":"Задать порядок закреплённых отзывов","description":"Задать закрепление целиком: список заменяет прежний, порядок – как прислали.","operationId":"set_pinned_reviews_v3_v3_objects__object_id__pinned_reviews_put","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PinnedOrderRequestV3"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReturnAll_ReviewV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["hidden & pinned"],"summary":"Закрепить отзывы (в конец)","description":"Добавить отзывы к закреплённым – в конец текущего порядка.","operationId":"add_pinned_reviews_v3_v3_objects__object_id__pinned_reviews_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewIdsRequestV3"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReturnAll_ReviewV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["hidden & pinned"],"summary":"Открепить отзывы","description":"Открепить перечисленные отзывы; остальные сохраняют свой порядок.","operationId":"remove_pinned_reviews_v3_v3_objects__object_id__pinned_reviews_delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewIdsRequestV3"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReturnAll_ReviewV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["hidden & pinned"],"summary":"Закреплённые отзывы объекта","description":"Что закреплено в объекте и в каком порядке.","operationId":"list_pinned_reviews_v3_v3_objects__object_id__pinned_reviews_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор объекта","title":"Object Id"},"description":"Идентификатор объекта"},{"name":"link_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"description":"Filter by link IDs.","default":[],"title":"Link Ids"},"description":"Filter by link IDs."},{"name":"source_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"description":"Фильтр по площадкам.","default":[],"title":"Source Ids"},"description":"Фильтр по площадкам."},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"enum":["review_date","rating","reply_date"],"type":"string"},{"type":"null"}],"description":"Поле сортировки. Не передано – порядок закрепления.","title":"Sort By"},"description":"Поле сортировки. Не передано – порядок закрепления."},{"name":"sort_order","in":"query","required":false,"schema":{"enum":["desc","asc"],"type":"string","description":"Направление сортировки.","default":"desc","title":"Sort Order"},"description":"Направление сортировки."},{"name":"min_rating","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":5,"minimum":1},{"type":"null"}],"description":"Минимальная оценка включительно.","title":"Min Rating"},"description":"Минимальная оценка включительно."},{"name":"max_rating","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":5,"minimum":1},{"type":"null"}],"description":"Максимальная оценка включительно.","title":"Max Rating"},"description":"Максимальная оценка включительно."},{"name":"published_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Нижняя граница по дате публикации, включительно.","title":"Published From"},"description":"Нижняя граница по дате публикации, включительно."},{"name":"published_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Верхняя граница по дате публикации, включительно.","title":"Published To"},"description":"Верхняя граница по дате публикации, включительно."},{"name":"has_images","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Фильтр по наличию изображений.","title":"Has Images"},"description":"Фильтр по наличию изображений."},{"name":"has_text","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Фильтр по наличию текста.","title":"Has Text"},"description":"Фильтр по наличию текста."},{"name":"has_reply","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Фильтр по наличию ответа организации.","title":"Has Reply"},"description":"Фильтр по наличию ответа организации."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"Поиск подстроки по тексту отзыва.","title":"Search"},"description":"Поиск подстроки по тексту отзыва."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Размер страницы (1–1000).","default":100,"title":"Limit"},"description":"Размер страницы (1–1000)."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Смещение для пагинации.","default":0,"title":"Offset"},"description":"Смещение для пагинации."},{"name":"show_deleted","in":"query","required":false,"schema":{"type":"boolean","description":"Показывать отзывы, помеченные удалёнными на площадке.","default":false,"title":"Show Deleted"},"description":"Показывать отзывы, помеченные удалёнными на площадке."},{"name":"only_deleted","in":"query","required":false,"schema":{"type":"boolean","description":"Только удалённые отзывы.","default":false,"title":"Only Deleted"},"description":"Только удалённые отзывы."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_ReviewV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/folders":{"post":{"tags":["folders"],"summary":"Создать папку","description":"Создать папку и, если нужно, сразу положить в неё объекты.\n\n`object_ids` – состав новой папки, присылается\nцеликом. Недоступные идентификаторы не приводят к ошибке и возвращаются в\n`ignored_object_ids`.","operationId":"create_folder_v3_v3_folders_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderCreateV3"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderWriteV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"tags":["folders"],"summary":"Все папки с подпапками и объектами","description":"Дерево папок целиком: папки верхнего уровня в `data`, вложенные – в\n`subfolders` каждой. Состав объектов приходит вместе с деревом.","operationId":"list_folders_v3_v3_folders_get","security":[{"APIKeyHeader":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReturnAll_FolderV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/folders/{folder_id}":{"get":{"tags":["folders"],"summary":"Папка со всем, что в ней лежит","description":"Одна папка: её объекты и её подпапки со своим составом.","operationId":"get_folder_v3_v3_folders__folder_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор папки.","title":"Folder Id"},"description":"Идентификатор папки."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["folders"],"summary":"Изменить папку","description":"Изменить название, родителя или состав папки.\n\nПереданный `object_ids` заменяет состав целиком; не переданный – оставляет\nкак был.","operationId":"update_folder_v3_v3_folders__folder_id__patch","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор папки.","title":"Folder Id"},"description":"Идентификатор папки."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderUpdateV3"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderWriteV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["folders"],"summary":"Удалить папку","description":"Удалить папку. Объекты в ней не удаляются.","operationId":"delete_folder_v3_v3_folders__folder_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор папки.","title":"Folder Id"},"description":"Идентификатор папки."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderDeleteResponseV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/folders/{folder_id}/refresh":{"get":{"tags":["folders"],"summary":"Дополнительный сбор по папке: состояние","description":"Состояние дополнительного сбора по каждому объекту папки и её подпапок – поля как у\n`GET /v3/objects/{object_id}/refresh`.","operationId":"get_folder_refresh_v3_v3_folders__folder_id__refresh_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор папки.","title":"Folder Id"},"description":"Идентификатор папки."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReturnAll_ObjectRefreshV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["folders"],"summary":"Дополнительный сбор по папке","description":"Дополнительный сбор новых отзывов по всем объектам папки и её подпапок.\n\nКаждый объект – по правилам `POST /v3/objects/{object_id}/refresh`: раз в\nсутки, один повтор площадок, с которых собрать не удалось, тариф «Полный». Запускается\nвсё, что можно прямо сейчас, остальные объекты пропускаются без ошибки.\nВ пробном периоде каждый запущенный объект тратит один из 5 сборов;\nесли осталось меньше, чем объектов, обновятся первые по порядку.\n\nОтвет `202` – состояние каждого объекта и `started_object_ids`. Если не\nзапущен ни один объект – отказ с причиной, как у объекта:\n`402 refresh_requires_upgrade`, `402 refresh_trial_exhausted`,\n`409 refresh_in_progress`, `409 refresh_nothing_to_scrape`,\n`429 refresh_limited`.","operationId":"refresh_folder_v3_v3_folders__folder_id__refresh_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"integer","description":"Идентификатор папки.","title":"Folder Id"},"description":"Идентификатор папки."}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderRefreshV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/analytics":{"get":{"tags":["analytics"],"summary":"Сводная аналитика объекта, папки или аккаунта","description":"Сводная аналитика по отзывам за период – по объекту или по папке целиком.\n\nАдресат – `object_id`, `folder_id` или **ничего**: тогда считается по всем\nвключённым объектам аккаунта. Объект и папка сразу – `400 object_and_folder_conflict`.\n\nВ папочном режиме считается по всем объектам папки и её подпапок; ссылка,\nлежащая в нескольких объектах папки, учитывается один раз. `by_source`\nсхлопывает одну площадку разных объектов в одну строку с суммой.\n`meta.object_ids` показывает фактический состав расчёта.","operationId":"get_analytics_v3_v3_analytics_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Папка целиком: все её объекты и объекты подпапок. Взаимоисключима с `object_id`.","title":"Folder Id"},"description":"Папка целиком: все её объекты и объекты подпапок. Взаимоисключима с `object_id`."},{"name":"object_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Идентификатор объекта. Взаимоисключим с `folder_id`.","title":"Object Id"},"description":"Идентификатор объекта. Взаимоисключим с `folder_id`."},{"name":"source_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"description":"Фильтр по площадкам (id из `GET /v3/sources`). Пусто – все площадки объекта.","default":[],"title":"Source Ids"},"description":"Фильтр по площадкам (id из `GET /v3/sources`). Пусто – все площадки объекта."},{"name":"published_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Начало периода по дате публикации, включительно (`YYYY-MM-DD`). По умолчанию `2000-01-01`.","title":"Published From"},"description":"Начало периода по дате публикации, включительно (`YYYY-MM-DD`). По умолчанию `2000-01-01`."},{"name":"published_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Конец периода по дате публикации, включительно (`YYYY-MM-DD`). По умолчанию сегодня.","title":"Published To"},"description":"Конец периода по дате публикации, включительно (`YYYY-MM-DD`). По умолчанию сегодня."},{"name":"min_rating","in":"query","required":false,"schema":{"type":"number","maximum":5,"minimum":0,"description":"Нижняя граница оценки (1–5), включительно. `0` – без нижней границы и **вместе с отзывами без оценки**.","default":1,"title":"Min Rating"},"description":"Нижняя граница оценки (1–5), включительно. `0` – без нижней границы и **вместе с отзывами без оценки**."},{"name":"max_rating","in":"query","required":false,"schema":{"type":"number","maximum":5,"minimum":1,"description":"Верхняя граница оценки (1–5), включительно.","default":5,"title":"Max Rating"},"description":"Верхняя граница оценки (1–5), включительно."},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"description":"Часовой пояс (IANA: `Europe/Moscow`, `Asia/Vladivostok`). Даты периода и дни ряда – дни этого пояса, а не UTC. Неизвестный пояс – Москва; без параметра – UTC.","title":"Tz"},"description":"Часовой пояс (IANA: `Europe/Moscow`, `Asia/Vladivostok`). Даты периода и дни ряда – дни этого пояса, а не UTC. Неизвестный пояс – Москва; без параметра – UTC."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsResponseV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/analytics/timeseries":{"get":{"tags":["analytics"],"summary":"Динамика отзывов по периодам","description":"Динамика отзывов по интервалам – по объекту или по папке целиком.\n\nРяды приходят в `series`, точки каждого ряда – в `points`. `source_id = 0`\nозначает агрегированный ряд по всем площадкам.","operationId":"get_timeseries_v3_v3_analytics_timeseries_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Папка целиком: все её объекты и объекты подпапок. Взаимоисключима с `object_id`.","title":"Folder Id"},"description":"Папка целиком: все её объекты и объекты подпапок. Взаимоисключима с `object_id`."},{"name":"object_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Идентификатор объекта. Взаимоисключим с `folder_id`.","title":"Object Id"},"description":"Идентификатор объекта. Взаимоисключим с `folder_id`."},{"name":"source_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"description":"Площадки для разбивки; `0` – агрегированный ряд. По умолчанию `[0]`.","default":[],"title":"Source Ids"},"description":"Площадки для разбивки; `0` – агрегированный ряд. По умолчанию `[0]`."},{"name":"granularity","in":"query","required":false,"schema":{"enum":["day","week","month"],"type":"string","description":"Размер интервала: `day` / `week` / `month`.","default":"month","title":"Granularity"},"description":"Размер интервала: `day` / `week` / `month`."},{"name":"published_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Начало периода по дате публикации, включительно. По умолчанию 90 дней назад.","title":"Published From"},"description":"Начало периода по дате публикации, включительно. По умолчанию 90 дней назад."},{"name":"published_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Конец периода по дате публикации, включительно. По умолчанию сегодня.","title":"Published To"},"description":"Конец периода по дате публикации, включительно. По умолчанию сегодня."},{"name":"min_rating","in":"query","required":false,"schema":{"type":"number","maximum":5,"minimum":0,"description":"Нижняя граница оценки (1–5). `0` – без нижней границы и вместе с отзывами без оценки.","default":1,"title":"Min Rating"},"description":"Нижняя граница оценки (1–5). `0` – без нижней границы и вместе с отзывами без оценки."},{"name":"max_rating","in":"query","required":false,"schema":{"type":"number","maximum":5,"minimum":1,"description":"Верхняя граница оценки (1–5).","default":5,"title":"Max Rating"},"description":"Верхняя граница оценки (1–5)."},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"description":"Часовой пояс (IANA: `Europe/Moscow`, `Asia/Vladivostok`). Даты периода и дни ряда – дни этого пояса, а не UTC. Неизвестный пояс – Москва; без параметра – UTC.","title":"Tz"},"description":"Часовой пояс (IANA: `Europe/Moscow`, `Asia/Vladivostok`). Даты периода и дни ряда – дни этого пояса, а не UTC. Неизвестный пояс – Москва; без параметра – UTC."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeseriesResponseV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/sources":{"get":{"tags":["sources"],"summary":"Список площадок","description":"Список площадок, с которых Rewio собирает отзывы – Яндекс Карты,\nGoogle, 2ГИС и ещё почти три десятка сервисов.\n\nОтсюда берут `id` площадки, чтобы\nиспользовать его в фильтрах у отзывов и аналитики. `supports_replies`\nговорит, бывают ли на площадке ответы организации вообще, а\n`can_publish_reply` – умеем ли мы их там публиковать за вас,\n`can_file_complaint` – подавать жалобы на отзывы.","operationId":"list_sources_v3_v3_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReturnAll_SourceV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v3/webhooks":{"get":{"tags":["webhooks"],"summary":"Список вебхуков","description":"Все ваши подписки со статусом и счётчиком неудач.","operationId":"list_webhooks_v3_v3_webhooks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReturnAll_WebhookV3_"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyHeader":[]}]},"post":{"tags":["webhooks"],"summary":"Создать вебхук","description":"Подписаться на события: новые отзывы, новые ответы, конец цикла сбора.\n\n`object_ids` сужает подписку до перечисленных объектов; без него события\nприходят по всем вашим. Подпись доставки проверяется секретом аккаунта –\nон один на все ваши подписки, см. `GET /v3/webhooks/secret`.","operationId":"create_webhook_v3_v3_webhooks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateV3"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v3/webhooks/secret":{"get":{"tags":["webhooks"],"summary":"Секрет подписи аккаунта","description":"Секрет, которым подписаны все доставки аккаунта. Первый вызов его создаёт.\n\nТребует ключ со scope `full`: секрет проверяет\nподпись доставок, ключу «только чтение» он не полагается.","operationId":"get_account_secret_v3_v3_webhooks_secret_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountSecretResponse"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v3/webhooks/rotate-secret":{"post":{"tags":["webhooks"],"summary":"Перевыпустить секрет аккаунта","description":"Выпустить новый секрет. Старый действует ещё 24 часа: за это время обновите\nпроверку подписи на своей стороне.","operationId":"rotate_account_secret_v3_v3_webhooks_rotate_secret_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountSecretResponse"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v3/webhooks/{webhook_id}":{"patch":{"tags":["webhooks"],"summary":"Изменить вебхук","description":"Изменить подписку: адрес, состав объектов, события, окно, фильтры,\nвключённость. Передавайте только то, что меняется.","operationId":"update_webhook_v3_v3_webhooks__webhook_id__patch","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"integer","title":"Webhook Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdateV3"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["webhooks"],"summary":"Удалить вебхук","description":"Удалить подписку. Доставки по ней прекращаются сразу.","operationId":"delete_webhook_v3_v3_webhooks__webhook_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"integer","title":"Webhook Id"}}],"responses":{"204":{"description":"Successful Response"},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/webhooks/{webhook_id}/test":{"post":{"tags":["webhooks"],"summary":"Тестовая доставка","description":"Отправить на ваш адрес тестовое событие – проверить доступность и подпись.","operationId":"test_webhook_v3_v3_webhooks__webhook_id__test_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"integer","title":"Webhook Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestSubscriptionResponse"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/reviews/{review_id}/reply":{"get":{"tags":["replies"],"summary":"Состояние вашего ответа","description":"Состояние вашего ответа на карточке.\n\n`status`: `null` – отправлен, площадке ещё не передан; `pending` – площадка\nприняла, на карточке ещё не видели; `published` – ваш текст стоит на\nкарточке; `deleted` – вашего ответа на карточке нет; `failed` – не\nопубликован. `submitted_at` – когда вы отправили текст, `published_at` –\nкогда мы увидели его на карточке, `error` – почему ответ не опубликован или\nпропал.\n\nПосле того как площадка приняла ответ, мы сами читаем этот отзыв на ней:\nчерез 15 с, 30 с, 1, 2, 3, 5, 15, 30 минут, 1, 2 и 4 часа. Увидели ваш\nтекст – `published`; не увидели за 4 часа – `failed` с кодом `not_visible`.\nСбор площадки обновляет статус так же. Метод к площадке не обращается –\nопрашивайте его сколько нужно.\n\nОтвет, поставленный не через нас, здесь не показывается – он виден как\n`reply_text` самого отзыва в `GET /v3/reviews`; заменить или удалить его можно\nтеми же `PUT` и `DELETE`. Метод доступен на любом тарифе.","operationId":"get_reply_v3_v3_reviews__review_id__reply_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"integer","description":"Encoded review ID","title":"Review Id"},"description":"Encoded review ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplyStateV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["replies"],"summary":"Опубликовать или заменить ответ","description":"Опубликовать ответ на отзыв или заменить уже стоящий.\n\nОтвет ставится в очередь и публикуется от вашего имени на площадке. Итог\nсмотрите в `GET /v3/reviews/{review_id}/reply`: публикация асинхронная,\nи `202` здесь означает «приняли в работу», а не «уже на карточке».\n\nОтветить можно только на **нативный** отзыв площадки. На отзыв, который\nплощадка лишь показывает у себя, но собран с другой (`provider` ≠ слаг\nплощадки: `tbank`, `booking`, `tripadvisor`, …), придёт `409\nreply_not_replyable`.\n\nЗаменить можно любой ответ организации на отзыве, в том числе\nпоставленный не через Rewio. Где площадка не даёт переписать ответ\n(2ГИС), стоящий ответ снимается и на его место ставится новый.","operationId":"put_reply_v3_v3_reviews__review_id__reply_put","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"integer","description":"Encoded review ID","title":"Review Id"},"description":"Encoded review ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplyWriteV3"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplyV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["replies"],"summary":"Удалить ответ","description":"Удалить ответ организации с площадки – ваш или поставленный не через Rewio.\n\nУдаление тоже асинхронное.","operationId":"delete_reply_v3_v3_reviews__review_id__reply_delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"integer","description":"Encoded review ID","title":"Review Id"},"description":"Encoded review ID"}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplyV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/reviews/{review_id}/complaints":{"get":{"tags":["complaints"],"summary":"Жалобы на отзыв и форма подачи","description":"Всё, что нужно, чтобы пожаловаться на отзыв.\n\n`form` – что передать в `POST` на площадке этого отзыва:\n`form.category = required` – передайте `category`, код из `form.categories`\n(там же `label` и `description` – что категория значит), `none` – не\nпередавайте; `form.text` – `required`, `optional` или `none`. Сейчас:\nЯндекс – только текст, 2ГИС – категория и текст, Google – только категория.\n\n`data` – жалобы на этот отзыв, новые сверху: ваши (`origin = rewio`) и\nподанные в кабинете площадки (`origin = platform`). `can_file` – можно ли\nподать сейчас; если нет – `reason_code`, `reason` и, для паузы, `retry_at`.\n\nПовторно: на Яндексе – нельзя, жалоба на отзыв одна; в 2ГИС – когда\nпрежняя рассмотрена; в Google – не чаще раза в трое суток. Жалобы есть\nтолько на карточках, где у вас подключены ответы.","operationId":"get_review_complaints_v3_v3_reviews__review_id__complaints_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"integer","description":"Encoded review ID","title":"Review Id"},"description":"Encoded review ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewComplaintsV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["complaints"],"summary":"Пожаловаться на отзыв","description":"Подать жалобу по форме площадки из `GET` этого же адреса.\n\n`category` – код из `form.categories`, если `form.category = required`;\n`text` – по `form.text`. Подача асинхронная – `202`, жалоба приходит со\n`status: null`; что с ней дальше – в `GET` этого адреса или в\n`GET /v3/complaints`. Жалобы входят в тариф «Полный»; в пробном периоде –\n3 на площадку.\n\nОтказы: `409 complaint_already_filed` / `complaint_pending_review` /\n`complaint_cooldown` (с заголовком `Retry-After`) / `complaint_in_progress`,\n`402 complaint_requires_upgrade` / `complaint_trial_quota_exhausted`,\n`403 complaint_access_missing` / `complaint_card_not_yours`,\n`409 complaint_not_supported` / `complaint_not_replyable`,\n`422 complaint_category_invalid` / `complaint_text_required` /\n`complaint_text_too_long` / `complaint_text_invalid`,\n`503 complaint_source_paused`.","operationId":"post_review_complaint_v3_v3_reviews__review_id__complaints_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"integer","description":"Encoded review ID","title":"Review Id"},"description":"Encoded review ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplaintWriteV3"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplaintV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/support/message":{"post":{"tags":["support"],"summary":"Написать в поддержку","description":"Отправить сообщение в поддержку от вашего аккаунта.","operationId":"send_support_message_v3_v3_support_message_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportMessage"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportAccepted"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v3/reviews/{review_id}/skip":{"put":{"tags":["replies"],"summary":"Пропустить отзыв","description":"Отметить, что отвечать на отзыв не будете: он уходит из `reply_state=unanswered`\nв `reply_state=skipped` и получает `is_skipped: true`.\n\nНужен тариф с ответами («Полный», пробный), иначе `402 reply_requires_upgrade`.\n\n`204` – отметка поставлена; `200 {\"is_skipped\": true}` – она уже стояла.\nПовтор – не ошибка.","operationId":"skip_review_v3_v3_reviews__review_id__skip_put","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"integer","description":"Encoded review ID","title":"Review Id"},"description":"Encoded review ID"}],"responses":{"204":{"description":"Successful Response"},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"200":{"description":"Отметка уже стояла: `{\"is_skipped\": true}`."}}},"delete":{"tags":["replies"],"summary":"Вернуть пропущенный отзыв","description":"Снять отметку «Пропустить»: отзыв возвращается в `reply_state=unanswered`.\n\nОтметки нет – тоже `204`. Тариф – как у «Пропустить».","operationId":"unskip_review_v3_v3_reviews__review_id__skip_delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"integer","description":"Encoded review ID","title":"Review Id"},"description":"Encoded review ID"}],"responses":{"204":{"description":"Successful Response"},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v3/complaints":{"get":{"tags":["complaints"],"summary":"Ваши жалобы","description":"Жалобы, поданные через Rewio на отзывы ваших объектов, новые сверху,\nвместе с отзывами. `object_id` – только по одному объекту.\n\nЖалобы, найденные в кабинете площадки, здесь не показываются – они видны\nв `GET /v3/reviews/{review_id}/complaints` у своего отзыва.","operationId":"get_complaints_v3_v3_complaints_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"array","items":{"enum":["pending","accepted","rejected","failed"],"type":"string"},"description":"`pending` – на рассмотрении, в том числе ещё отправляемые (`status: null`); `accepted` – отзыв удалён; `rejected` – отзыв остался; `failed` – не поданы. Можно несколько: `status=rejected&status=failed`.","default":["pending"],"title":"Status"},"description":"`pending` – на рассмотрении, в том числе ещё отправляемые (`status: null`); `accepted` – отзыв удалён; `rejected` – отзыв остался; `failed` – не поданы. Можно несколько: `status=rejected&status=failed`."},{"name":"source_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"description":"Фильтр по площадкам: id из `GET /v3/sources`.","default":[],"title":"Source Ids"},"description":"Фильтр по площадкам: id из `GET /v3/sources`."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Размер страницы (1–100).","default":20,"title":"Limit"},"description":"Размер страницы (1–100)."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Смещение.","default":0,"title":"Offset"},"description":"Смещение."},{"name":"object_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Идентификатор объекта. Взаимоисключим с `folder_id` – в запросе может быть только один из двух.","title":"Object Id"},"description":"Идентификатор объекта. Взаимоисключим с `folder_id` – в запросе может быть только один из двух."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplaintsPageV3"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"schemas":{"AccessInfoV3":{"properties":{"reason":{"type":"string","title":"Reason","description":"Почему выдача ограничена. `trial` – пробный доступ, `manual` – ограничение, согласованное по вашему договору."},"limit_per_link":{"type":"integer","title":"Limit Per Link","description":"Сколько последних отзывов показывается по каждой ссылке (площадке объекта)."},"hidden_total":{"type":"integer","title":"Hidden Total","description":"Сколько отзывов уже собрано сверх показанных. Считается по всему архиву и не зависит от фильтров запроса."},"message":{"type":"string","title":"Message","description":"Готовая формулировка для показа человеку."}},"type":"object","required":["reason","limit_per_link","hidden_total","message"],"title":"AccessInfoV3","description":"Выдача ограничена тарифом – показано не всё."},"AccountSecretResponse":{"properties":{"secret":{"type":"string","title":"Secret"},"rotated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Rotated At"}},"type":"object","required":["secret"],"title":"AccountSecretResponse","description":"Account-level webhook signing secret. Returned by `GET\n/webhooks/secret` (always) and `POST /webhooks/rotate-secret`.","examples":[{"secret":"whsec_..."}],"example":{"secret":"whsec_..."}},"AnalyticsMetaV3":{"properties":{"object_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Object Id","description":"Объект, по которому считали. `null` в папочном режиме."},"folder_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Folder Id","description":"Папка, по которой считали. `null` в объектном режиме."},"object_ids":{"items":{"type":"integer"},"type":"array","title":"Object Ids","description":"Объекты, вошедшие в расчёт. В объектном режиме – один."},"published_from":{"type":"string","format":"date","title":"Published From","description":"Фактически применённое начало периода по дате публикации, включительно."},"published_to":{"type":"string","format":"date","title":"Published To","description":"Фактически применённый конец периода, включительно."},"source_ids":{"items":{"type":"integer"},"type":"array","title":"Source Ids","description":"Фактически применённый фильтр по площадкам. Пусто – все площадки объекта."},"generated_at":{"type":"string","format":"date-time","title":"Generated At","description":"Момент расчёта данных (UTC, ISO 8601)."}},"type":"object","required":["object_ids","published_from","published_to","source_ids","generated_at"],"title":"AnalyticsMetaV3","description":"Что именно посчитано – фактически применённые адресат и фильтры."},"AnalyticsResponseV3":{"properties":{"meta":{"$ref":"#/components/schemas/AnalyticsMetaV3"},"summary":{"$ref":"#/components/schemas/AnalyticsSummaryV3"},"by_source":{"items":{"$ref":"#/components/schemas/BySourceItemV3"},"type":"array","title":"By Source"},"access":{"anyOf":[{"$ref":"#/components/schemas/AccessInfoV3"},{"type":"null"}],"description":"Ограничение выдачи, если показали не всё."}},"type":"object","required":["meta","summary","by_source"],"title":"AnalyticsResponseV3","description":"Сводная аналитика объекта или папки."},"AnalyticsSummaryV3":{"properties":{"review_count":{"type":"integer","title":"Review Count","description":"Всего отзывов за период с учётом фильтров."},"average_rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Rating","description":"Средняя оценка по шкале 1–5, округлённая до сотых. `null`, если отзывов нет."},"reviews_with_text":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews With Text","description":"Сколько из них с текстом."},"reviews_with_images":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews With Images","description":"Сколько из них с изображениями."},"rating_distribution":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Rating Distribution","description":"Распределение отзывов по оценкам."},"reply":{"anyOf":[{"$ref":"#/components/schemas/ReplyStatsV3"},{"type":"null"}],"description":"Сводка по ответам организации."}},"type":"object","required":["review_count"],"title":"AnalyticsSummaryV3","description":"Сводка за период."},"BulkLinksResponseV3":{"properties":{"object_id":{"type":"integer","title":"Object Id","description":"Объект, в который добавлялись ссылки."},"link_results":{"items":{"$ref":"#/components/schemas/LinkResultV3"},"type":"array","title":"Link Results","description":"Итог по каждой переданной ссылке."}},"type":"object","required":["object_id","link_results"],"title":"BulkLinksResponseV3","description":"Итог массового добавления ссылок в объект."},"BySourceItemV3":{"properties":{"source_id":{"type":"integer","title":"Source Id","description":"Идентификатор площадки (см. `GET /v3/sources`)."},"source_name":{"type":"string","title":"Source Name","description":"Название площадки для показа человеку."},"review_count":{"type":"integer","title":"Review Count","description":"Число отзывов с этой площадки за период."},"average_rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Rating","description":"Средняя оценка по этой площадке, шкала 1–5."},"reviews_with_reply":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews With Reply","description":"Сколько из них с ответом организации."},"reviews_with_text":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews With Text","description":"Сколько из них с текстом."},"reviews_with_images":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews With Images","description":"Сколько из них с изображениями."},"rating_distribution":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Rating Distribution","description":"Распределение отзывов по оценкам."},"reply_distribution":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Reply Distribution","description":"Распределение отвеченных отзывов по оценкам."},"latest_review_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Latest Review Date","description":"Дата самого свежего отзыва с этой площадки за период."}},"type":"object","required":["source_id","source_name","review_count"],"title":"BySourceItemV3","description":"Та же сводка в разрезе одной площадки."},"CollectingInfoV3":{"properties":{"link_count":{"type":"integer","title":"Link Count","description":"Сколько площадок (ссылок) участвует в выдаче."},"links_collecting":{"type":"integer","title":"Links Collecting","description":"По скольким из них первый сбор идёт прямо сейчас или стоит в очереди. Повторите запрос через несколько десятков секунд."},"links_failed":{"type":"integer","title":"Links Failed","description":"По скольким из них первый сбор не удался. Состояние каждой площадки – в `scrape_status` / `scrape_error` объекта."},"message":{"type":"string","title":"Message","description":"Готовая формулировка. Для своего интерфейса стройте текст по числам выше."}},"type":"object","required":["link_count","links_collecting","links_failed","message"],"title":"CollectingInfoV3","description":"Первый сбор ещё идёт – поэтому отзывов может не быть.\n\nКлюч приходит только до первого успешного сбора: дальше пустая страница\nзначит «отзывов нет»."},"ComplaintBriefV3":{"properties":{"status":{"anyOf":[{"type":"string","enum":["pending","accepted","rejected","failed"]},{"type":"null"}],"title":"Status","description":"`null` – отправляется на площадку; `pending` – на рассмотрении; `accepted` – отзыв удалён; `rejected` – отзыв остался. Подробно – `GET /v3/reviews/{review_id}/complaints`."},"filed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Filed At","description":"Когда жалоба подана (UTC)."},"is_ours":{"type":"boolean","title":"Is Ours","description":"`true` – подана через Rewio; `false` – найдена на площадке."}},"type":"object","required":["is_ours"],"title":"ComplaintBriefV3","description":"Последняя жалоба на отзыв – ваша или найденная на площадке."},"ComplaintCategoryV3":{"properties":{"code":{"type":"string","title":"Code","description":"Код, который передаётся в `category`."},"label":{"type":"string","title":"Label","description":"Как категорию называет площадка."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Что она значит."}},"type":"object","required":["code","label"],"title":"ComplaintCategoryV3","description":"Категория жалобы – словами площадки."},"ComplaintErrorV3":{"properties":{"code":{"type":"string","title":"Code","description":"Машинный код: `complaint_already_filed` – на отзыв уже подана жалоба (Яндекс принимает одну); `complaint_requires_upgrade`, `complaint_trial_quota_exhausted` – тариф; `complaint_access_missing`, `complaint_access_revoked`, `complaint_card_not_yours` – карточка не подключена; `complaint_not_replyable` – отзыв удалён или пришёл с другой площадки; `complaint_target_unresolved` – отзыв не нашли на площадке; `complaint_not_supported` – на площадке жалобы не подаются; `complaint_source_paused` – подача на площадке приостановлена; `complaint_rejected_by_platform` – площадка не приняла жалобу; `complaint_session_expired`, `complaint_rate_limited`, `complaint_transport_failed` – не удалось за сутки."},"message":{"type":"string","title":"Message","description":"Пояснение для человека.","default":""}},"type":"object","required":["code"],"title":"ComplaintErrorV3","description":"Почему жалоба не подана."},"ComplaintFeedItemV3":{"properties":{"complaint":{"$ref":"#/components/schemas/ComplaintV3","description":"Жалоба."},"review":{"$ref":"#/components/schemas/ReviewV3","description":"Отзыв – как в `GET /v3/reviews`. У принятой жалобы он уже удалён с площадки."}},"type":"object","required":["complaint","review"],"title":"ComplaintFeedItemV3","description":"Жалоба вместе с отзывом – строка раздела «Жалобы»."},"ComplaintFormV3":{"properties":{"category":{"type":"string","enum":["required","none"],"title":"Category","description":"`required` – передайте `category`, код из `categories`; `none` – категорий нет, не передавайте."},"categories":{"items":{"$ref":"#/components/schemas/ComplaintCategoryV3"},"type":"array","title":"Categories","description":"Категории площадки. Пусто при `category = none`."},"text":{"type":"string","enum":["required","optional","none"],"title":"Text","description":"`required` – передайте `text`; `optional` – по желанию; `none` – площадка текста не принимает, не передавайте."},"max_length":{"type":"integer","title":"Max Length","description":"Наибольшая длина `text`."},"review_period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review Period","description":"Сколько площадка рассматривает жалобу."}},"type":"object","required":["category","categories","text","max_length"],"title":"ComplaintFormV3","description":"Что передать в `POST`.","example":{"categories":[{"code":"no_client","description":"2ГИС запросит у автора подтверждение визита…","label":"Такого клиента у нас не было"}],"category":"required","max_length":2000,"review_period":"2ГИС рассматривает жалобы до 5 дней.","text":"required"}},"ComplaintV3":{"properties":{"id":{"type":"integer","title":"Id","description":"Идентификатор жалобы."},"review_id":{"type":"integer","title":"Review Id","description":"Отзыв, на который она подана."},"status":{"anyOf":[{"type":"string","enum":["pending","accepted","rejected","failed"]},{"type":"null"}],"title":"Status","description":"`null` – отправляется на площадку; `pending` – на рассмотрении; `accepted` – отзыв удалён; `rejected` – отзыв остался (2ГИС отметил жалобу рассмотренной или молчит 14 дней, у Яндекса прошло 7 дней, у Google – 5); `failed` – не подана, причина в `error`."},"origin":{"type":"string","enum":["rewio","platform"],"title":"Origin","description":"`rewio` – подана через Rewio; `platform` – подана в кабинете площадки, мы нашли её там."},"category":{"anyOf":[{"$ref":"#/components/schemas/ComplaintCategoryV3"},{"type":"null"}],"description":"Категория, если площадка их спрашивает."},"text":{"type":"string","title":"Text","description":"Текст жалобы. Пустой там, где площадка текста не принимает (Google)."},"author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author","description":"Кто подал, как его называет площадка (`origin = platform`)."},"submitted_at":{"type":"string","format":"date-time","title":"Submitted At","description":"Когда подана (UTC, ISO 8601)."},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At","description":"Когда стал известен итог – `accepted` или `rejected` (UTC, ISO 8601)."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Когда запись менялась в последний раз (UTC, ISO 8601)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ComplaintErrorV3"},{"type":"null"}],"description":"Почему не подана (`status = failed`)."}},"type":"object","required":["id","review_id","origin","text","submitted_at","updated_at"],"title":"ComplaintV3","description":"Жалоба на отзыв."},"ComplaintWriteV3":{"properties":{"category":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Category","description":"Код категории из `form.categories`."},"text":{"type":"string","maxLength":2000,"title":"Text","description":"Текст жалобы.","default":""}},"type":"object","title":"ComplaintWriteV3","description":"Жалоба по форме площадки из `GET`: `category` – при `form.category = required`, `text` – по `form.text`.","example":{"category":"no_client","text":"Гостя с таким именем в эти даты не было."}},"ComplaintsPageV3":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ComplaintFeedItemV3"},"type":"array","title":"Data","description":"Элементы текущей страницы."},"total":{"type":"integer","title":"Total","description":"Общее число элементов, подходящих под фильтры (без учёта limit/offset)."},"limit":{"type":"integer","title":"Limit","description":"Размер страницы, применённый к запросу."},"offset":{"type":"integer","title":"Offset","description":"Смещение от начала выборки, применённое к запросу."},"has_next":{"type":"boolean","title":"Has Next","description":"Есть ли ещё элементы за пределами текущей страницы."}},"type":"object","required":["data","total","limit","offset","has_next"],"title":"ComplaintsPageV3","description":"Страница ваших жалоб."},"ErrorResponse":{"properties":{"detail":{"type":"string","title":"Detail"},"code":{"type":"string","title":"Code"}},"type":"object","required":["detail","code"],"title":"ErrorResponse","description":"Standard error response returned by all exception handlers."},"FiltersV2":{"properties":{"allowed_ratings":{"items":{"type":"integer"},"type":"array","title":"Allowed Ratings"},"allowed_sources":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Sources"},"has_text":{"type":"boolean","title":"Has Text","default":false},"has_images":{"type":"boolean","title":"Has Images","default":false}},"type":"object","title":"FiltersV2","description":"Фильтры доставки; условия объединяются по AND.","examples":[{"allowed_ratings":[1,2],"allowed_sources":["yandex_maps"],"has_images":false,"has_text":true}],"example":{"allowed_ratings":[1,2],"allowed_sources":["yandex_maps"],"has_images":false,"has_text":true}},"FolderCreateV3":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Название папки."},"parent_folder_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Folder Id","description":"Родительская папка. Глубина ограничена двумя уровнями."},"object_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Object Ids","description":"Состав папки. Недоступные идентификаторы возвращаются в `ignored_object_ids`."}},"type":"object","required":["name"],"title":"FolderCreateV3","description":"Тело создания папки."},"FolderDeleteResponseV3":{"properties":{"id":{"type":"integer","title":"Id","description":"Идентификатор удалённой папки."},"name":{"type":"string","title":"Name","description":"Название удалённой папки."}},"type":"object","required":["id","name"],"title":"FolderDeleteResponseV3","description":"Ответ на удаление папки."},"FolderObjectV3":{"properties":{"id":{"type":"integer","title":"Id","description":"Идентификатор объекта."},"name":{"type":"string","title":"Name","description":"Название объекта."}},"type":"object","required":["id","name"],"title":"FolderObjectV3","description":"Объект в составе папки – идентификатор и название, чтобы не ходить за ними отдельно."},"FolderRefreshV3":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ObjectRefreshV3"},"type":"array","title":"Data","description":"Состояние каждого объекта папки и её подпапок."},"started_object_ids":{"items":{"type":"integer"},"type":"array","title":"Started Object Ids","description":"Объекты, по которым сбор запущен этим запросом."}},"type":"object","required":["data","started_object_ids"],"title":"FolderRefreshV3","description":"Итог нажатия «Обновить» у папки."},"FolderUpdateV3":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name","description":"Новое название папки."},"parent_folder_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Folder Id","description":"Новый родитель папки."},"object_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Object Ids","description":"Новый состав папки – полная замена прежнего. Недоступные идентификаторы возвращаются в `ignored_object_ids`."}},"type":"object","title":"FolderUpdateV3","description":"Тело изменения папки – передавайте только изменяемые поля."},"FolderV3":{"properties":{"id":{"type":"integer","title":"Id","description":"Идентификатор папки."},"user_id":{"type":"integer","title":"User Id","description":"Идентификатор аккаунта – владельца папки."},"name":{"type":"string","title":"Name","description":"Название папки."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Момент создания папки (UTC, ISO 8601)."},"parent_folder_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Folder Id","description":"Родительская папка; `null` у папки верхнего уровня."},"objects":{"items":{"$ref":"#/components/schemas/FolderObjectV3"},"type":"array","title":"Objects","description":"Собственный состав папки – объекты с названиями.","default":[]},"subfolders":{"items":{"$ref":"#/components/schemas/FolderV3"},"type":"array","title":"Subfolders","description":"Подпапки со своим составом.","default":[]},"review_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Review Count","description":"Сколько отзывов в ленте папки (`GET /v3/reviews?folder_id=`): объекты папки и её подпапок, отзыв общей для двух объектов ссылки считается один раз."},"is_demo":{"type":"boolean","title":"Is Demo","description":"Папка примеров, которую кабинет кладёт новому клиенту.","default":false}},"type":"object","required":["id","user_id","name","created_at"],"title":"FolderV3","description":"Папка со своим составом и подпапками."},"FolderWriteV3":{"properties":{"id":{"type":"integer","title":"Id","description":"Идентификатор папки."},"user_id":{"type":"integer","title":"User Id","description":"Идентификатор аккаунта – владельца папки."},"name":{"type":"string","title":"Name","description":"Название папки."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Момент создания папки (UTC, ISO 8601)."},"parent_folder_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Folder Id","description":"Родительская папка; `null` у папки верхнего уровня."},"objects":{"items":{"$ref":"#/components/schemas/FolderObjectV3"},"type":"array","title":"Objects","description":"Собственный состав папки – объекты с названиями.","default":[]},"subfolders":{"items":{"$ref":"#/components/schemas/FolderV3"},"type":"array","title":"Subfolders","description":"Подпапки со своим составом.","default":[]},"review_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Review Count","description":"Сколько отзывов в ленте папки (`GET /v3/reviews?folder_id=`): объекты папки и её подпапок, отзыв общей для двух объектов ссылки считается один раз."},"is_demo":{"type":"boolean","title":"Is Demo","description":"Папка примеров, которую кабинет кладёт новому клиенту.","default":false},"ignored_object_ids":{"items":{"type":"integer"},"type":"array","title":"Ignored Object Ids","description":"Идентификаторы из присланного `object_ids`, которые в состав не попали: чужие, удалённые или несуществующие объекты. Запрос при этом выполняется – остальные объекты кладутся в папку."}},"type":"object","required":["id","user_id","name","created_at"],"title":"FolderWriteV3","description":"Ответ на создание и изменение – та же папка плюс список пропущенного."},"HiddenReviewsMutationResponseV3":{"properties":{"message":{"type":"string","title":"Message","description":"Человекочитаемый итог операции."},"hidden_count":{"type":"integer","title":"Hidden Count","description":"Сколько отзывов скрыто в объекте после операции."}},"type":"object","required":["message","hidden_count"],"title":"HiddenReviewsMutationResponseV3","description":"Итог скрытия или возврата отзывов."},"LinkInputV3":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url","description":"Адрес страницы объекта на площадке. Площадка определяется по домену."},"is_active":{"type":"boolean","title":"Is Active","description":"Собирать ли отзывы по этой ссылке.","default":true},"link_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Name","description":"Своё название ссылки внутри объекта."}},"type":"object","required":["url"],"title":"LinkInputV3","description":"Ссылка, передаваемая при создании объекта или добавлении в него.","example":{"link_name":"Яндекс Карты","url":"https://yandex.ru/maps/org/natsional/1049256789/"}},"LinkRemoveResponseV3":{"properties":{"message":{"type":"string","title":"Message","description":"Человекочитаемый итог операции."},"object_id":{"type":"integer","title":"Object Id","description":"Объект, из которого удалена ссылка."},"link_id":{"type":"integer","title":"Link Id","description":"Идентификатор удалённой ссылки."}},"type":"object","required":["message","object_id","link_id"],"title":"LinkRemoveResponseV3","description":"Ответ на удаление ссылки из объекта."},"LinkResultV3":{"properties":{"url":{"type":"string","title":"Url","description":"URL ссылки, к которой относится результат."},"link_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Link Id","description":"Идентификатор созданной ссылки. `null` при ошибке."},"source_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Slug","description":"Машинное имя площадки, определённой по URL (`2gis`, `yandex_travel`). `null`, если определить не удалось."},"link_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Name","description":"Название ссылки, как оно сохранено."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Причина, по которой ссылка не добавлена. `null` при успехе."},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code","description":"Машинная причина отказа – по ней и следует ветвиться: `source_not_detected`, `source_url_invalid`, `source_requires_upgrade`, `source_already_linked` (площадка в объекте может быть только одна), `link_already_added`. `null` при успехе."}},"type":"object","required":["url"],"title":"LinkResultV3","description":"Итог добавления одной ссылки – успех с `link_id` либо `error`."},"LinkUpdateV3":{"properties":{"link_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Name","description":"Новое своё название ссылки внутри объекта. Не передано – не меняется."},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Собирать ли отзывы по этой ссылке. Не передано – не меняется."}},"type":"object","title":"LinkUpdateV3","description":"Изменение ссылки внутри объекта. Передавайте только изменяемые поля."},"LinkV3":{"properties":{"id":{"type":"integer","title":"Id","description":"Идентификатор ссылки."},"url":{"type":"string","title":"Url","description":"URL страницы объекта на площадке."},"source_id":{"type":"integer","title":"Source Id","description":"Идентификатор площадки ссылки (см. `GET /v3/sources`)."},"link_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Name","description":"Своё название ссылки внутри объекта, если задано."},"auto_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auto Name","description":"Название, определённое нами по ссылке, с подписью площадки через двоеточие. Показывать стоит `link_name`, если задано, иначе `auto_name`."},"is_active":{"type":"boolean","title":"Is Active","description":"Включена ли ссылка в автосбор отзывов."},"scrape_status":{"$ref":"#/components/schemas/ScrapeStatus","description":"Статус последнего сбора: `pending` / `in_progress` / `success` / `failed`."},"scrape_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scrape Error","description":"Текст ошибки последнего неудачного сбора. `null`, когда сбор успешен."},"last_scraped_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Scraped At","description":"Момент последнего сбора по ссылке (UTC, ISO 8601)."},"last_scraped_review_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Scraped Review Date","description":"Дата публикации самого свежего собранного отзыва по ссылке."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Момент добавления ссылки в объект (UTC, ISO 8601)."}},"type":"object","required":["id","url","source_id","is_active","scrape_status","created_at"],"title":"LinkV3","description":"Ссылка объекта на одной площадке."},"ObjectCreateResponseV3":{"properties":{"id":{"type":"integer","title":"Id","description":"Идентификатор созданного объекта."},"name":{"type":"string","title":"Name","description":"Название объекта."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Момент создания объекта (UTC, ISO 8601)."},"link_results":{"anyOf":[{"items":{"$ref":"#/components/schemas/LinkResultV3"},"type":"array"},{"type":"null"}],"title":"Link Results","description":"Итог по каждой переданной ссылке. `null`, если ссылок не было."}},"type":"object","required":["id","name","created_at"],"title":"ObjectCreateResponseV3","description":"Созданный объект и результат по каждой переданной ссылке."},"ObjectCreateV3":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Название объекта."},"links":{"anyOf":[{"items":{"$ref":"#/components/schemas/LinkInputV3"},"type":"array"},{"type":"null"}],"title":"Links","description":"Ссылки, которые добавить сразу (до 200). Можно не передавать – объект создастся пустым, ссылки добавляются позже через `POST /v3/objects/{object_id}/links`."}},"type":"object","required":["name"],"title":"ObjectCreateV3","description":"Тело создания объекта.","example":{"links":[{"url":"https://yandex.ru/maps/org/natsional/1049256789/"}],"name":"Отель Националь"}},"ObjectDeleteResponseV3":{"properties":{"id":{"type":"integer","title":"Id","description":"Идентификатор удалённого объекта."},"name":{"type":"string","title":"Name","description":"Название удалённого объекта."}},"type":"object","required":["id","name"],"title":"ObjectDeleteResponseV3","description":"Ответ на удаление объекта."},"ObjectRefreshV3":{"properties":{"object_id":{"type":"integer","title":"Object Id","description":"Объект."},"is_allowed":{"type":"boolean","title":"Is Allowed","description":"Запустит ли `POST` сбор прямо сейчас."},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code","description":"Почему нельзя – тот же код, что вернёт `POST`: `refresh_requires_upgrade`, `refresh_trial_exhausted`, `refresh_in_progress`, `refresh_limited`, `refresh_nothing_to_scrape`. `null`, если можно."},"mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode","description":"Что сделает `POST`: `full` – соберёт все включённые ссылки объекта, `retry` – только не собравшиеся в эти сутки. `null`, если нельзя."},"is_running":{"type":"boolean","title":"Is Running","description":"Идёт ли дополнительный сбор."},"is_retried":{"type":"boolean","title":"Is Retried","description":"Повтор этих суток уже использован."},"refreshed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Refreshed At","description":"Начало текущих суток объекта – последний сбор всех ссылок, UTC."},"next_available_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Available At","description":"Когда снова будет доступен сбор всех ссылок, UTC. `null` – уже доступен."},"retry_link_ids":{"items":{"type":"integer"},"type":"array","title":"Retry Link Ids","description":"Ссылки, не собравшиеся в эти сутки, которым положен один повтор."},"trial_left":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trial Left","description":"Сколько дополнительных сборов осталось в пробном периоде (всего 5). `null` – не пробный период."},"links":{"items":{"$ref":"#/components/schemas/RefreshLinkV3"},"type":"array","title":"Links","description":"Итог дополнительных сборов этих суток по ссылкам; повтор перекрывает первый сбор по своим ссылкам. Пусто вне суток объекта."}},"type":"object","required":["object_id","is_allowed","is_running","is_retried"],"title":"ObjectRefreshV3","description":"Дополнительный сбор отзывов по объекту: можно ли сейчас, а если нельзя – почему и когда снова.","example":{"is_allowed":true,"is_retried":false,"is_running":false,"links":[{"link_id":11,"status":"success"},{"link_id":12,"status":"failed"}],"mode":"retry","next_available_at":"2026-10-30T09:11:00Z","object_id":101,"refreshed_at":"2026-10-29T09:12:00Z","retry_link_ids":[12]}},"ObjectScrapeStatus":{"type":"string","enum":["pending","in_progress","success","partial","failed"],"title":"ObjectScrapeStatus","description":"Сводный статус сбора по включённым ссылкам объекта."},"ObjectUpdateV3":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name","description":"Новое название объекта."},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Включить или выключить объект."}},"type":"object","title":"ObjectUpdateV3","description":"Изменение объекта: название и/или включённость."},"ObjectV3":{"properties":{"id":{"type":"integer","title":"Id","description":"Идентификатор объекта."},"name":{"type":"string","title":"Name","description":"Название объекта."},"is_active":{"type":"boolean","title":"Is Active","description":"Включён ли объект. Выключенный не отдаёт отзывы и аналитику и не собирается, но остаётся у вас и продолжает занимать место в тарифе."},"scrape_status":{"$ref":"#/components/schemas/ObjectScrapeStatus","description":"Сводный статус сбора по включённым ссылкам объекта: `pending` / `in_progress` / `success` / `partial` / `failed`."},"last_scraped_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Scraped At","description":"Последний сбор по объекту (UTC, ISO 8601)."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Момент создания объекта (UTC, ISO 8601)."},"links":{"items":{"$ref":"#/components/schemas/LinkV3"},"type":"array","title":"Links","description":"Ссылки объекта на разных площадках.","default":[]},"is_demo":{"type":"boolean","title":"Is Demo","description":"Пример, который мы положили в кабинет при регистрации. Место в тарифе не занимает; исчезает с первым своим объектом или первой оплатой, удалить можно как обычный объект.","default":false},"review_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Review Count","description":"Сколько отзывов объекта доступно вам сейчас: по включённым ссылкам, без удалённых на площадке, в пробном периоде – в пределах его окна. Скрытые и закреплённые через API здесь не вычитаются, поэтому `total` у `GET /v3/reviews?object_id=…` может быть меньше на их число. Есть в списке объектов и в `GET /v3/objects/{object_id}`; в ответах на изменение – `null`."}},"type":"object","required":["id","name","is_active","scrape_status","created_at"],"title":"ObjectV3","description":"Объект – единица бизнеса, отзывы по которой собираются со всех площадок.","example":{"created_at":"2026-02-25T09:28:07","id":20,"is_active":true,"last_scraped_at":"2026-08-23T04:15:00","links":[],"name":"Отель Националь","scrape_status":"success"}},"ObjectsSwitchV3":{"properties":{"object_ids":{"items":{"type":"integer"},"type":"array","maxItems":200,"minItems":1,"title":"Object Ids","description":"Идентификаторы объектов. Недоступные вам молча пропускаются – в ответе – только переключённые."},"is_active":{"type":"boolean","title":"Is Active","description":"Одно значение на вызов: включить или выключить."}},"type":"object","required":["object_ids","is_active"],"title":"ObjectsSwitchV3","description":"Массовое включение/выключение объектов одним вызовом.","example":{"is_active":false,"object_ids":[12,13,27]}},"OurReplyV3":{"properties":{"status":{"anyOf":[{"type":"string","enum":["pending","published","failed","deleted"]},{"type":"null"}],"title":"Status","description":"Что с вашим ответом на карточке: `null` – отправлен, площадке ещё не передан; `pending` – площадка приняла, на карточке ещё не видели (проверяем через 15 с, 30 с, 1 мин … 4 ч); `published` – ваш текст стоит на карточке; `deleted` – вашего ответа на карточке нет: вы его удалили или он пропал (причина – в `error`); `failed` – не опубликован (почему – в `error`)."},"text":{"type":"string","title":"Text","description":"Текст, который должен стоять на площадке. Пусто – ответ снимается."},"submitted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Submitted At","description":"Когда вы отправили этот текст (UTC)."},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At","description":"Когда мы увидели ваш текст на карточке (UTC)."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Когда ответ меняли в последний раз (UTC)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ReplyErrorV3"},{"type":"null"}],"description":"Почему ответ не опубликован или пропал с карточки."}},"type":"object","required":["text","updated_at"],"title":"OurReplyV3","description":"Ваш ответ на этот отзыв, отправленный через Rewio.\n\nТот же статус, что в `GET /reviews/{id}/reply`. `reply_text` отзыва – то,\nчто принёс сбор; наш ответ может стать `published` раньше, чем сбор его\nпринесёт."},"Page_ObjectV3_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ObjectV3"},"type":"array","title":"Data","description":"Элементы текущей страницы."},"total":{"type":"integer","title":"Total","description":"Общее число элементов, подходящих под фильтры (без учёта limit/offset)."},"limit":{"type":"integer","title":"Limit","description":"Размер страницы, применённый к запросу."},"offset":{"type":"integer","title":"Offset","description":"Смещение от начала выборки, применённое к запросу."},"has_next":{"type":"boolean","title":"Has Next","description":"Есть ли ещё элементы за пределами текущей страницы."}},"type":"object","required":["data","total","limit","offset","has_next"],"title":"Page[ObjectV3]"},"Page_ReviewV3_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ReviewV3"},"type":"array","title":"Data","description":"Элементы текущей страницы."},"total":{"type":"integer","title":"Total","description":"Общее число элементов, подходящих под фильтры (без учёта limit/offset)."},"limit":{"type":"integer","title":"Limit","description":"Размер страницы, применённый к запросу."},"offset":{"type":"integer","title":"Offset","description":"Смещение от начала выборки, применённое к запросу."},"has_next":{"type":"boolean","title":"Has Next","description":"Есть ли ещё элементы за пределами текущей страницы."}},"type":"object","required":["data","total","limit","offset","has_next"],"title":"Page[ReviewV3]"},"PinnedOrderRequestV3":{"properties":{"ordered_review_ids":{"items":{"type":"integer"},"type":"array","maxItems":200,"title":"Ordered Review Ids","description":"Идентификаторы в нужном порядке: первый в списке – первый в выдаче. Список заменяет прежний целиком; пустой – открепить всё."}},"type":"object","required":["ordered_review_ids"],"title":"PinnedOrderRequestV3","description":"Порядок закреплённых отзывов – присылается целиком.","example":{"ordered_review_ids":[12345,67890]}},"RatingHistoryV3":{"properties":{"link_id":{"type":"integer","title":"Link Id","description":"Идентификатор ссылки (страницы объекта на площадке)."},"source_id":{"type":"integer","title":"Source Id","description":"Идентификатор площадки. Берётся из `GET /v3/sources`."},"points":{"items":{"$ref":"#/components/schemas/RatingPointV3"},"type":"array","title":"Points","description":"Точки ряда, свежая первой. Каждая – отрезок, на котором значение держалось; `measured_at` следующей (более старой) точки – когда прежнее значение видели в последний раз."}},"type":"object","required":["link_id","source_id","points"],"title":"RatingHistoryV3","description":"Ряд изменений рейтинга по одной ссылке.","example":{"link_id":794,"points":[{"measured_at":"2026-08-27T05:21:23","rating":4.9,"rating_count":966,"review_count":286},{"measured_at":"2026-08-23T05:19:44","rating":4.8,"rating_count":941,"review_count":279}],"source_id":1}},"RatingPointV3":{"properties":{"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating","description":"Рейтинг объекта на площадке, шкала 1–5. `null` – площадка рейтинг не публикует."},"rating_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rating Count","description":"Сколько оценок сформировали рейтинг, **по данным площадки**. Оценка – это выставленные звёзды, текст к ним не обязателен. `null` – площадка числа не публикует."},"review_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Review Count","description":"Сколько на площадке отзывов, то есть оценок с текстом или фото, **по данным площадки**. Это не то же, что число собранных нами отзывов: площадка считает и то, что мы ещё не забрали или что скрыто от сбора. `null` – площадка числа не публикует."},"measured_at":{"type":"string","format":"date-time","title":"Measured At","description":"Когда мы последний раз видели это значение – момент последней успешной сверки с площадкой. Сбор ходит дважды в сутки, поэтому свежесть здесь измеряется часами, а не минутами."}},"type":"object","required":["measured_at"],"title":"RatingPointV3","description":"Одна точка ряда: значение и дата, когда его видели в последний раз."},"RatingV3":{"properties":{"link_id":{"type":"integer","title":"Link Id","description":"Идентификатор ссылки (страницы объекта на площадке)."},"source_id":{"type":"integer","title":"Source Id","description":"Идентификатор площадки. Берётся из `GET /v3/sources`."},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating","description":"Рейтинг объекта на площадке, шкала 1–5. `null` – площадка рейтинг не публикует."},"rating_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rating Count","description":"Сколько оценок сформировали рейтинг, **по данным площадки**. Оценка – это выставленные звёзды, текст к ним не обязателен. `null` – площадка числа не публикует."},"review_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Review Count","description":"Сколько на площадке отзывов, то есть оценок с текстом или фото, **по данным площадки**. Это не то же, что число собранных нами отзывов: площадка считает и то, что мы ещё не забрали или что скрыто от сбора. `null` – площадка числа не публикует."},"measured_at":{"type":"string","format":"date-time","title":"Measured At","description":"Когда мы последний раз видели это значение – момент последней успешной сверки с площадкой. Сбор ходит дважды в сутки, поэтому свежесть здесь измеряется часами, а не минутами."}},"type":"object","required":["link_id","source_id","measured_at"],"title":"RatingV3","description":"Последнее известное значение рейтинга по одной ссылке.","example":{"link_id":794,"measured_at":"2026-08-27T05:21:23","rating":4.9,"rating_count":966,"review_count":286,"source_id":1}},"RefreshLinkV3":{"properties":{"link_id":{"type":"integer","title":"Link Id","description":"Ссылка объекта."},"status":{"type":"string","title":"Status","description":"`running` – собирается, `success` – собрана, `failed` – не собралась."}},"type":"object","required":["link_id","status"],"title":"RefreshLinkV3","description":"Итог дополнительных сборов этих суток по одной ссылке."},"ReplyErrorV3":{"properties":{"code":{"type":"string","title":"Code","description":"Машинный код ошибки публикации."},"message":{"type":"string","title":"Message","description":"Пояснение для человека.","default":""}},"type":"object","required":["code"],"title":"ReplyErrorV3","description":"Последняя ошибка публикации."},"ReplyStateV3":{"properties":{"status":{"anyOf":[{"type":"string","enum":["pending","published","failed","deleted"]},{"type":"null"}],"title":"Status","description":"Что с вашим ответом на карточке: `null` – отправлен, площадке ещё не передан; `pending` – площадка приняла, на карточке ещё не видели (проверяем через 15 с, 30 с, 1 мин … 4 ч); `published` – ваш текст стоит на карточке; `deleted` – вашего ответа на карточке нет: вы его удалили или он пропал (причина – в `error`); `failed` – не опубликован (почему – в `error`)."},"submitted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Submitted At","description":"Когда вы отправили этот текст (UTC, ISO 8601)."},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At","description":"Когда мы увидели ваш текст на карточке (UTC, ISO 8601). `null`, пока не видели."},"error":{"anyOf":[{"$ref":"#/components/schemas/ReplyErrorV3"},{"type":"null"}],"description":"Почему ответ не опубликован или пропал с карточки: `not_visible`, `not_taken_down`, `review_deleted`, `reply_missing`, `reply_replaced` или код отказа площадки."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Когда запись об ответе менялась в последний раз (UTC, ISO 8601)."}},"type":"object","required":["updated_at"],"title":"ReplyStateV3","description":"Что с ВАШИМ ответом на карточке.\n\nМетод читает нашу запись и к площадке не обращается – опрашивать его можно с\nлюбой частотой. На площадку ходим мы сами: после того как площадка приняла\nответ, читаем этот отзыв на ней через 15 с, 30 с, 1, 2, 3, 5, 15, 30 мин,\n1, 2 и 4 ч. Увидели ваш текст – `published`; не увидели за 4 часа –\n`failed` с кодом `not_visible`. Сбор площадки двигает статус так же."},"ReplyStatsV3":{"properties":{"reviews_with_reply":{"type":"integer","title":"Reviews With Reply","description":"Число отзывов, на которые есть ответ организации."},"unanswered_negative_count":{"type":"integer","title":"Unanswered Negative Count","description":"Число отзывов с оценкой ниже 3 без ответа."},"reply_by_rating":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Reply By Rating","description":"Распределение отвеченных отзывов по оценкам."},"last_reply_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Last Reply Date","description":"Дата самого свежего ответа организации."}},"type":"object","required":["reviews_with_reply","unanswered_negative_count"],"title":"ReplyStatsV3","description":"Сводка по ответам организации."},"ReplyV3":{"properties":{"text":{"type":"string","title":"Text","description":"Текст ответа, который должен стоять на площадке."},"status":{"anyOf":[{"type":"string","enum":["pending","published","failed","deleted"]},{"type":"null"}],"title":"Status","description":"Что с вашим ответом на карточке: `null` – отправлен, площадке ещё не передан; `pending` – площадка приняла, на карточке ещё не видели (проверяем через 15 с, 30 с, 1 мин … 4 ч); `published` – ваш текст стоит на карточке; `deleted` – вашего ответа на карточке нет: вы его удалили или он пропал (причина – в `error`); `failed` – не опубликован (почему – в `error`)."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Когда запись менялась в последний раз (UTC, ISO 8601)."}},"type":"object","required":["text","updated_at"],"title":"ReplyV3","description":"Ответ, принятый в работу."},"ReplyWriteV3":{"properties":{"text":{"type":"string","maxLength":4000,"minLength":1,"title":"Text","description":"Текст ответа для публикации на площадке."}},"type":"object","required":["text"],"title":"ReplyWriteV3","description":"Текст ответа, который нужно опубликовать.","example":{"text":"Спасибо за отзыв!"}},"ReturnAll_FolderV3_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/FolderV3"},"type":"array","title":"Data","description":"Все элементы (пагинации нет)."}},"type":"object","required":["data"],"title":"ReturnAll[FolderV3]"},"ReturnAll_LinkV3_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/LinkV3"},"type":"array","title":"Data","description":"Все элементы (пагинации нет)."}},"type":"object","required":["data"],"title":"ReturnAll[LinkV3]"},"ReturnAll_ObjectRefreshV3_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ObjectRefreshV3"},"type":"array","title":"Data","description":"Все элементы (пагинации нет)."}},"type":"object","required":["data"],"title":"ReturnAll[ObjectRefreshV3]"},"ReturnAll_ObjectV3_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ObjectV3"},"type":"array","title":"Data","description":"Все элементы (пагинации нет)."}},"type":"object","required":["data"],"title":"ReturnAll[ObjectV3]"},"ReturnAll_RatingHistoryV3_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/RatingHistoryV3"},"type":"array","title":"Data","description":"Все элементы (пагинации нет)."}},"type":"object","required":["data"],"title":"ReturnAll[RatingHistoryV3]"},"ReturnAll_RatingV3_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/RatingV3"},"type":"array","title":"Data","description":"Все элементы (пагинации нет)."}},"type":"object","required":["data"],"title":"ReturnAll[RatingV3]"},"ReturnAll_ReviewV3_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ReviewV3"},"type":"array","title":"Data","description":"Все элементы (пагинации нет)."}},"type":"object","required":["data"],"title":"ReturnAll[ReviewV3]"},"ReturnAll_SourceV3_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/SourceV3"},"type":"array","title":"Data","description":"Все элементы (пагинации нет)."}},"type":"object","required":["data"],"title":"ReturnAll[SourceV3]"},"ReturnAll_WebhookV3_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/WebhookV3"},"type":"array","title":"Data","description":"Все элементы (пагинации нет)."}},"type":"object","required":["data"],"title":"ReturnAll[WebhookV3]"},"ReviewComplaintsV3":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ComplaintV3"},"type":"array","title":"Data","description":"Жалобы на этот отзыв, новые сверху: ваши и поданные в кабинете площадки."},"can_file":{"type":"boolean","title":"Can File","description":"Можно ли подать жалобу сейчас."},"reason_code":{"anyOf":[{"type":"string","enum":["already_filed","pending_review","cooldown","in_progress","requires_upgrade","trial_quota_exhausted","source_paused","not_replyable"]},{"type":"null"}],"title":"Reason Code","description":"Почему нельзя: `already_filed` – жалоба уже подана, площадка принимает одну; `pending_review` – прежняя на рассмотрении; `cooldown` – повторно после `retry_at`; `in_progress` – жалоба отправляется; `requires_upgrade`, `trial_quota_exhausted` – тариф; `source_paused` – подача приостановлена; `not_replyable` – отзыв пришёл с другой площадки."},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"То же готовой фразой для человека."},"retry_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Retry At","description":"С какого момента можно подать снова (`cooldown`), UTC."},"form":{"$ref":"#/components/schemas/ComplaintFormV3","description":"Что передать в `POST` на этой площадке."}},"type":"object","required":["data","can_file","form"],"title":"ReviewComplaintsV3","description":"Жалобы на отзыв, форма площадки и можно ли подать сейчас."},"ReviewIdsRequestV3":{"properties":{"review_ids":{"items":{"type":"integer"},"type":"array","maxItems":200,"minItems":1,"title":"Review Ids","description":"Идентификаторы отзывов объекта."}},"type":"object","required":["review_ids"],"title":"ReviewIdsRequestV3","description":"Набор отзывов для скрытия, возврата, закрепления или открепления.","example":{"review_ids":[12345,67890]}},"ReviewImageV2":{"properties":{"template_url":{"type":"string","title":"Template Url","description":"URL изображения на CDN площадки в исходном виде. У части площадок содержит шаблон размера (`{size}` или `{width}`/`{height}`) и потому не предназначен для прямой вставки – для показа берите `preview` или `image`."},"preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview","description":"Готовый URL уменьшенной версии (превью) для списков и сеток."},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image","description":"Готовый URL полноразмерной версии для просмотра."}},"type":"object","required":["template_url"],"title":"ReviewImageV2","description":"Изображение, приложенное к отзыву.\n\n``template_url`` – ссылка площадки «как есть», и у части CDN (Яндекс,\nОстровок, TripAdvisor, 2ГИС) она содержит шаблон размера, то есть сама по\nсебе не открывается. Готовые к показу ссылки – ``preview`` и ``image``.","examples":[{"image":"https://avatars.mds.yandex.net/get-altay/17743308/2a0000019f85dc34d7ee3b24b4b9ec82bdbd/XXXL","preview":"https://avatars.mds.yandex.net/get-altay/17743308/2a0000019f85dc34d7ee3b24b4b9ec82bdbd/M","template_url":"https://avatars.mds.yandex.net/get-altay/17743308/2a0000019f85dc34d7ee3b24b4b9ec82bdbd/{size}"}],"example":{"image":"https://avatars.mds.yandex.net/get-altay/17743308/2a0000019f85dc34d7ee3b24b4b9ec82bdbd/XXXL","preview":"https://avatars.mds.yandex.net/get-altay/17743308/2a0000019f85dc34d7ee3b24b4b9ec82bdbd/M","template_url":"https://avatars.mds.yandex.net/get-altay/17743308/2a0000019f85dc34d7ee3b24b4b9ec82bdbd/{size}"}},"ReviewV3":{"properties":{"id":{"type":"integer","title":"Id","description":"Идентификатор отзыва в сервисе."},"link_id":{"type":"integer","title":"Link Id","description":"Идентификатор ссылки (страницы объекта на площадке)."},"source_id":{"type":"integer","title":"Source Id","description":"Идентификатор площадки, с которой собран отзыв."},"source_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Slug","description":"Слаг площадки, с которой собран отзыв (`2gis`, `google`, `yandex_maps`). Отвечать можно, если он совпадает с `provider` отзыва."},"author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author","description":"Имя автора; `null`, если анонимен."},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text","description":"Текст отзыва; `null`, если отзыв без текста."},"review_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Review Date","description":"Дата и время публикации отзыва. Приводится к UTC везде, где это возможно; в противном случае – время, как его показывает площадка. ISO 8601 без таймзоны."},"rating_original":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rating Original","description":"Исходная оценка в шкале площадки."},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating","description":"Оценка, приведённая к единой шкале 1–5. `null`, если оценки нет."},"review_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review Url","description":"Прямая ссылка на отзыв на площадке. `null`, если недоступна."},"reply_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reply Text","description":"Текст официального ответа организации. `null`, если ответа нет."},"reply_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Reply Date","description":"Дата и время ответа организации (ISO 8601). Приводится к UTC, где это возможно."},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider","description":"Площадка-источник самого отзыва внутри `source` (слаг в нижнем регистре). Многие площадки показывают в ленте отзывы других: 2ГИС – `booking`/`tbank`/`flamp`/…, Google – `tripadvisor`. У нативного отзыва совпадает со слагом площадки (`2gis`, `google`), и только на такой отзыв можно опубликовать ответ через эту площадку – на остальные вернётся `409 reply_not_replyable`."},"is_replyable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Replyable","description":"Можно ли ответить на отзыв через `PUT /v3/reviews/{review_id}/reply`. Приходит только на площадках, где Rewio публикует ответы (`can_publish_reply` в `GET /v3/sources`); на остальных ключа нет. `true` – ответы на ссылке подключены, и отзыв родной для площадки (`provider` пуст или равен `source_slug`). `false` – ответ вернёт ошибку: отзыв другой площадки (2ГИС показывает отзывы Netmonet, Booking, Т-Банка – `409 reply_not_replyable`) или ответы на ссылке не подключены. Тариф флаг не учитывает."},"has_images":{"type":"boolean","title":"Has Images","description":"Признак наличия изображений в отзыве."},"images":{"items":{"$ref":"#/components/schemas/ReviewImageV2"},"type":"array","title":"Images","description":"Список изображений отзыва.","default":[]},"has_videos":{"type":"boolean","title":"Has Videos","description":"Признак наличия видео в отзыве.","default":false},"videos":{"items":{"$ref":"#/components/schemas/ReviewVideoResponse"},"type":"array","title":"Videos","description":"Список видеовложений отзыва.","default":[]},"is_deleted":{"type":"boolean","title":"Is Deleted","description":"Отзыв обнаружен удалённым на площадке (приходит только когда `true`).","default":false},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At","description":"Момент обнаружения удаления (UTC, ISO 8601)."},"is_hidden":{"type":"boolean","title":"Is Hidden","description":"Отзыв скрыт в рамках объекта (приходит только когда `true`).","default":false},"is_pinned":{"type":"boolean","title":"Is Pinned","description":"Отзыв закреплён в рамках объекта (приходит только когда `true`).","default":false},"pin_position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pin Position","description":"Позиция закреплённого отзыва: меньше – выше."},"pros":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pros","description":"Блок «достоинства» (только при `split_pros_cons=true`)."},"cons":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cons","description":"Блок «недостатки» (только при `split_pros_cons=true`)."},"our_reply":{"anyOf":[{"$ref":"#/components/schemas/OurReplyV3"},{"type":"null"}],"description":"Ваш ответ, отправленный через Rewio, и его состояние – то же, что в `GET /v3/reviews/{review_id}/reply`. `null` – ответа через Rewio нет или тариф без ответов. Ответ, поставленный не через Rewio, – в `reply_text`."},"is_skipped":{"type":"boolean","title":"Is Skipped","description":"Вы отметили отзыв «Пропустить» (`PUT /v3/reviews/{review_id}/skip`). На тарифе без ответов всегда `false`.","default":false},"complaint":{"anyOf":[{"$ref":"#/components/schemas/ComplaintBriefV3"},{"type":"null"}],"description":"Последняя жалоба на отзыв. `null` – жалоб нет или тариф без жалоб."}},"type":"object","required":["id","link_id","source_id","has_images"],"title":"ReviewV3","description":"Отзыв, приведённый к общей модели."},"ReviewVideoResponse":{"properties":{"kind":{"type":"string","enum":["embed","file","hls"],"title":"Kind","description":"Тип вложения: `embed` – встраиваемый плеер площадки (открывать в sandbox-iframe), `file` – прямая ссылка на видеофайл, `hls` – HLS-поток (`.m3u8`)."},"video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Url","description":"URL видео или встраиваемого плеера в зависимости от `kind`."},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail","description":"URL кадра-заставки (превью) видео."},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width","description":"Ширина видео в пикселях, если известна."},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height","description":"Высота видео в пикселях, если известна."},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms","description":"Длительность видео в миллисекундах, если известна."}},"type":"object","required":["kind"],"title":"ReviewVideoResponse","description":"Schema for a review video attachment (links only, kind-discriminated).\n\n`video_url` is a plain `str` (mirrors ReviewImageResponse.image_url), NOT\nHttpUrl: an invalid URL from the DB must not raise ValidationError and 500\nthe whole review batch. Safety is enforced on the way IN (host-allowlist\nin the scraper + scheme-guard in the save path), and on the frontend, which\nonly embeds allowlisted hosts in a sandboxed iframe (see plan §8.5)."},"ReviewsPageV3":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ReviewV3"},"type":"array","title":"Data","description":"Элементы текущей страницы."},"total":{"type":"integer","title":"Total","description":"Общее число элементов, подходящих под фильтры (без учёта limit/offset)."},"limit":{"type":"integer","title":"Limit","description":"Размер страницы, применённый к запросу."},"offset":{"type":"integer","title":"Offset","description":"Смещение от начала выборки, применённое к запросу."},"has_next":{"type":"boolean","title":"Has Next","description":"Есть ли ещё элементы за пределами текущей страницы."},"access":{"anyOf":[{"$ref":"#/components/schemas/AccessInfoV3"},{"type":"null"}],"description":"Ограничение выдачи. Приходит только когда показали не всё."},"collecting":{"anyOf":[{"$ref":"#/components/schemas/CollectingInfoV3"},{"type":"null"}],"description":"Первого сбора по части площадок ещё не было. Приходит только до первого успешного сбора."}},"type":"object","required":["data","total","limit","offset","has_next"],"title":"ReviewsPageV3","description":"Страница отзывов: конверт `Page` и необязательные объекты `access` и `collecting`."},"ReviewsSyncPageV3":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ReviewV3"},"type":"array","title":"Data","description":"Элементы текущей страницы."},"next_cursor":{"type":"string","title":"Next Cursor","description":"Курсор для следующего запроса. Приходит всегда, в том числе на последней и на пустой странице – его и нужно сохранить у себя до следующего прогона."},"has_next":{"type":"boolean","title":"Has Next","description":"Есть ли ещё элементы прямо сейчас. `false` – обход догнал текущее состояние; возвращайтесь с сохранённым курсором позже."},"access":{"anyOf":[{"$ref":"#/components/schemas/AccessInfoV3"},{"type":"null"}],"description":"Ограничение выдачи. Приходит только когда показали не всё."}},"type":"object","required":["data","next_cursor","has_next"],"title":"ReviewsSyncPageV3","description":"Страница потока изменений отзывов."},"ScrapeStatus":{"type":"string","enum":["pending","in_progress","success","failed"],"title":"ScrapeStatus","description":"Статус последнего сбора отзывов по ссылке.\n\n    \n    "},"SourceV3":{"properties":{"id":{"type":"integer","title":"Id","description":"Идентификатор площадки. Им фильтруются отзывы и аналитика (`source_ids`)."},"slug":{"type":"string","title":"Slug","description":"Машинное имя площадки, стабильное: `yandex_travel`, `google`, `2gis`."},"name":{"type":"string","title":"Name","description":"Название площадки для показа человеку: `YandexTravel`."},"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Url","description":"Базовый адрес площадки. Ссылки объекта должны вести на этот домен."},"rating_scale":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rating Scale","description":"Исходная шкала оценок площадки (например, 5 или 10). Оценки в `/reviews` уже нормализованы к шкале 1–5 (`rating`); исходное значение – в `rating_original`. `null`, если площадка не выставляет оценок."},"supports_replies":{"type":"boolean","title":"Supports Replies","description":"Площадка поддерживает публичные ответы организации на отзывы."},"supports_images":{"type":"boolean","title":"Supports Images","description":"Отзывы на площадке могут содержать изображения."},"providers":{"items":{"type":"string"},"type":"array","title":"Providers","description":"Площадки-источники, чьи отзывы встречаются в ленте этой площадки (слаги в нижнем регистре, у отзыва – в поле `provider`). У большинства это только сам слаг; 2ГИС показывает ещё `booking`/`tbank`/`flamp`/…, Google – `tripadvisor`. Отвечать можно только на отзывы, чей `provider` равен слагу этой площадки."},"can_publish_reply":{"type":"boolean","title":"Can Publish Reply","description":"Rewio умеет публиковать ответы на этой площадке. Отличается от `supports_replies`: тот про саму площадку, этот – про то, что ответ можете опубликовать вы, через нас."},"can_file_complaint":{"type":"boolean","title":"Can File Complaint","description":"Rewio умеет подавать на этой площадке жалобы на отзывы (`/v3/reviews/{review_id}/complaints`).","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Момент добавления площадки в сервис (UTC, ISO 8601)."}},"type":"object","required":["id","slug","name","supports_replies","supports_images","can_publish_reply","created_at"],"title":"SourceV3","description":"Площадка отзывов (/v3).","example":{"base_url":"https://travel.yandex.ru","can_file_complaint":false,"can_publish_reply":false,"created_at":"2026-02-08T18:33:17","id":3,"name":"YandexTravel","rating_scale":5,"slug":"yandex_travel","supports_images":true,"supports_replies":true}},"SupportAccepted":{"properties":{"status":{"type":"string","title":"Status","description":"Всегда `accepted`: обращение принято и отправлено.","examples":["accepted"]}},"type":"object","required":["status"],"title":"SupportAccepted"},"SupportMessage":{"properties":{"subject":{"type":"string","maxLength":200,"minLength":2,"title":"Subject","description":"Тема обращения."},"message":{"type":"string","maxLength":5000,"minLength":5,"title":"Message","description":"Текст обращения."},"contact":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Contact","description":"Как с вами связаться, если ответ на почту аккаунта вам не подходит: телефон, Telegram, другой адрес. Необязательно."}},"type":"object","required":["subject","message"],"title":"SupportMessage"},"TestSubscriptionResponse":{"properties":{"status":{"type":"string","const":"queued","title":"Status"},"test_id":{"type":"string","title":"Test Id"}},"type":"object","required":["status","test_id"],"title":"TestSubscriptionResponse"},"TimeseriesMetaV3":{"properties":{"object_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Object Id","description":"Объект, по которому считали. `null` в папочном режиме."},"folder_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Folder Id","description":"Папка, по которой считали. `null` в объектном режиме."},"object_ids":{"items":{"type":"integer"},"type":"array","title":"Object Ids","description":"Объекты, вошедшие в расчёт. В объектном режиме – один."},"published_from":{"type":"string","format":"date","title":"Published From","description":"Фактически применённое начало периода по дате публикации, включительно."},"published_to":{"type":"string","format":"date","title":"Published To","description":"Фактически применённый конец периода, включительно."},"source_ids":{"items":{"type":"integer"},"type":"array","title":"Source Ids","description":"Фактически применённый фильтр по площадкам. Пусто – все площадки объекта."},"generated_at":{"type":"string","format":"date-time","title":"Generated At","description":"Момент расчёта данных (UTC, ISO 8601)."},"granularity":{"type":"string","title":"Granularity","description":"Применённый размер интервала ряда: `day`, `week` или `month`."}},"type":"object","required":["object_ids","published_from","published_to","source_ids","generated_at","granularity"],"title":"TimeseriesMetaV3","description":"Применённые адресат и фильтры (как в `AnalyticsMetaV3`) и размер интервала."},"TimeseriesPointV3":{"properties":{"period":{"type":"string","title":"Period","description":"Начало интервала: `YYYY-MM-DD` для дня и недели, `YYYY-MM` для месяца."},"review_count":{"type":"integer","title":"Review Count","description":"Число отзывов в этом интервале."},"average_rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Rating","description":"Средняя оценка в интервале, шкала 1–5."},"reply_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reply Count","description":"Число ответов организации в интервале."},"reviews_with_text":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews With Text","description":"Сколько отзывов интервала с текстом."},"reviews_with_images":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews With Images","description":"Сколько отзывов интервала с изображениями."},"rating_distribution":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Rating Distribution","description":"Распределение отзывов интервала по оценкам."},"reply_distribution":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Reply Distribution","description":"Распределение ответов интервала по оценкам."}},"type":"object","required":["period","review_count"],"title":"TimeseriesPointV3","description":"Одна точка ряда."},"TimeseriesResponseV3":{"properties":{"meta":{"$ref":"#/components/schemas/TimeseriesMetaV3"},"series":{"items":{"$ref":"#/components/schemas/TimeseriesSeriesV3"},"type":"array","title":"Series"},"access":{"anyOf":[{"$ref":"#/components/schemas/AccessInfoV3"},{"type":"null"}],"description":"Ограничение выдачи, если показали не всё."}},"type":"object","required":["meta","series"],"title":"TimeseriesResponseV3","description":"Динамика отзывов по интервалам."},"TimeseriesSeriesV3":{"properties":{"source_id":{"type":"integer","title":"Source Id","description":"Идентификатор площадки ряда; `0` – агрегированный ряд по всем площадкам."},"source_name":{"type":"string","title":"Source Name","description":"Название площадки; для `source_id = 0` – «Все источники»."},"points":{"items":{"$ref":"#/components/schemas/TimeseriesPointV3"},"type":"array","title":"Points","description":"Точки ряда в хронологическом порядке."}},"type":"object","required":["source_id","source_name","points"],"title":"TimeseriesSeriesV3","description":"Ряд одной площадки."},"WebhookCreateV3":{"properties":{"target":{"type":"string","maxLength":500,"title":"Target","description":"HTTPS-адрес, на который приходят события."},"object_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array","maxItems":200,"minItems":1},{"type":"null"}],"title":"Object Ids","description":"Присылать события только по этим объектам. Не передано – по всем вашим."},"event_types":{"items":{"type":"string","enum":["reviews.new","replies.new","scrape.run.finished"]},"type":"array","maxItems":10,"minItems":1,"title":"Event Types","description":"Какие события присылать."},"bucket_window":{"type":"string","title":"Bucket Window","description":"Как часто собирать события в одну доставку.","default":"immediate","examples":["immediate","daily_9","daily_14"]},"filters":{"$ref":"#/components/schemas/FiltersV2","description":"Что именно присылать: оценки, площадки, наличие текста и картинок."}},"type":"object","required":["target","event_types"],"title":"WebhookCreateV3","description":"Создание подписки на события.","example":{"bucket_window":"immediate","event_types":["reviews.new"],"object_ids":[20],"target":"https://example.com/hooks/rewio"}},"WebhookUpdateV3":{"properties":{"target":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Target","description":"Новый адрес доставки."},"object_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array","maxItems":200,"minItems":1},{"type":"null"}],"title":"Object Ids","description":"Новый список объектов."},"event_types":{"anyOf":[{"items":{"type":"string","enum":["reviews.new","replies.new","scrape.run.finished"]},"type":"array","maxItems":10,"minItems":1},{"type":"null"}],"title":"Event Types","description":"Новый набор событий."},"bucket_window":{"anyOf":[{"type":"string","description":"Delivery cadence. `immediate` – one POST shortly after each scrape batch; `daily_<hour>` – one digest per day at the given UTC hour (0–23), e.g. `daily_9` = 09:00 UTC, `daily_14` = 14:00 UTC.","examples":["immediate","daily_9","daily_14"]},{"type":"null"}],"title":"Bucket Window","description":"Новое окно группировки."},"filters":{"anyOf":[{"$ref":"#/components/schemas/FiltersV2"},{"type":"null"}],"description":"Новые фильтры."},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Включить или выключить подписку."}},"type":"object","title":"WebhookUpdateV3","description":"Изменение подписки – передавайте только изменяемые поля."},"WebhookV3":{"properties":{"id":{"type":"integer","title":"Id","description":"Идентификатор подписки."},"target":{"type":"string","title":"Target","description":"Адрес доставки."},"object_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Object Ids","description":"Объекты, по которым приходят события. `null` – по всем."},"event_types":{"items":{"type":"string","enum":["reviews.new","replies.new","scrape.run.finished"]},"type":"array","title":"Event Types","description":"События подписки."},"bucket_window":{"type":"string","title":"Bucket Window","description":"Окно группировки событий в одну доставку."},"filters":{"$ref":"#/components/schemas/FiltersV2","description":"Фильтры выдачи событий."},"is_active":{"type":"boolean","title":"Is Active","description":"Включена ли подписка."},"failure_count":{"type":"integer","title":"Failure Count","description":"Сколько неудачных доставок подряд."},"last_failure_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Failure At","description":"Момент последней неудачи (UTC, ISO 8601)."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Момент создания подписки (UTC, ISO 8601)."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Момент последнего изменения (UTC, ISO 8601)."}},"type":"object","required":["id","target","event_types","bucket_window","filters","is_active","failure_count","created_at","updated_at"],"title":"WebhookV3","description":"Подписка на события."}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"},"APIKeyCookie":{"type":"apiKey","in":"cookie","name":"rewio_session"}}},"tags":[{"name":"sources","description":"Список поддерживаемых площадок отзывов."},{"name":"objects","description":"Объекты – единицы бизнеса, отзывы по которым собираются (филиал, клиника, конкретный специалист). Создание, просмотр, изменение и удаление объектов."},{"name":"folders","description":"Папки объектов. Позволяют запросить отзывы сразу по нескольким объектам одним параметром `folder_id` – см. `GET /v3/reviews` и `GET /v3/analytics`."},{"name":"links","description":"Ссылки внутри объекта – страницы объекта на площадках, по одной на площадку. Добавление, изменение и удаление ссылок, статус сбора отзывов."},{"name":"reviews","description":"Нормализованные отзывы объекта с фильтрацией, сортировкой и пагинацией."},{"name":"hidden & pinned","description":"Скрытие ненужных и закрепление нужных отзывов внутри объекта; сами отзывы не меняются."},{"name":"replies","description":"Ответы на отзывы от лица организации: публикация, замена и удаление. Форма запроса одна для всех площадок."},{"name":"complaints","description":"Жалобы на отзывы: форма площадки, подача и итог. Отзыв называете вы, форму – площадка (Яндекс – текст, 2ГИС – категория и текст, Google – категория)."},{"name":"analytics","description":"Агрегированная аналитика по отзывам объекта: сводка и динамика."},{"name":"webhooks","description":"Вебхуки: уведомления о новых отзывах, новых ответах и завершении сбора.\n\n**Быстрый старт:**\n1. `POST /v3/webhooks` с `{\"target\": \"https://...\", \"event_types\": [\"reviews.new\"]}` – создать вебхук.\n2. `POST /v3/webhooks/{id}/test` – тестовая доставка на ваш endpoint.\n3. Принимайте POST-запросы с событием `reviews.new` (дайджест новых отзывов по вашим объектам); отвечайте `2xx`.\n4. Отвечайте `2xx` быстро. Недоставленные события мы повторяем сами, а не доставленное после всех попыток пишем вам письмом.\n\n**Секрет подписи – один на аккаунт** (виден всегда): `GET /v3/webhooks/secret`; перевыпуск – `POST /v3/webhooks/rotate-secret` (старый действует ещё 24ч).\n\n**Проверка подписи** (опциональна, но рекомендуется): заголовок `X-Hrev-Signature: sha256=<hex>`, где `hex = HMAC_SHA256(secret, \"{X-Hrev-Timestamp}.\" + raw_body)`. Сравнивайте constant-time-функцией; отклоняйте запросы, у которых `|now − X-Hrev-Timestamp| > 300` секунд. Дедуплицируйте по `X-Hrev-Delivery-Id` (при ретраях один дайджест может прийти дважды). Отвечайте 2xx в течение 10 секунд; 5xx/408/429/таймаут – будет ретрай по нарастающей лестнице (30с → 30м, до 30 попыток за ~12ч), прочие 4xx – доставка помечается failed без ретраев. Подписка сама не отключается при неуспешных доставках.\n\n"},{"name":"health","description":"Доступность API. Ключ не нужен: оба метода отвечают и без заголовка `X-API-Key`, поэтому им удобно отделять проблему с сетью от проблемы с ключом."},{"name":"support","description":"Написать в поддержку: вопрос по API, ошибка, просьба. Работает с любым ключом, включая `read_only`. Номер аккаунта, почта и тариф подставляются сами – писать их в тексте не нужно."}]}