rewio-ru · Schema

ReviewV3

Отзыв, приведённый к общей модели.

ReviewsAPIAggregationRussianMaps

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` – жалоб нет или тариф без жалоб.
View JSON Schema on GitHub

JSON Schema

rewio-ru-review-v3-schema.json Raw ↑
{
  "$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.
All 92 tools →

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.