> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/shopify/products-handle-reviews>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/shopify/products-handle-reviews.mdx>

---

# Shopify Product Reviews API

The reviews a storefront publishes for one product.

`GET /v1/shopify/products/{handle}/reviews?store=…` returns `data.reviewsAvailable`, `data.reviews` and `data.page`. Each review has `id`, `productId`, `rating`, `title`, `body`, `author`, `verified`, `recommended`, `incentivised`, `helpfulCount`, `language`, `createdAt`, `updatedAt`, `variant`, `sku`, `reply`, `media`, `sentiment` and `customQuestions`.

Use `sort` (`newest`, `rating`, `helpful`, `with_photos`) and `rating` to narrow. A widget that does not support a sort answers in its own order. When the store publishes no supported review widget, `reviewsAvailable` is false and `reviews` is empty for that reason.

Some review widgets return reviews for related products as well. Every row carries its own `productHandle`, so filter on it when you need reviews for the requested product only.

## Request

- **Endpoint:** `GET /v1/shopify/products/{handle}/reviews`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by store and handle
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/shopify/products/handle/reviews/get)
- **Platform page:** [/platforms/shopify](https://www.socialfetch.dev/platforms/shopify)

## FAQ

### Why is reviewsAvailable false?

The store did not publish a supported review widget for this product. The list is empty because no reviews are available, not because the product has no reviews.

### Does sort always apply?

sort is a request. A widget that does not support the chosen order answers in its own order rather than failing.

### Why is a review for another product in the list?

Some widgets return reviews for related products. Each row carries its own productHandle, so filter on it when you need reviews for the requested product only.

### How do I page?

Read page.hasMore and pass page.nextCursor back as cursor with the same filters.

### How do I name the store?

The store is the domain, for example allbirds.com, www.allbirds.com or weareallbirds.myshopify.com. A full URL is reduced to its host.

### How is it billed?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. Each paginated page is a separate billed request.

### What does lookupStatus mean?

found means the lookup succeeded. not_found means the store or entity does not exist or is not a Shopify store. private means the storefront is password-protected. restricted means it is paused or frozen. HTTP 200 only means the request finished, so branch on lookupStatus.
