Rednote API endpoint
Returns one page of the anonymous Rednote (international Xiaohongshu) explore feed as normalized note cards: note id, a public note_url of the form https://www.rednote.com/discovery/item/<id>, the card's short-lived xsec_token, media type, title, cover image, like count, and a public author card. Omit channel_id for the default recommendation feed; use channel_id with an id from the channels list returned by this endpoint for a category feed. The upstream serves one server-rendered page per channel (typically 20-35 cards) and has no credential-free cursor, so there is no pagination. Note detail, user profiles, comments, and search are not available on this anonymous surface: note detail and profiles require the page's guest session, and search requires login, so note_url is a link for a human browser rather than a follow-up API call.
/rednote/exploreReturns one page of Rednote's (international Xiaohongshu) anonymous explore or channel feed, normalized from the site's own server-rendered page state. Each response carries the note cards currently rendered for one channel, the selectable channel list, and the channel id that was actually served. There is no pagination: the anonymous upstream exposes no cursor, so this endpoint always returns the single page it was served.
Query parameters:
channel_id (optional) — one id from the channels array returned in a previous response. Omit it for the upstream's default recommendation feed. The accepted values are dynamic rather than a fixed enum: the channels list returned by this endpoint plus the resolved default id homefeed_recommend (echoed as channel_id in a no-channel response). A malformed or unknown value is rejected with 400; a value that is not present in the served channel list is also rejected with 400.Notable response behavior:
items holds public note cards only: note_id, note_url, xsec_token, type, title, cover_url, liked_count, and a public author card. Description, comments, coordinates, and any account or private field are not part of the anonymous feed.note_url is https://www.rednote.com/discovery/item/<note_id> for the card's note id. The separately returned xsec_token is a short-lived value: re-run this endpoint for a fresh card and token rather than reusing an old one. Note detail, search, and user profiles are not available on this anonymous surface, so note_url is an identifier/link for the caller rather than a promise that a detail call will succeed.count is the number of usable cards in this one response (typically 20 to 35). Cards missing a note id or card body are dropped; if no usable card remains, the endpoint reports an upstream error instead of returning an empty success, so count: 0 is not a normal result.channels is the channel list the upstream served with this page. Its ids and names are dynamic data from the page rather than a fixed catalog, and the default recommendation feed is reported as homefeed_recommend. Cache the list from a response, but do not assume it is stable across sessions.channel_id is the channel the upstream actually served; it may differ from the request when channel_id was omitted.503, not as an empty feed.| Field | Filled in, of 35 checked | Values in the sample |
|---|---|---|
| note_id | 35 | |
| note_url | 35 | rednote.com |
| xsec_token | 35 | |
| type | 35 | video (20), normal (15) |
| title | 35 | “娃衣稿|对错打卡娃袋✅❌” and 34 other values |
| cover_url | 35 | sns-web-i10.rednotecdn.com |
| liked_count | 35 | 13 to 5,462, median 237 |
| author | 35 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| channel_id | string | No | Optional explore channel id from the channels list in a previous response. Unknown values are rejected; omit for the default feed. | homefeed.food_v3 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/rednote/explore" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"channel_id": "homefeed_recommend",
"channels": [
{
"id": "homefeed_recommend",
"name": "推荐"
},
{
"id": "homefeed.food_v3",
"name": "美食"
},
{
"id": "homefeed.travel_v3",
"name": "旅行"
}
],
"count": 1,
"items": [
{
"note_id": "0123456789abcdef01234567",
"note_url": "https://www.rednote.com/discovery/item/0123456789abcdef01234567",
"xsec_token": "SYNTHETIC-EXAMPLE-TOKEN-0001",
"type": "normal",
"title": "Synthetic example note",
"cover_url": "https://sns-img.example.test/synthetic-cover.jpg",
"liked_count": 42,
"author": {
"user_id": "000000000000000000000002",
"nickname": "synthetic_user",
"avatar_url": "https://sns-avatar.example.test/synthetic-avatar.jpg"
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/rednote.exploreResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | rednote.ExploreResponse | No | ||||
| data.channel_id | string | No | homefeed_recommend | |||
| data.channels | array | No | ||||
| data.channels[].id | string | No | homefeed.food_v3 | |||
| data.channels[].name | string | No | Food | |||
| data.count | integer | No | 30 | |||
| data.items | array | No | ||||
| data.items[].author | rednote.NoteAuthor | No | ||||
| data.items[].author.avatar_url | string | No | ||||
| data.items[].author.nickname | string | No | synthetic_user | |||
| data.items[].author.user_id | string | No | 000000000000000000000002 | |||
| data.items[].cover_url | string | No | ||||
| data.items[].liked_count | integer | No | 1255 | |||
| data.items[].note_id | string | No | 0123456789abcdef01234567 | |||
| data.items[].note_url | string | No | ||||
| data.items[].title | string | No | ||||
| data.items[].type | string | No | video | |||
| data.items[].xsec_token | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/rednote/explore" \
-H "x-api-key: $CRAWLORA_API_KEY"