Properties
| Name | Type | Description |
|---|---|---|
| id | integer | Идентификатор отзыва в сервисе. |
| link_id | integer | Идентификатор ссылки (страницы объекта на площадке). |
| source_id | integer | Идентификатор площадки, с которой собран отзыв. |
| source_slug | object | Слаг площадки, с которой собран отзыв (`2gis`, `google`, `yandex_maps`). Отвечать можно, если он совпадает с `provider` отзыва. |
| author | object | Имя автора; `null`, если анонимен. |
| text | object | Текст отзыва; `null`, если отзыв без текста. |
| review_date | object | Дата и время публикации отзыва. Приводится к UTC везде, где это возможно; в противном случае – время, как его показывает площадка. ISO 8601 без таймзоны. |
| rating_original | object | Исходная оценка в шкале площадки. |
| rating | object | Оценка, приведённая к единой шкале 1–5. `null`, если оценки нет. |
| review_url | object | Прямая ссылка на отзыв на площадке. `null`, если недоступна. |
| reply_text | object | Текст официального ответа организации. `null`, если ответа нет. |
| reply_date | object | Дата и время ответа организации (ISO 8601). Приводится к UTC, где это возможно. |
| provider | object | Площадка-источник самого отзыва внутри `source` (слаг в нижнем регистре). Многие площадки показывают в ленте отзывы других: 2ГИС – `booking`/`tbank`/`flamp`/…, Google – `tripadvisor`. У нативного отзы |
| is_replyable | object | Можно ли ответить на отзыв через `PUT /v3/reviews/{review_id}/reply`. Приходит только на площадках, где Rewio публикует ответы (`can_publish_reply` в `GET /v3/sources`); на остальных ключа нет. `true` |
| has_images | boolean | Признак наличия изображений в отзыве. |
| images | array | Список изображений отзыва. |
| has_videos | boolean | Признак наличия видео в отзыве. |
| videos | array | Список видеовложений отзыва. |
| is_deleted | boolean | Отзыв обнаружен удалённым на площадке (приходит только когда `true`). |
| deleted_at | object | Момент обнаружения удаления (UTC, ISO 8601). |
| is_hidden | boolean | Отзыв скрыт в рамках объекта (приходит только когда `true`). |
| is_pinned | boolean | Отзыв закреплён в рамках объекта (приходит только когда `true`). |
| pin_position | object | Позиция закреплённого отзыва: меньше – выше. |
| pros | object | Блок «достоинства» (только при `split_pros_cons=true`). |
| cons | object | Блок «недостатки» (только при `split_pros_cons=true`). |
| our_reply | object | Ваш ответ, отправленный через Rewio, и его состояние – то же, что в `GET /v3/reviews/{review_id}/reply`. `null` – ответа через Rewio нет или тариф без ответов. Ответ, поставленный не через Rewio, – в |
| is_skipped | boolean | Вы отметили отзыв «Пропустить» (`PUT /v3/reviews/{review_id}/skip`). На тарифе без ответов всегда `false`. |
| complaint | object | Последняя жалоба на отзыв. `null` – жалоб нет или тариф без жалоб. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/rewio-ru/json-schema/rewio-ru-review-v3-schema.json",
"title": "ReviewV3",
"description": "Отзыв, приведённый к общей модели.",
"x-generated": "2026-10-31",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/rewio-ru-openapi.json#/components/schemas/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": "#/$defs/ReviewImageV2"
},
"type": "array",
"title": "Images",
"description": "Список изображений отзыва.",
"default": []
},
"has_videos": {
"type": "boolean",
"title": "Has Videos",
"description": "Признак наличия видео в отзыве.",
"default": false
},
"videos": {
"items": {
"$ref": "#/$defs/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": "#/$defs/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": "#/$defs/ComplaintBriefV3"
},
{
"type": "null"
}
],
"description": "Последняя жалоба на отзыв. `null` – жалоб нет или тариф без жалоб."
}
},
"type": "object",
"required": [
"id",
"link_id",
"source_id",
"has_images"
],
"$defs": {
"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": "Последняя жалоба на отзыв – ваша или найденная на площадке."
},
"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": "#/$defs/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принесёт."
},
"ReplyErrorV3": {
"properties": {
"code": {
"type": "string",
"title": "Code",
"description": "Машинный код ошибки публикации."
},
"message": {
"type": "string",
"title": "Message",
"description": "Пояснение для человека.",
"default": ""
}
},
"type": "object",
"required": [
"code"
],
"title": "ReplyErrorV3",
"description": "Последняя ошибка публикации."
},
"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``."
},
"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)."
}
}
}
Work with this as data
Every JSON Schema 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 schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.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.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/rewio-ru-review-v3"
All schemas
curl "https://apis.io/api/v1/json-schemas?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.