How to get Xiaohongshu (RedNote) note comments in bulk

3 endpoints do it: Xiaohongshu note search → Xiaohongshu note comments → Xiaohongshu comment replies. The worked example below is 14 calls and costs $0.28 in all; a failed call is not charged.

Open in ChatGPTOpen in Claude

Search Xiaohongshu (RedNote) for notes on a keyword, take the top-level comments under each note, then open the replies of the busiest comments. You end up with one table of comments: text, commenter, likes, replies and time posted.

Step 1: Xiaohongshu note search

Get a page of notes for your search terms; sort can put the newest or the most liked first. Each item's id is the note ID, passed as it is to the next step; metrics.comments is its comment count, so you can start with the busiest.

curl -G "https://api.dataxapi.com/v1/xiaohongshu/notes/search" \
  --data-urlencode "query=咖啡" \
  -H "Authorization: Bearer $DATAXAPI_API_KEY"
from dataxapi import DataXAPI

dx = DataXAPI()  # reads DATAXAPI_API_KEY
result = dx.xiaohongshu.notes.search(query="咖啡")
print(result["data"]["items"])
import { DataXAPI } from "@dataxapi/sdk";

const dx = new DataXAPI(); // reads DATAXAPI_API_KEY
const result = await dx.xiaohongshu.notes.search({ query: "咖啡" });
console.log(result.data.items);
dataxapi call xiaohongshu.notes.search 'query=咖啡'
Recorded response
{
  "code": "ok",
  "request_id": "d2403177-e4f6-4d04-99eb-afce599b4c31",
  "data": {
    "items": [
      {
        "id": "67d5e2be00000000d803d22d",
        "url": "https://www.xiaohongshu.com/explore/67d5e2be00000000d803d22d",
        "type": "image",
        "title": "实测一个月咖啡,结论有点意外",
        "text": "把咖啡从头到尾讲清楚,看完少走弯路",
        "published_at": "2026-05-17T05:25:25.000Z",
        "author": {
          "id": "6130783200000000883b2a1e",
          "username": "coffee_lab_sh",
          "name": "山野咖啡馆",
          "avatar_url": "https://sns-avatar-qc.xhscdn.com/avatar/610f17040000000049dd4887.jpg",
          "verified": false
        },
        "metrics": {
          "likes": 48,
          "comments": 21,
          "shares": 5,
          "favorites": 10
        },
        "images": [
          "https://sns-webpic-qc.xhscdn.com/20261010/2d7c7c32da67d3c3d839!nd_dft_wlteh_webp_3"
        ]
      },
      // … 14 more
    ]
  },
  "page": {
    "next_cursor": "c1.Ip12-f4dS4HmSDpdPex7WuLPBr1zJAbdhL_Wj8K0",
    "cursor_expires_at": "2026-10-12T19:43:26.000Z",
    "has_more": true,
    "returned": 15
  },
  "warnings": [],
  "meta": {
    "capability": "xiaohongshu.notes.search",
    "result_status": "complete",
    "fetched_at": "2026-10-12T18:43:26.000Z",
    "cached": false,
    "replayed": false,
    "unavailable": {
      "lang": "capability",
      "metrics.views": "platform",
      "metrics.reposts": "platform",
      "author.followers": "capability",
      "hashtags": "capability",
      "mentions": "capability",
      "is_pinned": "capability",
      "post_id": "platform",
      "parent_id": "platform",
      "root_id": "platform"
    },
    "billing": {
      "amount": "0.02",
      "currency": "USD",
      "balance_after": "9.98"
    }
  }
}

From a response recorded 2026-10-12 18:43 UTC. Names, text and IDs are examples, and so are the links: none is the recorded one (the page shows no one's personal data); the figures are as recorded. Long lists are cut. The request ID, cursor and balance are made up.

Xiaohongshu note search · $0.0200 / a call · Parameters, fields and errors on the endpoint's page →

Step 2: Xiaohongshu note comments

Put the note ID into id to get a page of top-level comments, newest first. For the next page, call again with page.next_cursor as cursor. Each comment's id, post_id and reply count (metrics.comments) go into the next step.

curl -G "https://api.dataxapi.com/v1/xiaohongshu/notes/comments/list" \
  --data-urlencode "id=6a9c5884000000002b002d95" \
  -H "Authorization: Bearer $DATAXAPI_API_KEY"
from dataxapi import DataXAPI

dx = DataXAPI()  # reads DATAXAPI_API_KEY
result = dx.xiaohongshu.notes.comments.list(id="6a9c5884000000002b002d95")
print(result["data"]["items"])
import { DataXAPI } from "@dataxapi/sdk";

const dx = new DataXAPI(); // reads DATAXAPI_API_KEY
const result = await dx.xiaohongshu.notes.comments.list({ id: "6a9c5884000000002b002d95" });
console.log(result.data.items);
dataxapi call xiaohongshu.notes.comments.list id=6a9c5884000000002b002d95
Recorded response
{
  "code": "ok",
  "request_id": "fd58d135-ef6e-4271-869d-fbb8d27199ce",
  "data": {
    "items": [
      {
        "id": "68d0607400000000edd345fe",
        "text": "我上次也踩了这个坑哈哈",
        "published_at": "2026-10-11T13:28:37.000Z",
        "author": {
          "id": "6da35157000000005fdd7a79",
          "username": "nanfeng_0721",
          "name": "南边的风",
          "avatar_url": "https://sns-avatar-qc.xhscdn.com/avatar/65250da200000000167ab981.jpg"
        },
        "metrics": { "likes": 0, "comments": 0 },
        "post_id": "6696eaf60000000000904fc3",
        "parent_id": null,
        "root_id": null
      },
      // … 9 more
    ]
  },
  "page": {
    "next_cursor": "c1.lk7Qsam6A9ERrgAE_Wv8XIQJG0N-AN_z2Xy0yA78",
    "cursor_expires_at": "2026-10-12T19:43:50.000Z",
    "has_more": true,
    "returned": 10
  },
  "warnings": [],
  "meta": {
    "capability": "xiaohongshu.notes.comments.list",
    "result_status": "complete",
    "fetched_at": "2026-10-12T18:43:50.000Z",
    "cached": false,
    "replayed": false,
    "unavailable": { "url": "platform" },
    "billing": {
      "amount": "0.02",
      "currency": "USD",
      "balance_after": "9.98"
    }
  }
}

From a response recorded 2026-10-12 18:43 UTC. Names, text and IDs are examples, and so are the links: none is the recorded one (the page shows no one's personal data); the figures are as recorded. Long lists are cut. The request ID, cursor and balance are made up.

Xiaohongshu note comments · $0.0200 / a call · Parameters, fields and errors on the endpoint's page →

Step 3: Xiaohongshu comment replies

For a comment with many replies, put its id into id and its post_id into post_id to get the replies under it. Each reply's parent_id is the comment it answers directly.

curl -G "https://api.dataxapi.com/v1/xiaohongshu/comments/replies/list" \
  --data-urlencode "id=6a9c5c160000000015022a5c" \
  --data-urlencode "post_id=6a9c5884000000002b002d95" \
  -H "Authorization: Bearer $DATAXAPI_API_KEY"
from dataxapi import DataXAPI

dx = DataXAPI()  # reads DATAXAPI_API_KEY
result = dx.xiaohongshu.comments.replies.list(id="6a9c5c160000000015022a5c", post_id="6a9c5884000000002b002d95")
print(result["data"]["items"])
import { DataXAPI } from "@dataxapi/sdk";

const dx = new DataXAPI(); // reads DATAXAPI_API_KEY
const result = await dx.xiaohongshu.comments.replies.list({ id: "6a9c5c160000000015022a5c", post_id: "6a9c5884000000002b002d95" });
console.log(result.data.items);
dataxapi call xiaohongshu.comments.replies.list id=6a9c5c160000000015022a5c post_id=6a9c5884000000002b002d95
Recorded response
{
  "code": "ok",
  "request_id": "73e9cdd5-25d4-43a3-8ab7-2b772d6dc423",
  "data": {
    "items": [
      {
        "id": "6b61353f00000000bc461a89",
        "text": "收藏了,周末就去试试",
        "published_at": "2026-09-05T18:19:37.000Z",
        "author": {
          "id": "6fae30ea000000006c636e24",
          "username": "aya_living",
          "name": "认真生活的阿雅",
          "avatar_url": "https://sns-avatar-qc.xhscdn.com/avatar/66909e6f00000000f1d7fcc8.jpg"
        },
        "metrics": { "likes": 639 },
        "post_id": "66f902af00000000446f66ed",
        "parent_id": "637d056a000000009ef97bd5",
        "root_id": "6516fd30000000006f684b97"
      },
      // … 4 more
    ]
  },
  "page": {
    "next_cursor": "c1.LyZyLf38XXqnHCcC989t2SLQpglHo8Vxq-bqAIPK",
    "cursor_expires_at": "2026-10-12T19:43:51.000Z",
    "has_more": true,
    "returned": 5
  },
  "warnings": [],
  "meta": {
    "capability": "xiaohongshu.comments.replies.list",
    "result_status": "complete",
    "fetched_at": "2026-10-12T18:43:51.000Z",
    "cached": false,
    "replayed": false,
    "unavailable": { "url": "platform", "metrics.comments": "platform" },
    "billing": {
      "amount": "0.02",
      "currency": "USD",
      "balance_after": "9.98"
    }
  }
}

From a response recorded 2026-10-12 18:43 UTC. Names, text and IDs are examples, and so are the links: none is the recorded one (the page shows no one's personal data); the figures are as recorded. Long lists are cut. The request ID, cursor and balance are made up.

Xiaohongshu comment replies · $0.0200 / a call · Parameters, fields and errors on the endpoint's page →

What the example costs

One page of search results, the first page of comments under 10 of the notes, then the replies under 3 of those comments

EndpointCallsPriceSubtotal
Total14$0.28

Prices are the prices in force when this page was built. A failed call, and an object that does not exist, cost nothing.

In your AI (MCP)

Connect DataXAPI to your AI client once. Then say what you want; the agent finds these endpoints, checks the price and calls them on your balance.

Say: Search Xiaohongshu for 咖啡 (coffee), get the first page of comments under the top 10 notes, then the replies under the 3 comments with the most replies, as one table.
What the agent sends to the call tool
{
  "capability": "xiaohongshu.notes.search",
  "query": "咖啡",
  "idempotency_key": "<a new UUID>"
}

Sign in to copy the setup prompt with your keyAbout the MCP server →

With a Skill

Good to know

  • Comments come about 10 a page, 20 at most, top-level only: replies come from the replies endpoint. A page.next_cursor is good for an hour.
  • A note ID is 24 hexadecimal characters. For an ID that matches no note, the comments endpoint answers not found and charges nothing; a note without comments is an empty result, which is charged. The replies endpoint cannot tell a missing comment from one without replies: both are empty results, and charged.
  • Comments have no link of their own (url). The IP location is there only where the platform shows one: add view=full and read ext.ip_location.