Shopify hub

Shopify Product Reviews API

The reviews a storefront publishes for one product.

GET /v1/shopify/products/{handle}/reviews

1 credit Failed requests are free

About this endpoint

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.

Shopify Product Reviews API 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.