# Product reviews API

> 2 endpoints on 2 platforms return product reviews as the same Review object. Buyers’ reviews of one product, a page at a time: the stars, the text, the variant bought, photos, likes and whether the…

Canonical page: https://okdata.online/roles/products-reviews-list/

2 endpoints on 2 platforms return product reviews as the same Review object. Buyers’ reviews of one product, a page at a time: the stars, the text, the variant bought, photos, likes and whether the purchase is verified. A call costs from $0.002 to $0.02, each endpoint at its own price; a failed call is free.

## on each platform

| Platform | Endpoint | Path | A page | Price |
|---|---|---|---|---|
| TikTok | [TikTok Shop product reviews](https://okdata.online/apis/tiktok/shop/products/reviews/list/) | `GET /v1/tiktok/shop/products/reviews/list` | 20 | $0.002 per call · about 20 reviews per page |
| Xiaohongshu (RedNote) | [Xiaohongshu shop product reviews](https://okdata.online/apis/xiaohongshu/shop/products/reviews/list/) | `GET /v1/xiaohongshu/shop/products/reviews/list` | 12 | $0.02 per call · about 12 reviews per page |

## The object it returns: [Review](https://okdata.online/docs/objects/review/)

Every endpoint above returns these fields with the same names and types. A field a platform does not show comes back null and is named in meta.unavailable.

| Field | Type | Meaning |
|---|---|---|
| `id` | `string` | Review ID. |
| `product_id` | `string` | ID of the product reviewed. |
| `rating` | `number \| null` | Stars, 1 to 5. |
| `text` | `string` | Review text; empty when the buyer left only stars. |
| `published_at` | `string \| null` | When it was posted, ISO 8601 in UTC (a day for platforms that show only the date). |
| `author_name` | `string \| null` | Reviewer name as the shop shows it, often masked. |
| `variant` | `string \| null` | The variant bought. |
| `images` | `string[] \| null` | Photos attached to the review. |
| `likes` | `integer \| null` | Likes on the review. |
| `verified_purchase` | `boolean \| null` | Whether the shop marks it as a verified purchase. |

## The same call on two platforms

Same parameters, same paging, same response shape. Only the path changes.

```bash
# TikTok
curl -G "https://api.okdata.online/v1/tiktok/shop/products/reviews/list" \
  -H "Authorization: Bearer $OKDATA_API_KEY" \
  --data-urlencode 'id=1732296652516463425'

# Xiaohongshu (RedNote)
curl -G "https://api.okdata.online/v1/xiaohongshu/shop/products/reviews/list" \
  -H "Authorization: Bearer $OKDATA_API_KEY" \
  --data-urlencode 'id=6441fb9a6cd6140001acf7b4'
```

## What people use it for

- Find the complaints that keep coming up in a competitor’s one- and two-star reviews.
- Check which variant buyers are happiest with.
- Feed reviews to a model to draft the FAQ on a product page.

## Questions

### Can I get every review?

Where the shop pages its reviews, follow the cursor until page.has_more is false. Xiaohongshu’s shop shows only a first page, so that endpoint returns one page per product.

### Why is the text of a review empty?

The buyer left only stars. text is then an empty string, and rating still holds the stars they gave.

### Are reviewer names real?

They are as the shop shows them, often masked. Treat author_name as a label, not as a way to identify the buyer.

## Other data types

- [Comments API](https://okdata.online/roles/posts-comments-list/)
- [Trending topics API](https://okdata.online/roles/trends-list/)
- [Comment replies API](https://okdata.online/roles/comments-replies-list/)
- [Hashtag posts API](https://okdata.online/roles/topics-posts-list/)
- [Profile API](https://okdata.online/roles/accounts-get/)
- [Account posts API](https://okdata.online/roles/accounts-posts-list/)
- [Post detail API](https://okdata.online/roles/posts-get/)
- [Post search API](https://okdata.online/roles/posts-search/)
- [Trending posts API](https://okdata.online/roles/posts-trending/)
- [Account search API](https://okdata.online/roles/accounts-search/)
- [Post metrics API](https://okdata.online/roles/posts-metrics/)
- [Community posts API](https://okdata.online/roles/communities-posts-list/)
- [Ad detail API](https://okdata.online/roles/ads-get/)
- [Advertiser ads API](https://okdata.online/roles/advertisers-ads-list/)
- [Ad search API](https://okdata.online/roles/ads-search/)
- [Transcript API](https://okdata.online/roles/transcripts-get/)
- [Followers list API](https://okdata.online/roles/accounts-followers-list/)
- [Product detail API](https://okdata.online/roles/products-get/)
- [Product search API](https://okdata.online/roles/products-search/)
- [Creator search API](https://okdata.online/roles/creators-search/)
- [Creator profile API](https://okdata.online/roles/creators-get/)
- [Creator audience API](https://okdata.online/roles/creators-audience-get/)
