SocialToAIStart freeConsole
POST/v1/call/xiaohongshu.product_reviewsPreview

Xiaohongshu (RedNote) product reviews API

Only on Xiaohongshu.

The Xiaohongshu (RedNote) product reviews API returns the first page of buyers' reviews of a product of Xiaohongshu's shop by the product's ID: text, rating, variant bought, pictures, likes. One call costs 12 credits ($0.024 to $0.04 depending on the pack); failed calls are free. Call it over HTTP or from your AI client over MCP. Last tested 2026-10-17.

100 credits on sign-up, no card needed
12 creditsper call
Up to 20 itemsfirst page only
2026-10-17last tested
924 Bsample response, 1 item

Last updated:

Preview: this interface is not marked stable yet, so its parameters and fields may still change. It is charged like any other call, and a failed call is not charged.

Request and response

curl https://api.socialtoai.com/v1/call/xiaohongshu.product_reviews \  -H "Authorization: Bearer $SOCIALTOAI_KEY" \  -H "Content-Type: application/json" \  -d '{    "id": "67bc0378a2e72600153d3ed1"  }'
import osimport requestsresponse = requests.post(    "https://api.socialtoai.com/v1/call/xiaohongshu.product_reviews",    headers={"Authorization": f"Bearer {os.environ['SOCIALTOAI_KEY']}"},    json={        "id": "67bc0378a2e72600153d3ed1",    },)print(response.json())
# Connected over MCP? Ask in plain words.Use the Xiaohongshu product reviews interface (xiaohongshu.product_reviews) with id: 67bc0378a2e72600153d3ed1.# Your AI calls the call tool with:{  "id": "67bc0378a2e72600153d3ed1"}
Sign in to run12 creditsOpens in the Playground with these parameters after you sign in. It never runs by itself.
200 OK924 B12 credits
{  "op": "xiaohongshu.product_reviews",  "platform": "xiaohongshu",  "status": "ok",  "items": [    {      "platform": "xiaohongshu",      "id": "…",      "ref": null,      "approx": [],      "type": "entry",      "entry_type": "review",      "title": null,      "url": null,      "rank": null,      "heat": null,      "fields": {        "product_id": null,        "text": "…",        "rating": 5,        "published_at": null,        "author": {          "label": "anonymous_1"        },        "images": ["https://example.com/…", "https://example.com/…"],        "variant": "…"      }    }  ],  "unavailable": ["fields.product_id", "fields.published_at"],  "page": {    "has_more": false  },  "cost_credits": 12}
entry_type
review
product_id
null
text
…
rating
5
published_at
null
variant
…

Names and text were removed from the sample; the numbers are as recorded.

Sample data1 of the 12 items recorded

1 parameter.
All required.

Send them as a JSON body with POST. Your key goes in the Authorization header, never in the URL.

NameTypeRequiredDefaultDescription
idstringRequired—Product ID, 24 hexadecimal characters
First page only: up to 20 items, with no cursor parameter and no next page.

Where to get what you send.

id

Product ID, 24 hexadecimal characters (e.g. 67bc0378a2e72600153d3ed1)

Every item these return carries its ref; send it as it is:

The fields of each item.
What Xiaohongshu cannot give is marked.

FieldTypeMeaning
items[].titlestringThe entry's title or name.
items[].urlstringA link that opens it; null where the platform's list has none.
items[].rankintegerPosition on a board, from 1.
items[].heatintegerThe platform's heat score.
items[].fields.product_idstringalways nullThe product the review is about.
items[].fields.textstringThe review itself.
items[].fields.ratingnumberThe rating given.
items[].fields.published_atstringalways nullWhen it was posted, ISO 8601 in UTC.
items[].fields.author.labelstringAn anonymous label, stable within one response. Whoever wrote it is never named.
items[].fields.imagesstring[]Image addresses.
items[].fields.variantstringThe variant that was bought.
nullFields Xiaohongshu cannot give

Read null as “Xiaohongshu did not give this”, not as zero. These are always null on this call:

  • fields.product_idThe product the review is about.
  • fields.published_atWhen it was posted, ISO 8601 in UTC.

Every item also has platform, id, ref, approx and type; the response around the items is the same on every call. Response format

What to expect.

One call returns the first page only, up to 20 items, with no cursor, for 12 credits.
A call that runs and finds nothing is a successful call: status is "empty", items is empty, and it costs 12 credits.
On this call Xiaohongshu cannot tell a note that does not exist from one with no data: both come back as empty, and both are charged.

1 call per second per key, 5 after a purchase; going over is not charged. Rate limits

A failed call costs 0 credits and is never retried on its own. Error codes

Once connected over MCP, these questions use it.

  1. Get the first page of buyers' reviews of a product of Xiaohongshu's shop by the product's ID: 67bc0378a2e72600153d3ed1.
    call {"op":"xiaohongshu.product_reviews","id":"67bc0378a2e72600153d3ed1"}
    12 credits
  2. Search the products of Xiaohongshu's shop by terms: 防晒霜, then for the first 3: get the first page of buyers' reviews of a product of Xiaohongshu's shop by the product's ID.
    call {"op":"xiaohongshu.product_search","query":"防晒霜"}call {"op":"xiaohongshu.product_reviews","id":"<ref>"} × 3
    48 credits

The interface of the same name on other platforms.

All platforms and prices
POST/v1/call/xiaohongshu.product_reviews{ "id": "67bc0378a2e72600153d3ed1" }12 creditsper call
Change the op in the path. The response around the items keeps the same shape.

Questions.
Short answers.

Everything on Xiaohongshu
Do I need a Xiaohongshu account or Xiaohongshu's own API access?
No. You only need a SocialToAI key. The call returns content and account information publicly visible on Xiaohongshu; you never sign in to Xiaohongshu or apply for anything there.
Can I get the next page?
No. On Xiaohongshu this interface gives its first page only (up to 20 items): the response carries no cursor, and page.has_more is always false.
What does “Preview” mean here?
Preview: this interface is not marked stable yet, so its parameters and fields may still change. It is charged like any other call, and a failed call is not charged.

Your AI is one URL away
from all of social media.

100 credits on sign-up, no card needed