Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/rewio-ru:rewio-ru-webhooks-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Review Aggregator Webhooks API
description: 'Единый REST API для отзывов: сервис собирает отзывы с площадок (Яндекс Карты, 2ГИС, Google, Островок, ДокДок и др.), приводит их к общей модели и отдаёт с фильтрами и аналитикой.
📚 **Гайды, quickstart и полный справочник – на портале разработчика: https://docs.rewio.ru**
#### Как начать
1. Создайте **объект** – единицу бизнеса, отзывы по которой собираем.
2. Добавьте в него **ссылки** на страницы объекта на нужных площадках.
3. Запрашивайте **отзывы** и **аналитику** – данные обновляются дважды в сутки.
#### Что вы получаете по каждому отзыву
- **Текст**, **автор**, **оценка** – приведена к единой шкале 1–5 независимо от площадки
- **Ответ организации** – текст и дата
- **Изображения и видео** – превью и полноразмерные ссылки
#### Работа с отзывами
На тарифе «Полный»:
- **Ответы** – публикация, замена и удаление ответа от лица организации (на пробном доступе – 3 на площадку)
- **Жалобы** – подача жалобы на отзыв через форму площадки и её итог (на пробном доступе – 3 на площадку)
- **Дополнительный сбор** – новые отзывы по объекту вне расписания, раз в сутки (на пробном доступе – 5 сборов)
#### Соглашения
- **Базовый URL:** `https://api.rewio.ru`. Актуальная версия – `/v3`.
- **Авторизация:** заголовок `X-API-Key: ` в каждом запросе. Области ключа: `read_only` / `full`.
- **Формат:** JSON на вход и выход.
- **Даты:** UTC, ISO 8601 без таймзоны (`2026-02-25T09:28:07`). Время площадки (`review_date`, `reply_date`) приводится к UTC везде, где это возможно; в противном случае – как на площадке.
- **Оценки:** нормализованы к единой шкале 1–5 независимо от площадки; исходное значение площадки сохраняется отдельно (`rating_original`).
- **Списки:** ключ элементов всегда `data`. Постраничные ответы – `{data, total, limit, offset, has_next}` (параметры `limit` 1–1000 и `offset`); полные списки – только `{data}`.
- **Ошибки:** единый формат `{"detail": "...", "code": "..."}` с машиночитаемым `code`. Отдельно стоит `402`: доступ приостановлен (закончился пробный период или оплата) либо площадка не входит в тариф – повтор запроса не поможет.
- **Ограничение частоты:** при слишком частых запросах – `429`; повторите с задержкой.
#### Проба
В блоке авторизации уже подставлен тестовый ключ (только чтение) – можно сразу выполнить любой GET-запрос.
**Тестовый ключ (только чтение):** `hrev_FaDGMKJEDDeCR5BCBgEg0aEjMogI7O7hOzE53YY4T1M`
**Тестовый объект:** Отель Националь, **object_id = 20**
Бесплатный тестовый доступ на создание 30 объектов.
**Подключение и доступ:** 📧 info@rewio.ru · ✈️ @const_rewio'
version: 3.0.0
servers:
- url: https://api.rewio.ru
description: Production
tags:
- name: Webhooks
description: 'Вебхуки: уведомления о новых отзывах, новых ответах и завершении сбора.
**Быстрый старт:**
1. `POST /v3/webhooks` с `{"target": "https://...", "event_types": ["reviews.new"]}` – создать вебхук.
2. `POST /v3/webhooks/{id}/test` – тестовая доставка на ваш endpoint.
3. Принимайте POST-запросы с событием `reviews.new` (дайджест новых отзывов по вашим объектам); отвечайте `2xx`.
4. Отвечайте `2xx` быстро. Недоставленные события мы повторяем сами, а не доставленное после всех попыток пишем вам письмом.
**Секрет подписи – один на аккаунт** (виден всегда): `GET /v3/webhooks/secret`; перевыпуск – `POST /v3/webhooks/rotate-secret` (старый действует ещё 24ч).
**Проверка подписи** (опциональна, но рекомендуется): заголовок `X-Hrev-Signature: sha256=`, где `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 без ретраев. Подписка сама не отключается при неуспешных доставках.'
paths:
/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: 'Подписаться на события: новые отзывы, новые ответы, конец цикла сбора.
`object_ids` сужает подписку до перечисленных объектов; без него события
приходят по всем вашим. Подпись доставки проверяется секретом аккаунта –
он один на все ваши подписки, см. `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: 'Секрет, которым подписаны все доставки аккаунта. Первый вызов его создаёт.
Требует ключ со scope `full`: секрет проверяет
подпись доставок, ключу «только чтение» он не полагается.'
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 часа: за это время обновите
проверку подписи на своей стороне.'
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: 'Изменить подписку: адрес, состав объектов, события, окно, фильтры,
включённость. Передавайте только то, что меняется.'
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'
components:
schemas:
TestSubscriptionResponse:
properties:
status:
type: string
const: queued
title: Status
test_id:
type: string
title: Test Id
type: object
required:
- status
- test_id
title: TestSubscriptionResponse
ReturnAll_WebhookV3_:
properties:
data:
items:
$ref: '#/components/schemas/WebhookV3'
type: array
title: Data
description: Все элементы (пагинации нет).
type: object
required:
- data
title: ReturnAll[WebhookV3]
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.
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
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
/webhooks/secret` (always) and `POST /webhooks/rotate-secret`.'
examples:
- secret: whsec_...
example:
secret: whsec_...
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
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