TikToktiktok.shop.products.reviews.list

TikTok Shop product reviews API

Buyers' reviews of a TikTok Shop product: stars, text, the variant bought, photos and whether the purchase is verified.

GEThttps://api.okdata.online/v1/tiktok/shop/products/reviews/list

Price

One call costs $0.002 and returns one page of about 20 reviews. Collecting 1,000 reviews takes about 50 calls, $0.10 in total. Each page is a separate call; failed calls are not charged.

Parameters

NameTypeDescription
id *requiredstringThe product ID. e.g. 1732296652516463425
countrystringShop region as an ISO country code; US by default and the most complete. e.g. US
cursorstringOpaque cursor from page.next_cursor of the previous call. Each page is a separate call.
viewstringcompactstandardfullHow much of each object comes back. full adds platform-specific fields under ext. default standard
fieldsstringComma-separated fields to keep, to save tokens.

cursor, view and fields work the same on every endpoint: how requests work.

Returned fields

Each item is a Review.

FieldTypeDescription
idstringReview ID.
product_idstringID of the product reviewed.
ratingnumber | nullStars, 1 to 5.
textstringReview text; empty when the buyer left only stars.
published_atstring | nullWhen it was posted, ISO 8601 in UTC (a day for platforms that show only the date).
author_namestring | nullReviewer name as the shop shows it, often masked.
variantstring | nullThe variant bought.
imagesstring[] | nullPhotos attached to the review.
likesinteger | nullLikes on the review.
verified_purchaseboolean | nullWhether the shop marks it as a verified purchase.

Request

cURL
curl -G "https://api.okdata.online/v1/tiktok/shop/products/reviews/list" \
  -H "Authorization: Bearer $OKDATA_API_KEY" \
  --data-urlencode 'id=1732296652516463425'
Python
import os
import requests

resp = requests.get(
    "https://api.okdata.online/v1/tiktok/shop/products/reviews/list",
    headers={"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"},
    params={"id": "1732296652516463425"},
    timeout=60,
)
body = resp.json()
if body["code"] != "ok":
    raise RuntimeError(f"{body['code']}: {body['message']} (charged: {body['charged']})")

for row in body["data"]["items"]:
    print(row["rating"], row["text"][:80])
print("cost: $" + body["meta"]["billing"]["amount"])
TypeScript
const url = new URL('https://api.okdata.online/v1/tiktok/shop/products/reviews/list');
url.searchParams.set('id', "1732296652516463425");

const res = await fetch(url, {
  headers: {
    Authorization: `Bearer ${process.env.OKDATA_API_KEY}`,
  },
});
const body = await res.json();
if (body.code !== 'ok') throw new Error(`${body.code}: ${body.message}`);

for (const row of body.data.items) {
  console.log(row.rating, row.text.slice(0, 80));
}
console.log('cost: $' + body.meta.billing.amount);
MCPtools/call
{
  "name": "call",
  "arguments": {
    "endpoint": "tiktok.shop.products.reviews.list",
    "params": {
      "id": "1732296652516463425"
    }
  }
}

Or ask an agent that has the MCP server connectedUse TikTok Shop product reviews, read the first two pages and sum up what buyers like and what they complain about.

Response

200 · application/jsonmeta.billing.amount = 0.002
{
  "code": "ok",
  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
  "data": {
    "items": [
      {
        "id": "7667220239340095245",
        "product_id": "1732296652516463425",
        "rating": 5,
        "text": "Charges on the USB in my car. Excellent for coffee on the go.",
        "published_at": "2026-07-27T14:10:24Z",
        "author_name": "T** M**h",
        "variant": "Default",
        "images": [
          "https://cdn.example.com/review/1.jpg"
        ],
        "likes": 42,
        "verified_purchase": true
      }
    ]
  },
  "page": {
    "next_cursor": "eyJvIjoyMH0",
    "has_more": true
  },
  "warnings": [],
  "meta": {
    "capability": "tiktok.shop.products.reviews.list",
    "billing": {
      "amount": "0.002",
      "currency": "USD",
      "balance_after": "9.998"
    },
    "unavailable": {},
    "cached": false,
    "replayed": false,
    "fetched_at": "2026-11-11T08:00:00Z"
  }
}

Try it

This sends a real call to https://api.okdata.online and is billed as usual: at most $0.002. Failed calls are free. Your key goes only to that address and is never stored on this site.

Questions

How much does the TikTok Shop product reviews API cost?

One call costs $0.002 and returns one page of about 20 reviews. Collecting 1,000 reviews takes about 50 calls, $0.10 in total. Each page is a separate call; failed calls are not charged.

How do I get the next page?

Pass page.next_cursor from the response back as the cursor parameter. When page.has_more is false there is nothing left. Every page is its own call at $0.002.

Do I need a TikTok account, cookies or a QR login?

No. You send only your okdata API key. The data is public data from TikTok; nothing is fetched with your own TikTok account.

Am I charged when a call fails?

No. Every error response says charged: false, except a timeout, which says charged: null until the outcome is known. Resend with the same Idempotency-Key and you are never charged twice.

What if TikTok does not show a field?

The field is null, and meta.unavailable names it with the reason: platform (the platform never shows it) or capability (we cannot fetch it yet).

Answers that use this endpoint

All TikTok endpoints → · Answers