Xiaohongshu (RedNote)xiaohongshu.shop.products.search

Xiaohongshu shop product search API

Search products in Xiaohongshu's shop by keyword: title, current and original price in yuan, image and shop. Units sold are not shown as a number.

GEThttps://api.okdata.online/v1/xiaohongshu/shop/products/search

Price

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

Parameters

NameTypeDescription
query *requiredstringKeywords, as a person would type them into the platform search box. e.g. 便携咖啡机
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 Product.

FieldTypeDescription
idstringProduct ID in the shop.
urlstringProduct page.
titlestringProduct title.
pricenumber | nullCurrent price (the lowest variant), in the currency given.
original_pricenumber | nullList price before discount, where shown.
currencystring | nullISO 4217 currency code.
soldinteger | nullUnits sold, as the shop shows it.
ratingnumber | nullAverage stars, 0 to 5.
reviewsinteger | nullNumber of reviews.
imagesstring[] | nullProduct image URLs.
shopShopRefWho sells it.
extobjectPlatform-specific extras. Only returned with view=full.

Request

cURL
curl -G "https://api.okdata.online/v1/xiaohongshu/shop/products/search" \
  -H "Authorization: Bearer $OKDATA_API_KEY" \
  --data-urlencode 'query=便携咖啡机'
Python
import os
import requests

resp = requests.get(
    "https://api.okdata.online/v1/xiaohongshu/shop/products/search",
    headers={"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"},
    params={"query": "便携咖啡机"},
    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["price"], row["currency"], row["sold"], row["title"][:60])
print("cost: $" + body["meta"]["billing"]["amount"])
TypeScript
const url = new URL('https://api.okdata.online/v1/xiaohongshu/shop/products/search');
url.searchParams.set('query', "便携咖啡机");

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.price, row.currency, row.sold, row.title.slice(0, 60));
}
console.log('cost: $' + body.meta.billing.amount);
MCPtools/call
{
  "name": "call",
  "arguments": {
    "endpoint": "xiaohongshu.shop.products.search",
    "params": {
      "query": "便携咖啡机"
    }
  }
}

Or ask an agent that has the MCP server connectedUse Xiaohongshu shop product search and show the price range and the five best sellers, with links.

Response

200 · application/jsonmeta.billing.amount = 0.02
{
  "code": "ok",
  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
  "data": {
    "items": [
      {
        "id": "6441fb9a6cd6140001acf7b4",
        "url": "https://www.xiaohongshu.com/goods-detail/6441fb9a6cd6140001acf7b4",
        "title": "小型便携式手摇咖啡机 304 不锈钢磨豆机",
        "price": 39.9,
        "original_price": null,
        "currency": "CNY",
        "sold": null,
        "rating": null,
        "reviews": null,
        "images": [
          "https://cdn.example.com/product/1.jpg"
        ],
        "shop": {
          "id": null,
          "name": "轻装户外旗舰店",
          "url": null
        }
      }
    ]
  },
  "page": {
    "next_cursor": "eyJvIjoyMH0",
    "has_more": true
  },
  "warnings": [],
  "meta": {
    "capability": "xiaohongshu.shop.products.search",
    "billing": {
      "amount": "0.02",
      "currency": "USD",
      "balance_after": "9.98"
    },
    "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.02. Failed calls are free. Your key goes only to that address and is never stored on this site.

Questions

How much does the Xiaohongshu shop product search API cost?

One call costs $0.02 and returns one page of about 20 products. Collecting 1,000 products takes about 50 calls, $1.00 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.02.

Do I need a Xiaohongshu (RedNote) account, cookies or a QR login?

No. You send only your okdata API key. The data is public data from Xiaohongshu (RedNote); nothing is fetched with your own Xiaohongshu (RedNote) 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 Xiaohongshu (RedNote) 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 Xiaohongshu (RedNote) endpoints → · Answers