SocialToAIStart freeConsole
POST/v1/call/xiaohongshu.product_searchPreview

Xiaohongshu (RedNote) product search API

Only on Xiaohongshu.

The Xiaohongshu (RedNote) product search API searches the products of Xiaohongshu's shop by terms: title, current and original price in yuan, units sold, picture, shop. 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 per pageone page per call
2026-10-17last tested
1019 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_search \  -H "Authorization: Bearer $SOCIALTOAI_KEY" \  -H "Content-Type: application/json" \  -d '{    "query": "防晒霜"  }'
import osimport requestsresponse = requests.post(    "https://api.socialtoai.com/v1/call/xiaohongshu.product_search",    headers={"Authorization": f"Bearer {os.environ['SOCIALTOAI_KEY']}"},    json={        "query": "防晒霜",    },)print(response.json())
# Connected over MCP? Ask in plain words.Use the Xiaohongshu product search interface (xiaohongshu.product_search) with query: 防晒霜.# Your AI calls the call tool with:{  "query": "防晒霜"}
Sign in to run12 creditsOpens in the Playground with these parameters after you sign in. It never runs by itself.
200 OK1019 B12 credits
{  "op": "xiaohongshu.product_search",  "platform": "xiaohongshu",  "status": "ok",  "items": [    {      "platform": "xiaohongshu",      "id": "…",      "ref": "…",      "approx": [],      "type": "entry",      "entry_type": "product",      "title": "…",      "url": null,      "rank": null,      "heat": null,      "fields": {        "description": null,        "price": "17.9",        "original_price": null,        "currency": "…",        "images": ["https://example.com/…"],        "rating": null,        "sold": 4027,        "reviews_count": null,        "shop": {          "id": "…",          "name": "…"        }      }    }  ],  "unavailable": ["url", "fields.description", "fields.rating", "fields.reviews_count"],  "page": {    "has_more": true,    "cursor": "cur_…",    "cursor_expires_at": "2026-10-12T22:25:07.000Z"  },  "cost_credits": 12}
entry_type
product
description
null
price
17.9
original_price
null
currency
…
rating
null
sold
4027

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

Sample data1 of the 19 items recorded

2 parameters.
1 required.

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

NameTypeRequiredDefaultDescription
querystringRequired—Search terms
cursorstringOptional—Pass page.cursor from the last response to get the next page.

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

FieldTypeMeaning
items[].titlestringThe entry's title or name.
items[].urlstringalways nullA 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.descriptionstringalways nullThe product description.
items[].fields.pricestringThe current price, as a decimal string in fields.currency.
items[].fields.original_pricestringThe price before discount.
items[].fields.currencystringThe currency of the prices.
items[].fields.imagesstring[]Image addresses.
items[].fields.ratingnumberalways nullThe rating.
items[].fields.soldintegerUnits sold.
items[].fields.reviews_countintegeralways nullHow many reviews it has.
items[].fields.shop.idstringThe shop's ID.
items[].fields.shop.namestringThe shop's name.
nullFields Xiaohongshu cannot give

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

  • urlA link that opens it; null where the platform's list has none.
  • fields.descriptionThe product description.
  • fields.ratingThe rating.
  • fields.reviews_countHow many reviews it has.

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 a page of up to 20 items. When page.has_more is true, send page.cursor back as cursor for the next page; each page costs 12 credits and a cursor works for 30 minutes.
A call that runs and finds nothing is a successful call: status is "empty", items is empty, and it costs 12 credits.

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. Search the products of Xiaohongshu's shop by terms: 防晒霜.
    call {"op":"xiaohongshu.product_search","query":"防晒霜"}
    12 credits

The interface of the same name on other platforms.

All platforms and prices
POST/v1/call/xiaohongshu.product_search{ "query": "防晒霜" }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.
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