API отдаёт содержимое виджета в формате JSON: рейтинги по площадкам и сами отзывы. Разметку и отображение вы делаете на своей стороне.
Готовый виджет достаточно вставить на страницу — он рисует блок отзывов сам. API нужен, когда такой блок не подходит: вы хотите сверстать его под свой дизайн, показать оценки в мобильном приложении или положить данные в свою CMS.
Данные в обоих случаях одни и те же. Разница только в том, кто рисует интерфейс.
Данные, полученные через API, предназначены для показа на сайтах вашей компании. Передача данных третьим лицам и размещение на сайтах ваших клиентов доступны на партнёрском тарифе.
Доступ к API входит в тарифы Медиум и Эксперт. Чтобы начать:
Авторизация для этих запросов не нужна: доступ определяется по widgetId. Идентификатор виджета видно в адресной строке на его странице в личном кабинете.
Показы виджета на ваших сайтах не ограничиваются. Лимит действует на запросы к API и зависит от тарифа:
| Тариф | Запросов в месяц |
|---|---|
| Медиум | 100 000 |
| Эксперт | 200 000 |
| Премиум | 1 000 000 |
Счётчик обнуляется 1 числа каждого месяца.
Если у сайта большая посещаемость, кешируйте полученные данные на своей стороне. Отзывы обновляются раз в сутки, поэтому запрашивать их при каждом открытии страницы не нужно: так лимит расходуется в разы медленнее, а страницы грузятся быстрее.
Если лимита не хватает, напишите на info@reviewlab.ru — подберём тариф или дополнительный пакет запросов под ваш объём.
Возвращает настройки виджета и агрегаты по отзывам: общий рейтинг, количество отзывов, разбивку по площадкам и по звёздам. Отзывы этот метод не отдаёт — за ними идите в следующий раздел.
https://app.reviewlab.ru/api/v1/widgets/widget/:widgetId/remoteОтвет, значимые поля:
{ "_id": "65f3c0a1b2d4e5f60718293a", "title": "Отзывы о клинике", "url": "https://example.ru", "totalRating": 4.8, "totalReviewAmount": 512, "reviewAmount": { "yaSprav": 210, "googleMap": 180, "doubleGis": 122 }, "reviewStars": { "one": 4, "two": 6, "three": 18, "four": 96, "five": 388 }, "yaSpravRating": 4.9, "googleMapRating": 4.7, "doubleGisRating": 4.8, "sources": [ { "type": "yaSprav", "url": "https://yandex.ru/maps/org/example/1234567890", "updatedAt": "2026-09-01T03:12:44.000Z" } ]}Кроме этого в ответе приходят настройки отображения (customSettings, customStyles и другие) — они нужны самому виджету, для своей вёрстки их можно игнорировать. Рейтинг по каждой площадке лежит в отдельном поле вида <код площадки>Rating, коды — в справочнике ниже.
Возвращает список отзывов виджета с пагинацией и фильтрацией по площадке.
https://app.reviewlab.ru/api/v1/widgets/widget/:widgetId/reviews/remote?limit=200.Коды площадок, которые принимает параметр:
| Значение | Площадка |
|---|---|
yaSprav | Яндекс Карты |
googleMap | Google Maps |
doubleGis | 2GIS |
vkontakte | Вконтакте |
avito | Авито |
zoon | Zoon |
prodoctorov | ПроДокторов |
otzovik | Отзовик |
flamp | Flamp |
sberHealth | СберЗдоровье |
yclients | YCLIENTS |
irecommend | Irecommend |
naPopravku | НаПоправку |
yell | Yell |
yaBusiness | Яндекс Бизнес |
yaService | Яндекс Услуги |
Отзывы придут только с тех площадок, ссылки на которые добавлены в виджет. Если по площадке отзывов нет, ответ будет пустым массивом.
# Первые 20 отзывовcurl "https://app.reviewlab.ru/api/v1/widgets/widget/65f3c0a1b2d4e5f60718293a/reviews/remote?limit=20" # Вторая страницаcurl "https://app.reviewlab.ru/api/v1/widgets/widget/65f3c0a1b2d4e5f60718293a/reviews/remote?limit=20&skip=20" # Только отзывы с Авитоcurl "https://app.reviewlab.ru/api/v1/widgets/widget/65f3c0a1b2d4e5f60718293a/reviews/remote?limit=20&type=avito"Массив отзывов:
[ { "_id": "65f3c0a1b2d4e5f607182940", "name": "Анна К.", "photo": "https://cdn.reviewlab.ru/avatars/anna.jpg", "message": "Записалась через сайт, всё прошло отлично.", "images": ["https://cdn.reviewlab.ru/reviews/1.jpg"], "rating": 5, "date": "2026-08-14T09:20:00.000Z", "src": "https://yandex.ru/maps/org/example/reviews", "type": "yaSprav" }]Постранично данные забираются комбинацией skip и limit. Общее количество отзывов лежит в totalReviewAmount у данных виджета — по нему считается число страниц.
const LIMIT = 20 const fetchPage = (page) => fetch( `https://app.reviewlab.ru/api/v1/widgets/widget/65f3c0a1b2d4e5f60718293a/reviews/remote` + `?limit=${LIMIT}&skip=${page * LIMIT}` ).then((res) => res.json()) const firstPage = await fetchPage(0)const secondPage = await fetchPage(1)limit больше 300, не число или не передан; у type значение вне списка кодов площадок. Этим же кодом отвечают отзывы виджета, если виджет с таким widgetId не найденwidgetId не найден — только у данных виджетаОбрабатывайте ошибки на своей стороне: если запрос не удался, показывать пустой блок отзывов обычно лучше, чем сломанную вёрстку.
Не хватает метода, поля или лимита — напишите на info@reviewlab.ru. Опишите задачу: что собираете и в каком объёме, — так быстрее подберём решение.
Ссылки