The API returns widget content as JSON: per-platform ratings and the reviews themselves. Markup and rendering are up to you.
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.
API access is included in annual plans. To get started:
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.
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.
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.
https://app.reviewlab.pro/api/v1/widgets/widget/:widgetId/remoteResponse, the fields that matter:
{ "_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.
Returns the widget review list with pagination and per-platform filtering.
https://app.reviewlab.pro/api/v1/widgets/widget/:widgetId/reviews/remote?limit=200.Platform codes accepted by the parameter:
| Value | Platform |
|---|---|
googleMap | Google 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.
# 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"An array of reviews:
[ { "_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" }]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.
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)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 widgetIdwidgetId — returned by widget data onlyHandle errors on your side: an empty review block usually beats broken markup when a request fails.
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.
Contacts