XHS(小红書)使用ガイド(App V2 版)
TikHub OpenAPI(
https://api.tikhub.io)に基づいて整理した小紅書のAPIドキュメントです。
本ドキュメントは App V2 系列のAPIのみを収録しています。
⚠️ 重要なお知らせ · 系列移行公告(2026-06-17 施行)
- App 系列(App V1)および Web 系列(Web V2 / Web V3)は 2026-06-17 をもって恒久的に終了しました。以後は呼び出さないでください。 すべてのAPIを App V2 に統一して移行してください。App V2 は非常に安定しており、現在唯一推奨されサポートされている系列です。予備 / フォールバック(fallback)API の設定は不要です。
- 各系列終了の背景:Web V3 は長期的な安定性が低く、Web V2 はすでに廃止手続きに入っているため、Web 系列は保持しません。App V1 も同時にメンテナンスを停止しました。もし以前のコードでこれらの系列を呼び出している場合は、できるだけ早く下記の対応する App V2 エンドポイントへ置き換えてください。
目次
共通説明
- Base URL:
https://api.tikhub.io - 認証:リクエストヘッダーに
Authorization: Bearer YOUR_API_KEYを含めます。 - 系列説明:App 系列(App V1)および Web 系列(Web V2 / Web V3)は 2026-06-17 に恒久終了しました。App V2 は現在唯一推奨されサポートされている系列で、最も安定しており、データも最も完全です。予備 / フォールバック API の設定は不要です。
- ID と共有リンクはどちらか一方:ほとんどのAPIは、オブジェクト ID(
note_id/user_id/page_id)の送信にも、共有リンク(share_text、APP / Web の長短リンクに対応)の送信にも対応しています。両方を送る場合はID を優先します。共有リンクしか手元にない場合は、直接share_textを渡せばよく、先に ID を解析する必要はありません。 - ノート種別:図文ノートと動画ノートはそれぞれ独立した App V2 エンドポイントを使用します。詳細は第 1 節を参照してください。
1. 単一ノート
小紅書のノートは 2 種類あります:図文ノート(画像ノート) と 動画ノート。App V2 は両方に独立したエンドポイントを提供しており、データが最も完全です。
1.1 画像ノート(図文ノート)
図文ノートの完全な詳細データ(画像URL、タイトル、本文、タグ、インタラクションデータなど)を取得します。
- 方法:GET
- パス:
/api/v1/xiaohongshu/app_v2/get_image_note_detail - 公式ドキュメント:docs.tikhub.io/420136391e0
- パラメータ:
note_id(string, 任意):ノート ID、例:"697c0eee000000000a03c308"share_text(string, 任意):小紅書の共有リンク(APP / Web 対応)- どちらか一方を指定。
note_idを優先し、両方送信した場合はnote_idを優先
1import requests
2
3BASE_URL = "https://api.tikhub.io"
4HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
5
6url = f"{BASE_URL}/api/v1/xiaohongshu/app_v2/get_image_note_detail"
7params = {
8 "note_id": "697c0eee000000000a03c308",
9 # "share_text": "https://www.xiaohongshu.com/discovery/item/...",
10}
11r = requests.get(url, headers=HEADERS, params=params)
12print(r.json())1.2 動画ノート
動画ノートの完全な詳細データ(動画URL、カバー、再生時間、タイトル、本文、インタラクションデータなど)を取得します。
- 方法:GET
- パス:
/api/v1/xiaohongshu/app_v2/get_video_note_detail - 公式ドキュメント:docs.tikhub.io/420136392e0
- パラメータ:
note_id(string, 任意):例:"697c0eee000000000a03c308"share_text(string, 任意)- どちらか一方を指定。
note_idを優先
1url = f"{BASE_URL}/api/v1/xiaohongshu/app_v2/get_video_note_detail"
2params = {
3 "note_id": "697c0eee000000000a03c308",
4 # "share_text": "https://www.xiaohongshu.com/discovery/item/...",
5}
6r = requests.get(url, headers=HEADERS, params=params)
7print(r.json())2. ユーザー情報
user_id を通じて、小紅書ユーザーの公開プロフィール(ニックネーム、アバター、自己紹介、フォロワー数、フォロー数、ノート数など)を取得します。
💡 共有リンクしかない? App V2 API は
user_id/share_textのどちらか一方に対応しているため、ユーザーページの共有リンクをそのままshare_textに渡せばよく、先にuser_idを解析する必要はありません。
指定ユーザーの詳細情報を取得します。ニックネーム、アバター、自己紹介、フォロワー数、フォロー数、ノート数などを含みます。
- 方法:GET
- パス:
/api/v1/xiaohongshu/app_v2/get_user_info - 公式ドキュメント:docs.tikhub.io/420136395e0
- パラメータ:
user_id(string, 任意):ユーザー ID、例:"61b46d790000000010008153"share_text(string, 任意):小紅書ユーザーの共有リンク(APP / Web 対応)- どちらか一方を指定。
user_idを優先し、両方送信した場合はuser_idを優先
1import requests
2
3BASE_URL = "https://api.tikhub.io"
4HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
5
6url = f"{BASE_URL}/api/v1/xiaohongshu/app_v2/get_user_info"
7params = {
8 "user_id": "61b46d790000000010008153",
9 # "share_text": "https://www.xiaohongshu.com/user/profile/...",
10}
11r = requests.get(url, headers=HEADERS, params=params)
12print(r.json())3. ユーザー作品
user_id に従ってユーザーのノート一覧を取得します。すべてのAPIはカーソルページネーション(cursor)を使用します。App V2 では 2 つのAPIを提供しています:ユーザーの公開済みノート一覧と、ユーザーの公開お気に入りノート一覧です。
💡 共有リンクしかない? このAPIは
user_id/share_textのどちらか一方に対応しているため、共有リンクをそのままshare_textに渡せばよいです。
3.1 ユーザーの公開済みノート一覧を取得
指定ユーザーが公開したノート一覧を取得します。カーソルページネーションを使用します。
- 方法:GET
- パス:
/api/v1/xiaohongshu/app_v2/get_user_posted_notes - 公式ドキュメント:docs.tikhub.io/420136396e0
- パラメータ:
user_id(string, 任意):ユーザー ID、例:"61b46d790000000010008153"share_text(string, 任意):小紅書ユーザーの共有リンク(APP / Web 対応)- どちらか一方を指定。
user_idを優先し、両方送信した場合はuser_idを優先 cursor(string, 任意):ページングカーソル。初回リクエストでは空欄。次ページでは前回レスポンス中のnotesリストの最後のノートのcursorを取得(パス例:$.data.data.notes[-1].cursor)
1import requests
2
3BASE_URL = "https://api.tikhub.io"
4HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
5
6url = f"{BASE_URL}/api/v1/xiaohongshu/app_v2/get_user_posted_notes"
7params = {
8 "user_id": "61b46d790000000010008153",
9 "cursor": "", # Empty for first request / 首次留空
10}
11r = requests.get(url, headers=HEADERS, params=params)
12print(r.json())3.2 ユーザーの公開お気に入りノート一覧を取得
指定ユーザーの公開お気に入りノート一覧を取得します(ユーザー自身が投稿したものではなく、ta がお気に入り登録したコンテンツです)。カーソルページネーションを使用します。
- 方法:GET
- パス:
/api/v1/xiaohongshu/app_v2/get_user_faved_notes - 公式ドキュメント:docs.tikhub.io/420136397e0
- パラメータ:
user_id(string, 任意):例:"5a8cf39111be10466d285d6b"share_text(string, 任意)- どちらか一方を指定。
user_idを優先 cursor(string, 任意):ページングカーソル。初回は空欄。次ページでは前ページの最後のノートのnote_id
1url = f"{BASE_URL}/api/v1/xiaohongshu/app_v2/get_user_faved_notes"
2params = {
3 "user_id": "5a8cf39111be10466d285d6b",
4 "cursor": "",
5}
6r = requests.get(url, headers=HEADERS, params=params)
7print(r.json())4. コメント
小紅書のコメントは 2 層に分かれます:一次コメント(ノート下のコメント一覧) と 二次コメント(特定コメント下の返信 / 子コメント一覧)。
4.1 一次コメント(ノート下のコメント一覧)
- 方法:GET
- パス:
/api/v1/xiaohongshu/app_v2/get_note_comments - 公式ドキュメント:docs.tikhub.io/420136394e0
- パラメータ:
note_id(string, 任意):ノート IDshare_text(string, 任意):共有リンク(note_idとどちらか一方、note_idを優先)cursor(string, 任意):ページングカーソル。初回は空欄index(integer, 任意):コメントインデックス。初回は0を送信pageArea(string, 任意):折りたたみ状態、UNFOLDED(デフォルト)/FOLDEDsort_strategy(string, 任意):並び順、default/latest_v2(デフォルト) /like_count
1import requests
2
3BASE_URL = "https://api.tikhub.io"
4HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
5
6url = f"{BASE_URL}/api/v1/xiaohongshu/app_v2/get_note_comments"
7params = {
8 "note_id": "697c0eee000000000a03c308",
9 "cursor": "",
10 "index": 0,
11 "pageArea": "UNFOLDED",
12 "sort_strategy": "latest_v2",
13}
14r = requests.get(url, headers=HEADERS, params=params)
15print(r.json())4.2 二次コメント(子コメント / 返信一覧)
特定の一次コメント下にあるすべての返信(子コメント)を取得します。カーソルページネーションを使用します。
- 方法:GET
- パス:
/api/v1/xiaohongshu/app_v2/get_note_sub_comments - 公式ドキュメント:docs.tikhub.io/420748830e0
- パラメータ:
note_id(string, 任意)share_text(string, 任意)(note_idとどちらか一方、note_idを優先)comment_id(string, 必須):親コメント IDcursor(string, 任意):初回は空欄。次ページでは$.data.cursorから取得index(integer, 任意):初回は1を送信。次ページでは$.data.cursorから取得
1url = f"{BASE_URL}/api/v1/xiaohongshu/app_v2/get_note_sub_comments"
2params = {
3 "note_id": "699916e6000000001d0253da",
4 "comment_id": "PARENT_COMMENT_ID",
5 "cursor": "",
6 "index": 1,
7}
8r = requests.get(url, headers=HEADERS, params=params)
9print(r.json())5. 検索
小紅書の検索は 2 種類あります:ノート検索 と ユーザー検索。App V2 は両方を提供しています。
ページ送りの際は、初回検索で返された
search_id/search_session_idを必ず付けてください。
5.1 ノート検索
- 方法:GET
- パス:
/api/v1/xiaohongshu/app_v2/search_notes - 公式ドキュメント:docs.tikhub.io/420136398e0
- パラメータ:
keyword(string, 必須):検索キーワード、例:"美食推荐"page(integer, 任意):ページ番号、1から開始sort_type(string, 任意):並び順、general(総合、デフォルト)/time_descending(最新)/popularity_descending(いいね数が多い)/comment_descending(コメント数が多い)/collect_descending(お気に入り数が多い)/english_preferred(英語優先)note_type(string, 任意):ノート種別、不限(デフォルト)/视频笔记/普通笔记/直播笔记time_filter(string, 任意):公開時期、不限(デフォルト)/一天内/一周内/半年内search_id(string, 任意):ページ送り時に初回レスポンスの値を送信search_session_id(string, 任意):ページ送り時に初回レスポンスの値を送信source(string, 任意):ソース、デフォルトexplore_feedai_mode(integer, 任意):AI モード、0(オフ、デフォルト)/1(オン)
1import requests
2
3BASE_URL = "https://api.tikhub.io"
4HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
5
6url = f"{BASE_URL}/api/v1/xiaohongshu/app_v2/search_notes"
7params = {
8 "keyword": "美食推荐",
9 "page": 1,
10 "sort_type": "general",
11 "note_type": "不限",
12 "time_filter": "不限",
13 # Pass search_id and search_session_id from first response for pagination / 翻页时需要带上首次响应里的 search_id 和 search_session_id
14 # "search_id": "...",
15 # "search_session_id": "...",
16}
17r = requests.get(url, headers=HEADERS, params=params)
18print(r.json())5.2 ユーザー検索
1ページあたり固定で 20 件返し、ページングに対応しています。
- 方法:GET
- パス:
/api/v1/xiaohongshu/app_v2/search_users - 公式ドキュメント:docs.tikhub.io/420136399e0
- パラメータ:
keyword(string, 必須):検索キーワード、例:"美食博主"page(integer, 任意):ページ番号、1から開始search_id(string, 任意):ページ送り時に初回レスポンスの値を送信source(string, 任意):ソース、デフォルトexplore_feed
1url = f"{BASE_URL}/api/v1/xiaohongshu/app_v2/search_users"
2params = {
3 "keyword": "美食博主",
4 "page": 1,
5 # Pass search_id from first response for pagination / 翻页时带上首次响应里的 search_id
6 # "search_id": "...",
7}
8r = requests.get(url, headers=HEADERS, params=params)
9print(r.json())6. 話題
小紅書の話題関連APIは 2 つに分かれます:話題詳細 と 話題下のノート一覧。
⚠️ すべてのAPIは
page_id(話題 / 話題タグ ID)を一意の識別子として使用します。
6.1 話題詳細
話題の詳細(話題名、閲覧数、議論数、共有情報など)を取得します。
- 方法:GET
- パス:
/api/v1/xiaohongshu/app_v2/get_topic_info - 公式ドキュメント:docs.tikhub.io/420136407e0
- パラメータ:
page_id(string, 必須):話題ページ ID、例:"5c1cc866febed9000184b7c1"source(string, 任意):ソース、デフォルトnormalnote_id(string, 任意):ソースノート ID。ノートから話題へ遷移する場合に指定可能
1import requests
2
3BASE_URL = "https://api.tikhub.io"
4HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
5
6url = f"{BASE_URL}/api/v1/xiaohongshu/app_v2/get_topic_info"
7params = {
8 "page_id": "5c1cc866febed9000184b7c1",
9 "source": "normal",
10 # "note_id": "...", # Optional: pass when navigating from a note / 从笔记跳转过来时可带
11}
12r = requests.get(url, headers=HEADERS, params=params)
13print(r.json())
14# Response contains page_info (name/views/discussions), tabs, share_info, etc. / 返回包含 page_info(名称/浏览量/讨论数)、tabs、share_info 等6.2 話題ノート一覧(話題下のノート)
特定の話題 / 話題タグ下のノート一覧を取得します。カーソルページネーションを使用します。
- 方法:GET
- パス:
/api/v1/xiaohongshu/app_v2/get_topic_feed - 公式ドキュメント:docs.tikhub.io/420136408e0
- パラメータ:
page_id(string, 必須):話題ページ IDsort(string, 任意):trend(最も人気、デフォルト)/time(最新)cursor_score(string, 任意):ページングカーソルスコア。次ページでは前ページ最後の item のcursor_scoreを送信last_note_id(string, 任意):次ページでは前ページ最後のノート ID(items[-1].id)を送信last_note_ct(string, 任意):次ページでは前ページ最後のノート作成時刻(items[-1].create_time)を送信session_id(string, 任意):セッション ID。ページ送り時は同一のものを維持first_load_time(string, 任意):初回読み込み時刻のタイムスタンプ。ページ送り時は同一のものを維持source(string, 任意):ソース、デフォルトnormal
1url = f"{BASE_URL}/api/v1/xiaohongshu/app_v2/get_topic_feed"
2
3# First request: pass only page_id and sort / 首次请求:只传 page_id 和 sort
4params = {
5 "page_id": "5c1cc866febed9000184b7c1",
6 "sort": "trend",
7}
8r = requests.get(url, headers=HEADERS, params=params)
9data = r.json()
10print(data)
11
12# Next page: pass through the following fields from the first response / 翻页请求:从首次响应中取下列字段透传
13# items = data["data"]["items"]
14# next_params = {
15# "page_id": "5c1cc866febed9000184b7c1",
16# "sort": "trend",
17# "cursor_score": items[-1]["cursor_score"],
18# "last_note_id": items[-1]["id"],
19# "last_note_ct": items[-1]["create_time"],
20# "session_id": data["data"]["session_id"],
21# "first_load_time": data["data"]["first_load_time"],
22# }