Skip to content
Xiaohongshu (RedNote) note comments
raw.xiaohongshu.comments

Xiaohongshu (RedNote) note comments

LiveBeta: the endpoint and its response fields may still change
GEThttps://api.qovia.ai/v1/raw/xiaohongshu/comments

First-level comments of a note, cursor-paginated. data holds the platform's original comment page: comments (each with id, content, like_count / like_view_count, sub_comment_count, a sub_comments preview, ip_location, time, pictures, user and so on), cursor, has_more, comment_count and the rest, unrenamed, unfiltered and unconverted; a commenter's user_id is given exactly as the platform gives it. sort=default (the default) follows Xiaohongshu's own order (pinned and popular first), about 5 a page; sort=latest is newest first, 10-15 a page, and its commenter fields and like counts differ somewhat from default's; the response is the reference. Pass the response's cursor back unchanged to continue (for latest it is a JSON text, also passed back unchanged); stop when has_more is false. Replies come from raw.xiaohongshu.comment_replies. A note without comments, or one that does not exist, answers empty and is not charged.

Typical uses: Review and comment analysis and social listening, e.g. finding what users praise and complain about most.

Price
$0.005 / call$5 per 1k · fixed price
Billing
Charged only for successful, non-empty resultsthe charge is in meta.charged_usd
Scope
raw:xiaohongshuThe API key needs this scope
Rate limit
NoneNo per-account or per-endpoint request limit

Parameters

Sent as query parameters

Only these parameters are accepted; any other one returns 400.

note_idstringRequired

Note ID (24 hex characters)

Pattern^[0-9a-f]{24}$

Example6a14846d000000000702d0d4

sortstring · enum

Order: default is Xiaohongshu's own (pinned and popular first), latest is newest first

DefaultdefaultOne ofdefault · latest
cursorstring

The cursor from the previous page's response, passed back unchanged (it may be a JSON text); omit it for the first page

DefaultPattern^([0-9a-f]{24}|\{.{1,600}\})?$

Response

A success is HTTP 200 with the shared envelope: request_id, data (this endpoint's data, see the example) and meta (the charge). An empty result is also 200, with meta.empty true, not charged, and data may be an empty structure or null.

The response envelope in detail

Errors

Errors this endpoint can return
codeHTTPBillingDescription
scope_denied403Not chargedThis API key lacks the scope the endpoint requires.
endpoint_unavailable503Not chargedThe endpoint is not available right now (no data source connected yet, or no price configured); nothing ran.
invalid_params400Not chargedThe parameters failed validation: a required one is missing, a type or format is wrong, an array has more items than allowed, an unknown one was sent, or the POST body is not a JSON object. An error in one parameter starts with its name (item_id: …); a missing or unknown parameter starts with params: ….
insufficient_balance402Not chargedThe balance cannot pay for this call; top up first.
upstream_busyRetryable503RefundedThe data source is busy or cooling down; refunded. Retry after Retry-After.
upstream_timeout504RefundedThe data source timed out; refunded.
upstream_error502 / 503RefundedThe data source failed; refunded.
upstream_rejected400RefundedThe data source rejected these parameters (well-formed, but not accepted); refunded.
not_found404RefundedThe data source has no such item (deleted, or the ID does not exist); refunded.
reservation_expired504RefundedThe call took too long and was refunded automatically; no data is returned.

Any request can also fail authentication: 401 invalid_api_key, 403 account_disabled, 429 too_many_auth_failures.

Every error code
Call it from your browser

Needs an account with a balance; playground calls are billed like API calls.