Does Xiaohongshu (RedNote) have an API? Get notes and comments with Python (2026)

Xiaohongshu's open platform covers e-commerce only (orders, products, logistics), with no endpoint for notes, comments or search; to read notes and comments from a program, use a third-party data API. Below it is done with DataXAPI's Python SDK; the free trial covers up to 333 calls. 2 endpoints do it: Xiaohongshu note search → Xiaohongshu note comments. The worked example below is 11 calls and costs $0.22 in all; a failed call is not charged.

Updated 2026-11-06Open in ChatGPTOpen in Claude

Search for a page of notes on a keyword, take the comments under the first 10, and write one CSV: note title, likes, comment text, comment likes, time. First pip install dataxapi, with your key in the DATAXAPI_API_KEY environment variable.

Step 1: Xiaohongshu note search

A page of notes for the search terms; sort can be newest or most popular. Each item's id is the note ID and metrics.likes its likes.

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

dx = DataXAPI()  # reads DATAXAPI_API_KEY
result = dx.xiaohongshu.notes.search(query="咖啡")
print(result["data"]["items"])
// npm i @dataxapi/sdk
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 for a page of top-level comments. For the next page, call again with page.next_cursor as cursor.

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

dx = DataXAPI()  # reads DATAXAPI_API_KEY
result = dx.xiaohongshu.notes.comments.list(id="6a9c5884000000002b002d95")
print(result["data"]["items"])
// npm i @dataxapi/sdk
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 →

What the example costs

One page of search results, then a page of comments under each of the first 10 notes

EndpointCallsPriceSubtotal
Total11$0.22

Prices are the prices in force when this page was built. A failed call costs 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 first 10 notes, and make one table: note title, comment, likes.
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

Why DataXAPI

  • Steady: endpoints were available 99.9% of the last 30 days, on a public status page you can check.
  • Fast: a paid call took 1.3 seconds at the median over the last 7 days (counted 2026-11-06).
  • Fewer tokens: across 21 endpoints on Xiaohongshu (RedNote), one recorded real response each, the platform's own JSON comes to 480k tokens and what an AI reads through DataXAPI's MCP server to 36k, 92% fewer; the JSON of a direct API call is 85% fewer too (counted 2026-11-06). Every platform answers in one shape: the author in author, counts in metrics, the next page in page.next_cursor, so another platform needs no new parser.
  • See before you pay: every endpoint's page shows a recorded real response, field by field.
  • Spending you control: a failed call is not charged; each key can have a limit, X-Max-Price caps one call, and the same Idempotency-Key within 24 hours is never charged twice.
  • Ready for AI: a remote MCP server listed in the official MCP registry as com.dataxapi/mcp, usable from Claude, Cursor and ChatGPT.
  • Free trial of up to 333 calls, no card.

Good to know

  • Comments come about 10 a page, top-level only; replies come from xiaohongshu.comments.replies.list. A page.next_cursor is good for an hour.
  • A note ID is 24 hexadecimal characters; with only a link or share text, put it into url as it is. No Xiaohongshu account or cookie.
  • Without code: connect DataXAPI to Claude or ChatGPT and say the sentence under “In your AI”.

The whole script

The task above as one script that runs as it is: Python, the SDK, your key from DATAXAPI_API_KEY. It writes a CSV file and ends by printing what it called, fetched and was charged.

Python
# pip install dataxapi
# export DATAXAPI_API_KEY=dx_...   (your key)
import csv
from decimal import Decimal
from dataxapi import DataXAPI

dx = DataXAPI()
calls, fetched, charged = 0, 0, Decimal("0")

def run(capability, params):
    """One call; counts it and what it was charged."""
    global calls, charged
    result = dx.call(capability, params)
    calls += 1
    charged += Decimal(str(result["meta"]["billing"]["amount"]))
    return result

QUERY = "咖啡"
NOTES = 10

# 1. A page of notes for the search terms.
notes = run("xiaohongshu.notes.search", {"query": QUERY})["data"]["items"][:NOTES]

# 2. The first page of comments under each note.
rows = []
for note in notes:
    for comment in run("xiaohongshu.notes.comments.list", {"id": note["id"]})["data"]["items"]:
        rows.append([note.get("title"), note["metrics"].get("likes"), comment.get("text"), comment["metrics"].get("likes"), comment.get("published_at")])

fetched = len(rows)
with open("xiaohongshu-notes-comments.csv", "w", newline="", encoding="utf-8") as file:
    csv.writer(file).writerows([["note_title", "note_likes", "comment", "comment_likes", "published_at"], *rows])

print(f"calls: {calls}, items: {fetched}, charged: ${charged}")