# Xiaohongshu Comment replies API (xiaohongshu.sub_comments)

- Canonical page: https://everyinfra.com/en/xiaohongshu-api/sub_comments
- Endpoint: POST https://api.everyinfra.com/api/v1/social with {"platform": "xiaohongshu", "action": "sub_comments", "params": {...}}
- Price: $0.005556 per call ($5.56 per 1,000 requests); failed calls and empty results are not charged
- Returns: list, one page of 10 per call (limit is ignored; pass the top-level next_page_token from the response as page_token for the next page)
- Pagination: pass next_page_token back as page_token for the next page, other params unchanged; one call per page, tokens last 24 hours
- Mode: sync; add "mode": "async" for slow tasks

## Health

- Live health (24h percent, hourly and daily trends): https://api.everyinfra.com/api/v1/social/availability?platform=xiaohongshu&action=sub_comments

## Parameters

| name | type | required | default | description |
|---|---|---|---|---|
| url | not declared | yes | not declared | Specifies the full Xiaohongshu note URL, formatted as /explore/<note_id> or /discovery/item/<note_id>. Use recent search URLs that retain query parameters like xsec_token. The sub_comments action requires both this url and a valid comment_id. |
| comment_id | not declared | yes | not declared | Specifies the parent comment ID to retrieve sub-replies for in the sub_comments action. Obtain this ID from the comments response for the same note and pair it with the corresponding url. It is not a note ID or user ID. |
| page_token | not declared | no | not declared | Pagination cursor for the comments, sub_comments, search, user_posts, search_users and hashtag actions: pass back the next_page_token value from a row of the previous response to fetch the next page; omit it to start from the first page. Each page is one call, billed per request. |

## Response fields (items in `results`)

| field | meaning |
|---|---|
| id | The record's unique ID on the platform. Unique only within one platform; IDs can repeat across platforms. |
| text | Note body or comment text. note and hashtag return the full body; search and user_posts may return a truncated excerpt (up to about 60 and 100 characters respectively). Call note with the note ID for the full text. |
| like_count | Like count. On note and comment results, the likes on that item; on profile, the total likes the account's notes have received. null means not public or not returned this time, not zero. |
| posted_at | Publish time in ISO 8601, UTC (for example 2026-08-07T12:34:56+00:00). Non-standard strings from the platform are passed through as is, so parse defensively. null means the platform does not disclose it. |
| ip_location | IP location (province or country) that Xiaohongshu displays; not entered by the user. Only some user_posts rows carry it. |
| author_name | Author's display name. |
| author_id | The author's user ID. Pass it to profile or user_posts. Note results carry the 24-character ID from profile URLs; comment results (comments, comments_batch, sub_comments) usually carry a different 29-character form. The two forms of one person do not match, so convert them with the user_id that profile returns before de-duplicating across batches. |
| reply_to_id | platform-native meaning |
| reply_to_author_name | platform-native meaning |
| reply_to_author_id | platform-native meaning |
| next_page_token | Page token (search, comments, sub_comments, user_posts, search_users, hashtag): pass it back unchanged as page_token, with the other parameters the same, to fetch the next page. |
| images | Image links. On note, hashtag, search and user_posts, every image of the note in order. On comment results (comments, comments_batch, sub_comments), the images attached to the comment, stickers included; an empty array means none. null means this item was not returned this time. |
| is_author | Whether the note's author wrote this comment. null means this item was not returned this time, not false. |
| author_avatar_url | The commenter's avatar link (comments, comments_batch, sub_comments). |
| author_red_id | The author's Xiaohongshu ID: on comment results (comments, comments_batch, sub_comments) the commenter's, on note the note author's. |
| author_is_ai_agent | Whether the commenter is an account the platform marks as AI; absent when this item was not returned. |
| mentioned_users | People @-mentioned: on comment results, those mentioned in the comment; on note, those mentioned in the note. Each entry has user_id and nickname. Absent when there are none. |
| comment_tags | platform-native meaning |
| platform | Source platform identifier, the same as platform in the request (for example xiaohongshu, tiktok). |

## Example

```bash
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "platform": "xiaohongshu",
  "action": "sub_comments",
  "params": {
    "url": "https://www.xiaohongshu.com/explore/6aa7a3f600000000110335f8?xsec_token=YByFNzoKupps8B3qI774Gx7XGxfHpq4QWEvxU4zsD8454%3D",
    "comment_id": "6aa80e9b000000000200c6ad"
  }
}'
```

```python
import os
import requests

response = requests.post(
    "https://api.everyinfra.com/api/v1/social",
    headers={"Authorization": f"Bearer {os.environ['EVERYINFRA_API_KEY']}"},
    json={
        "platform": "xiaohongshu",
        "action": "sub_comments",
        "params": {
            "url": "https://www.xiaohongshu.com/explore/6aa7a3f600000000110335f8?xsec_token=YByFNzoKupps8B3qI774Gx7XGxfHpq4QWEvxU4zsD8454%3D",
            "comment_id": "6aa80e9b000000000200c6ad",
        },
    },
    timeout=120,
)
print(response.status_code)
print(response.json())
```

## Response example

Real response to the example request above, captured 2026-11-07T14:47:42Z. `results` and `count` are real with personal information (names, handles, avatars, profile links, contact details) removed; the list keeps the first 2 of 5. `id`, `billing` and `quota` differ on every call, so only their shape is shown.

```text
{
  "id": "req_…",
  "platform": "xiaohongshu",
  "action": "sub_comments",
  "results": [
    {
      "id": "6aaa0e53000000000b01276f",
      "text": "卫生间一个浴缸至少1米，然后一个盥洗盆至少一米，加上卫生间门向内打开，还留了几十公分，加上门至少3米了，宽度一个浴缸加上两个过道还有一个马桶，加上墙体的厚度，至少五六平了。客厅长度和宽度至少有二三十平。如果加上公摊，建筑面积在60平。",
      "like_count": 11,
      "posted_at": "2026-09-16T03:34:44+00:00",
      "author_name": "依•••亦",
      "author_id": "•••",
      "reply_to_id": "6aa80e9b000000000200c6ad",
      "reply_to_author_name": "小•••鱼",
      "reply_to_author_id": "•••",
      "next_page_token": "n1.6aaa68c700000000150010fb",
      "images": [],
      "is_author": false,
      "author_avatar_url": "https://sns-avatar-qc-ae.rednotecdn.com/•••",
      "author_red_id": "•••",
      "author_is_ai_agent": false,
      "comment_tags": [],
      "platform": "xiaohongshu"
    },
    {
      "id": "6aaa1eb000000000150141c3",
      "text": "这种看看得了，还当真[偷笑R]",
      "like_count": 3,
      "posted_at": "2026-09-16T04:44:32+00:00",
      "author_name": "小•••D",
      "author_id": "•••",
      "reply_to_id": "6aaa0e53000000000b01276f",
      "reply_to_author_name": "依•••亦",
      "reply_to_author_id": "•••",
      "next_page_token": "n1.6aaa68c700000000150010fb",
      "images": [],
      "is_author": false,
      "author_avatar_url": "https://sns-avatar-qc-ae.rednotecdn.com/•••",
      "author_red_id": "•••",
      "author_is_ai_agent": false,
      "comment_tags": [],
      "platform": "xiaohongshu"
    }
  ],
  "next_page_token": …,
  "pagination": { … },
  "count": 5,
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}
```

## Also

- Capability catalog (no key): https://api.everyinfra.com/api/v1/social/catalog?platform=xiaohongshu
- OpenAPI: https://everyinfra.com/openapi.json · Agents guide: https://everyinfra.com/agents.md
