ReviewLab API integration

The API returns widget content as JSON: per-platform ratings and the reviews themselves. Markup and rendering are up to you.

Contents

Who needs the API

The ready-made widget only has to be dropped onto a page — it renders the review block itself. The API is for cases where that block does not fit: you want your own markup, ratings inside a mobile app, or the data in your CMS.

The data is the same either way. The only difference is who renders the interface.

Data received through the API is meant for display on your own company websites. Passing it to third parties and publishing it on your clients' websites require the partner plan.

Getting started

API access is included in annual plans. To get started:

  1. Sign up in the dashboard
  2. Create a widget and add links to the locations you want reviews collected from
  3. Pay for an annual plan with the request volume you need

These endpoints need no authentication: access is determined by the widgetId. You can find it in the address bar on the widget page in your dashboard.

Rate limits

Widget impressions on your websites are not limited. The limit applies to API requests and depends on your plan. The counter resets on the 1st of every month.

For high-traffic websites, cache the data on your side. Reviews are refreshed once a day, so there is no need to request them on every page load: the limit lasts far longer and pages load faster.

If the limit is not enough, write to info@reviewlab.pro — we will pick a plan or an extra request package for your volume.

Widget data

Returns widget settings and review aggregates: overall rating, review count, per-platform and per-star breakdowns. This endpoint does not return the reviews themselves — see the next section for those.

GET
https://app.reviewlab.pro/api/v1/widgets/widget/:widgetId/remote
  • widgetIdstringYes
    Widget identifier (path parameter)

Response, the fields that matter:

json
{  "_id": "65f3c0a1b2d4e5f60718293a",  "title": "Clinic reviews",  "url": "https://example.com",  "totalRating": 4.8,  "totalReviewAmount": 512,  "reviewAmount": {    "googleMap": 512  },  "reviewStars": {    "one": 4, "two": 6, "three": 18, "four": 96, "five": 388  },  "googleMapRating": 4.8,  "sources": [    {      "type": "googleMap",      "url": "https://www.google.com/maps/place/example",      "updatedAt": "2026-09-01T03:12:44.000Z"    }  ]}

The response also carries display settings (customSettings, customStyles and others) — the widget needs them, your own markup can ignore them. The rating of each platform sits in a separate <platform code>Rating field; see the code reference below.

Widget reviews

Returns the widget review list with pagination and per-platform filtering.

GET
https://app.reviewlab.pro/api/v1/widgets/widget/:widgetId/reviews/remote?limit=20

Parameters

  • widgetIdstringYes
    Widget identifier (path parameter)
  • limitnumberYes
    How many reviews to return. Maximum 300; a larger value returns 400.
  • skipnumberNo
    How many reviews to skip. Defaults to 0.
  • typestringNo
    Return reviews from a single platform. Accepted values are below.

Type values

Platform codes accepted by the parameter:

ValuePlatform
googleMapGoogle Maps

Reviews come only from the platforms whose links are added to the widget. If a platform has no reviews, the response is an empty array.

Examples

bash
# First 20 reviewscurl "https://app.reviewlab.pro/api/v1/widgets/widget/65f3c0a1b2d4e5f60718293a/reviews/remote?limit=20" # Second pagecurl "https://app.reviewlab.pro/api/v1/widgets/widget/65f3c0a1b2d4e5f60718293a/reviews/remote?limit=20&skip=20" # Google Maps reviews onlycurl "https://app.reviewlab.pro/api/v1/widgets/widget/65f3c0a1b2d4e5f60718293a/reviews/remote?limit=20&type=googleMap"

Response format

An array of reviews:

json
[  {    "_id": "65f3c0a1b2d4e5f607182940",    "name": "Anna K.",    "photo": "https://cdn.reviewlab.pro/avatars/anna.jpg",    "message": "Booked through the website, everything went great.",    "images": ["https://cdn.reviewlab.pro/reviews/1.jpg"],    "rating": 5,    "date": "2026-08-14T09:20:00.000Z",    "src": "https://www.google.com/maps/place/example",    "type": "googleMap"  }]
  • _idstringAlways
    Review identifier
  • namestringAlways
    Author name as published on the platform
  • photostringAlways
    Author avatar URL
  • messagestringOptional
    Review text. Missing for reviews without text
  • imagesstring[]Optional
    URLs of photos attached to the review
  • ratingnumberOptional
    Score from 1 to 5
  • datestringOptional
    Review date on the platform, ISO 8601
  • srcstringAlways
    Link to the review on the platform
  • typestringAlways
    Platform code, see the reference

Pagination

Page through the data with skip and limit. The total review count lives in totalReviewAmount of the widget data — use it to work out the number of pages.

javascript
const LIMIT = 20 const fetchPage = (page) =>  fetch(    `https://app.reviewlab.pro/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)

Errors

  • 400Bad Request
    limit is above 300, not a number or missing; type holds a value outside the platform code list. Widget reviews answer with the same code when no widget matches the widgetId
  • 404Not Found
    No widget with this widgetId — returned by widget data only

Handle errors on your side: an empty review block usually beats broken markup when a request fails.

Support

Missing an endpoint, a field or headroom in the limit — write to info@reviewlab.pro. Describe the task: what you collect and at what volume. That makes the answer faster.

Links

ExampleFAQFeaturesFor Developers / APIPricingCareersSitemapPromotionsReviewsContactsAbout us
ReviewLab 2026 © All rights reservedPrivacy PolicyUser AgreementDPACookie Policy