WooCommerce API — Store-Wide Reviews as JSON
Documentation menu
FetchLayer FetchLayer API

Get a store's reviews

Read a store's reviews across every product from its review source, newest first by default: a store-wide average rating, review count and star distribution, then each review in the same shape /product-reviews returns, carrying the product it was left on when known. REVIEWS.io and CusRev also mix in reviews of the store itself, which carry a null product; the Yotpo, Stamped and Judge.me feeds are product reviews only. A store using none of the supported sources is a 404, and so is one whose sources have no reviews.

POST /store-reviews Reviews
https://api.fetchlayer.dev/woocommerce-stores/store-reviews
OpenAPI JSON

Headers

Authorization string required

Bearer token — your FetchLayer API key.

Parameters

store string required

Store domain, for example example.com, or any URL on the store. 3–255 characters.

provider string optional

woocommerce (the store's native reviews), cusrev, judgeme, yotpo, stamped or reviewsio. Omit to use whichever source the store has. Naming one the store does not use is a 404, and so is naming woocommerce on a store whose native reviews are not published. Naming an app it uses that has no reviews is a 200 with an empty list and a note.

limit number optional

Maximum reviews returned (max 500). (default: 20)

cursor string optional

Resume from a previous response's nextCursor. Send the same other parameters with it: a cursor replayed with different ones is a 400.

sort string optional

newest, highest, lowest or helpful. CusRev supports only newest and helpful. (default: newest)

format string optional

json or markdown. (default: json)

timeoutMs number optional

Per-request time limit in milliseconds (max 600000).

Response Fields

store-reviews

Get a store's reviews

requestedUrl string

The store this result corresponds to.

scrapedAt string

ISO 8601 timestamp of the read.

blocked boolean

Always false on a successful response.

transport string

Always woocommerce-store.

store string

The store domain the reviews were read for.

provider string

The review source that answered: woocommerce, cusrev, judgeme, yotpo, stamped or reviewsio.

summary.averageRating number | null

Average star rating, or null when the source does not publish one.

summary.reviewCount number | null

Total reviews the source reports, not just the ones in this response.

summary.ratingDistribution object | null

Review count per star, keyed "1" to "5". Null for native WooCommerce reviews and CusRev, which do not publish one.

reviews object[]

The reviews, in the requested sort order.

reviews[].id string

The review's id on its source.

reviews[].rating number

Star rating, 1 to 5.

reviews[].title string | null

Review headline, where the source has one.

reviews[].body string

Review text. Can be empty for a rating-only review.

reviews[].author object

name, verified (a confirmed buyer) and country, each null when the source does not say.

reviews[].createdAt string | null

When the review was written, as an ISO timestamp.

reviews[].product object | null

The product the review was left on: id, handle (the product slug) and title. Null on a review of the store itself.

reviews[].media object[]

Customer photos and videos, each with type and url.

reviews[].reply object | null

The merchant's public reply: body and createdAt.

reviews[].helpful object | null

Helpful votes as up and down. Null where the source has no votes, including native WooCommerce reviews.

reviews[].sourceUrl string | null

The page the review appears on.

nextCursor string | null

Pass back as cursor to continue, or null when there are no more reviews.

pagesScraped number

Pages of reviews returned: the review count divided by the page size the source uses, rounded up, minimum 1. Rating-breakdown lookups, detection probes, storefront page reads and retries are not counted. Each page counts as one request against your plan.

notes string[]

Caveats about this result, such as a named app that has no reviews. Read it before treating a result as complete.

Request

curl -X POST "https://api.fetchlayer.dev/woocommerce-stores/store-reviews" \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"store":"otimos.co.uk","limit":20}'

Response

{
  "blocked": false,
  "requestedUrl": "https://otimos.co.uk",
  "resultType": "store-reviews",
  "store": "otimos.co.uk",
  "provider": "reviewsio",
  "summary": {
    "averageRating": 4.86,
    "reviewCount": 588,
    "ratingDistribution": {
      "1": 4,
      "2": 1,
      "3": 11,
      "4": 40,
      "5": 530
    }
  },
  "reviews": [
    {
      "id": "store_review-30914521",
      "provider": "reviewsio",
      "rating": 5,
      "title": null,
      "body": "Pillow is easy to use and small enough to throw in the bag. Used it for a 10 day hike In greenland and it worked well and wasn't too heavy at 155g.",
      "author": {
        "name": "Vicki Guy",
        "verified": true,
        "country": null
      },
      "createdAt": "2026-09-12T23:48:43.000Z",
      "product": null,
      "media": [],
      "reply": null,
      "helpful": {
        "up": 0,
        "down": null
      },
      "sourceUrl": null
    }
  ],
  "nextCursor": "eyJ2IjoxLCJwIjoicmV2aWV3c2lvIg",
  "pagesScraped": 1,
  "notes": []
}