API Xiaohongshu Поиск
Состояние API
Данные о состоянии этого API временно недоступны, поэтому неизвестно, как он работал в последнее время. Это не значит, что API не работает.
Находите заметки Xiaohongshu по теме, по 20 на странице. Получите заголовок, фрагмент текста, число лайков, сохранений, комментариев и репостов, автора и время публикации. Фильтруйте результаты по типу контента и диапазону дат, а также задавайте порядок сортировки. Для следующей страницы передайте next_page_token обратно как page_token. Текст в поиске — фрагмент, а не полная заметка.
Xiaohongshu Search ищет заметки по keyword и возвращает одну страницу карточек заметок: заголовок, короткий фрагмент текста, число лайков и сохранений, автора и время публикации. У видеозаметок также есть ссылка на воспроизведение в video_url и длительность в duration_sec, а у карточек с отметкой места есть poi_name. По результатам видно, что сейчас публикуют по этой теме и какие заметки собирают больше всего реакций, поэтому эта возможность подходит как отправная точка для исследования трендов, мониторинга бренда и поиска авторов для сотрудничества.
Сузить выдачу можно параметрами sort (сначала новые, больше всего лайков, комментариев или сохранений), date_range (последние 24 часа, 7 дней, месяц, полгода или год; any_time без ограничения) и content_type (заметки с изображениями или видео). Учтите, что text в результатах поиска содержит только фрагмент; если нужен полный текст, передайте url из результата в возможность Note details. Значение null в like_count или collect_count означает, что данные для этого поля в этот раз не были возвращены, а не что его значение равно нулю.
Цена: $5.56 за 1 000 запросов ($0.005556 за вызов). Неудачные вызовы и пустые результаты не оплачиваются. Синхронный режим. Для долгих задач добавьте в тело запроса "mode": "async", получите job_id и опрашивайте статус.
Промпт для ИИ
Помогите мне написать скрипт для сбора данных через эндпоинт EveryInfra Xiaohongshu Поиск (xiaohongshu/search).
Как работает эндпоинт:
- Запрос: POST https://api.everyinfra.com/api/v1/social с заголовком Authorization: Bearer <API key>. Читайте ключ из переменной окружения EVERYINFRA_API_KEY и никогда не прописывайте его в коде.
- В теле запроса укажите platform: xiaohongshu и action: search, а параметры передайте в params.
- Обязательные параметры:
- keyword: Строка запроса для поиска по содержимому заметок Xiaohongshu (например, «sensitive skin sunscreen») в действии search. Ищет по тексту заметок, а не по ID пользователей.
- Необязательные параметры:
- content_type: Фильтрует возвращаемые заметки по типу контента, например изображения с текстом или видео. Используйте допустимые значения, указанные для текущего действия. (допустимые значения: all / image / video)
- date_range: Фильтрует заметки по времени публикации: any_time (без ограничения, то же, что без параметра), last_24_hours (последние 24 часа), last_7_days (последние 7 дней), last_30_days (последний месяц), last_6_months (последние п… (допустимые значения: any_time / last_1_year / last_24_hours / last_30_days / last_6_months / last_7_days)
- page_token: Курсор пагинации для действий comments, sub_comments, search, user_posts, search_users и hashtag: чтобы получить следующую страницу, передайте значение next_page_token из записи предыдущего ответа.
- sort: Задаёт порядок заметок в результатах действия search: relevance, newest, most_liked, most_commented или most_collected. Используйте только допустимые значения, указанные для этого действия. (допустимые значения: most_collected / most_commented / most_liked / newest / relevance)
- Возвращает список записей. Основные поля каждой записи: id, url (Ссылка на запись в Xiaohongshu), title, text (Текст заметки или комментария), like_count (Число лайков), collect_count (Число сохранений), comment_count, share_count, posted_at, image_url, author_name, author_id (ID пользователя-автора); всего полей: 29, полный список: https://api.everyinfra.com/api/v1/social/catalog?platform=xiaohongshu.
- Пример тела запроса:
{
"platform": "xiaohongshu",
"action": "search",
"params": {
"keyword": "小户型收纳"
}
}
- Цена: $5.56 за 1 000 запросов; неудачные и пустые результаты не оплачиваются.
- Для десятков или сотен целей добавьте в тело запроса "mode": "async": вы сразу получите job_id и сможете опрашивать GET https://api.everyinfra.com/api/v1/jobs/{job_id}, чтобы получить результат.
- При ответе 422 исправьте запрос, используя предложенные в ошибке имена параметров и допустимые значения; при ответе 429 или 503 подождите указанное в Retry-After время и повторите попытку.
Прежде чем писать код, спросите меня, какие цели мне нужны, сколько их будет, какие поля мне нужны и в каком формате вывести результат; затем согласуйте со мной план и примерную стоимость.Параметры запроса
| Имя | Расположение | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|---|
Authorization | header | string | Да | - | Укажите Bearer, а после него — ваш API-ключ. Создайте ключ в консоли; никогда не указывайте его в URL и не храните в репозитории кода. |
platform | body | string | Да | xiaohongshu | Идентификатор платформы, фиксированное значение. |
action | body | string | Да | search | Идентификатор возможности, фиксированное значение. |
keyword | body.params | string | Да | - | Строка запроса для поиска по содержимому заметок Xiaohongshu (например, «sensitive skin sunscreen») в действии search. Ищет по тексту заметок, а не по ID пользователей. |
content_type | body.params | string (enum) | Нет | - | Фильтрует возвращаемые заметки по типу контента, например изображения с текстом или видео. Используйте допустимые значения, указанные для текущего действия.Допустимые значенияallimagevideo |
date_range | body.params | string (enum) | Нет | - | Фильтрует заметки по времени публикации: any_time (без ограничения, то же, что без параметра), last_24_hours (последние 24 часа), last_7_days (последние 7 дней), last_30_days (последний месяц), last_6_months (последние полгода) или last_1_year (последний год). С last_30_days и last_1_year страница может содержать меньше 20 заметок, а пустая страница не оплачивается; для более полных страниц добавьте sort=newest. Эти два значения работают только в синхронных вызовах. При пагинации сохраняйте одно и то же значение.Допустимые значенияany_timelast_1_yearlast_24_hourslast_30_dayslast_6_monthslast_7_days |
page_token | body.params | string | Нет | - | Курсор пагинации для действий comments, sub_comments, search, user_posts, search_users и hashtag: чтобы получить следующую страницу, передайте значение next_page_token из записи предыдущего ответа; чтобы начать с первой страницы, не указывайте его. Для каждой страницы нужен один вызов API; оплата взимается за каждый запрос. |
sort | body.params | string (enum) | Нет | - | Задаёт порядок заметок в результатах действия search: relevance, newest, most_liked, most_commented или most_collected. Используйте только допустимые значения, указанные для этого действия.Допустимые значенияmost_collectedmost_commentedmost_likednewestrelevance |
Примеры кода
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": "search",
"params": {
"keyword": "小户型收纳"
}
}'Спецификация OpenAPI (JSON)Примеры читают ключ из переменной окружения EVERYINFRA_API_KEY; скопированный код никогда не содержит ваш ключ.
Пример ответа
Получено October 15, 2026 at 15:15 (UTC) вызовом этого API с параметрами из примера кода выше. results и count — реальный ответ этого вызова, из которого удалены персональные данные (имена, никнеймы, аватары, ссылки на профили, контакты); в списке оставлены первые 2. id, billing и quota меняются при каждом вызове, поэтому показана только их структура.
{
"id": "req_…",
"platform": "xiaohongshu",
"action": "search",
"results": [
{
"id": "6a55fff400000000110058c3",
"url": "https://www.xiaohongshu.com/explore/6a55fff400000000110058c3?xsec_token=YBwgl4W48szr36c1jFWrf2WWLLGDKYfA5rrXQivgGAj1A%3D",
"title": "抽屉乱救星!亚克力薄抽治愈收纳焦虑|附教程",
"text": "我发现这种又薄、还自带分隔的亚克力薄抽,简直就是为收纳小工具小零件而生的。今天就来分享详细的改造教程,评论区等你们交作业",
"like_count": 10388,
"collect_count": 19173,
"comment_count": 257,
"share_count": 2323,
"posted_at": "2026-07-14T09:23:00+00:00",
"image_url": "https://sns-na-i6.xhscdn.com/1040g2sg322jlesv1mse043d8j25m1nmqtti8mog?imageView2/2/w/608/format/heif/q/56|imageMogr2/strip&redImage/frame/0/enhance/4&ap=5&sc=SRH_PRV&sign=b642658d19400d337f2d5296494687c7&t=6ad0ee01",
"author_name": "•••",
"author_id": "•••",
"avatar_url": "https://sns-avatar-qc.xhscdn.com/•••",
"author_url": "https://www.xiaohongshu.com/•••",
"is_video": true,
"next_page_token": "n1.p2",
"video_url": "http://sns-video-v6.xhscdn.com/stream/79/110/258/01ea55fdf56356a44f0370019f5ff0eb8f_258.mp4?sign=734255c44c5f43e96d8b4a12707707a8&t=6ad58b41",
"duration_sec": 124,
"platform": "xiaohongshu"
},
{
"id": "6ac221730000000015002ebb",
"url": "https://www.xiaohongshu.com/explore/6ac221730000000015002ebb?xsec_token=YBPVyCh77T_2_QF6CFfJ2TiJ8GngzcLJj_Iho466OzP5o%3D",
"title": "鬼才🔥3平开放式小厨房超实用设计!",
"text": "#家的1%幸福效应 #howto装扮我的家 #适己化装修 #小户型也有完美厨房 #开放式厨房 #利用厨房空间",
"like_count": 38783,
"collect_count": 30796,
"comment_count": 1021,
"share_count": 6986,
"posted_at": "2026-10-04T09:50:43+00:00",
"image_url": "https://sns-na-i6.xhscdn.com/1040g008325t8oj9j4q005pl7le7nc96up4p8rk8?imageView2/2/w/608/format/heif/q/56|imageMogr2/strip&redImage/frame/0/enhance/4&ap=5&sc=SRH_PRV&sign=ee3e432a917938b82ba55751f30a860e&t=6ad0ee01",
"author_name": "•••",
"author_id": "•••",
"avatar_url": "https://sns-avatar-qc.xhscdn.com/•••",
"author_url": "https://www.xiaohongshu.com/•••",
"is_video": true,
"next_page_token": "n1.p2",
"video_url": "http://sns-video-v6.xhscdn.com/stream/1/110/258/01eac221721521f001037001a106536b1a_258.mp4?sign=e98d44d7b6f666dc2c4e841655d8c578&t=6ad58b41",
"duration_sec": 189,
"platform": "xiaohongshu",
"poi_id": "42303030413832584538"
}
],
"next_page_token": …,
"pagination": { … },
"count": 20,
"billing": {
"charged": …,
"charged_usd": …,
"balance_after_usd": …,
…
},
"quota": { … }
}Поля ответа
Бизнес-данные находятся в results. В таблице перечислены поля, которые может содержать запись; значения, которые платформа не показывает, никогда не выдумываются.
| Поле | Значение |
|---|---|
id | Уникальный ID записи на платформе. Уникален только в пределах одной платформы; на разных платформах ID могут повторяться. |
url | Ссылка на запись в Xiaohongshu. Ссылки из search, note, profile и hashtag обычно содержат токен доступа, поэтому открываются в браузере без входа в аккаунт (срок действия токена ограничен; чтобы получить свежую ссылку, повторите вызов API). Ссылки на заметки из user_posts не содержат токена, а без него в браузере не открываются: вызовите note с ID заметки, чтобы получить рабочую ссылку. Ссылки на профили из search_users тоже не содержат токена; чтобы получить рабочую ссылку, вызовите profile с user_id. Ссылки на заметки из pgy_content_square содержат токен, кроме запросов с keyword: в них токена нет. |
title | Заголовок. null, если на платформе нет заголовков (например, у текстовых постов). |
text | Текст заметки или комментария. note и hashtag возвращают полный текст; search и user_posts могут вернуть сокращённый фрагмент (примерно до 60 и 100 символов соответственно). Чтобы получить полный текст, вызовите note с ID заметки. |
like_count | Число лайков. В результатах note и в результатах по комментариям это число лайков у соответствующей записи; в profile — общее число лайков, полученных заметками аккаунта. null означает, что значение не общедоступно или не было возвращено при этом вызове; это не ноль. |
collect_count | Число сохранений. В результатах note это число сохранений заметки; в profile — общее число сохранений всех заметок аккаунта. null означает, что значение не общедоступно или не было возвращено при этом вызове; это не ноль. |
comment_count | Комментарии. null означает, что значение не раскрыто, а не 0. |
share_count | Количество раз, когда записью поделились. null означает, что значение не раскрыто, а не 0. |
posted_at | Время публикации в ISO 8601, UTC (например, 2026-08-07T12:34:56+00:00). Нестандартные строки платформы передаются как есть, поэтому учитывайте это при разборе. null означает, что платформа его не раскрывает. |
image_url | Ссылка на изображение. Возможности с несколькими изображениями могут возвращать массив image_urls. |
author_name | Отображаемое имя автора. |
author_id | ID пользователя-автора. Передавайте его в profile или user_posts. В результатах заметок используется 24-символьный ID из URL профиля; в результатах комментариев (comments, comments_batch, sub_comments) обычно другой, 29-символьный формат. Два формата для одного человека не совпадают, поэтому перед удалением дубликатов между пакетами приведите их к user_id, который возвращает profile. |
avatar_url | Ссылка на аватар. Некоторые платформы возвращают CDN-ссылки с заданным размером, срок действия которых может истечь. |
author_url | Ссылка на профиль автора. Она не содержит токена доступа, поэтому в браузере без входа в аккаунт не открывается; url, который profile возвращает для author_id, открывается напрямую. |
is_video | Является ли заметка видеозаметкой. URL воспроизведения НЕ входит в ответ с деталями заметки (с 2026-10-14): чтобы получить его, вызовите отдельное действие video с тем же URL заметки; каждый вызов API оплачивается отдельно. |
next_page_token | Токен страницы (search, comments, sub_comments, user_posts, search_users, hashtag): чтобы получить следующую страницу, передайте его без изменений в page_token, не меняя остальные параметры. |
video_url | Ссылка на воспроизведение видео (MP4), подписанная и с ограниченным сроком действия; если видео нужно сохранить, скачайте его сразу. null для заметок с изображениями или если значение не вернулось. Ссылка есть в записях search/user_posts и в отдельном действии video; детали заметки её не содержат (с 2026-10-14), поэтому, если нужна ссылка на воспроизведение, вызовите действие video с тем же URL заметки. |
duration_sec | Длительность видео в секундах. null для заметок с изображениями или если длительность не была возвращена при этом вызове. |
duration_seconds | Длительность в секундах. null для контента, который не является видео или аудио. |
platform | Идентификатор исходной платформы. Совпадает со значением platform в запросе (например, xiaohongshu, tiktok). |
poi_id | ID места, отмеченного на карточке результата поиска (search); отсутствует, если место не отмечено. |
poi_name | Название места: в search это место, отмеченное на карточке результата; в note_location это часть отмеченного места после точки, например филиал кофейни. Отсутствует, если место не отмечено или отмечено несколько мест. |
images | Ссылки на изображения. В note, hashtag, search и user_posts перечислены все изображения заметки по порядку. В результатах по комментариям (comments, comments_batch, sub_comments) перечислены изображения, прикреплённые к комментарию, включая стикеры; пустой массив означает, что их нет. null означает, что значение не было возвращено при этом вызове. |
is_goods_note | Является ли заметка товарной, со ссылками на товары (search, user_posts). |
is_cooperation_note | Является ли заметка платной коллаборацией с брендом (search, note); отсутствует, если это не удалось определить. |
author_is_verified | Трактуется так же, как на самой платформе |
updated_at | Трактуется так же, как на самой платформе |
author_red_id | Xiaohongshu ID автора: в результатах комментариев (comments, comments_batch, sub_comments) это ID автора комментария, в note это ID автора заметки. |
video_width | Трактуется так же, как на самой платформе |
video_height | Трактуется так же, как на самой платформе |
FAQ
Почему текст заметки обрезан?
В результатах поиска приходит фрагмент, который Xiaohongshu показывает на карточках выдачи, обычно несколько десятков символов. Чтобы получить полный текст и все изображения, вызовите Note details с url из записи результата: в этой ссылке уже есть токен доступа, который нужен странице заметки.
Как получить следующую страницу?
Передайте next_page_token с верхнего уровня ответа обратно в page_token, оставив остальные параметры без изменений. Без page_token выдача начинается с первой страницы. Каждая страница — это один вызов, а вызов, не вернувший ни одной записи, не оплачивается.
Где взять видео из видеозаметки?
Возьмите video_url из записи поиска. Это подписанная ссылка на воспроизведение MP4 с ограниченным сроком действия, поэтому, если файл нужно сохранить, скачайте его сразу. duration_sec содержит длительность, а у заметок с изображениями оба поля равны null. Note details не возвращает ссылку на воспроизведение, поэтому, если у вас есть только ссылка на заметку, вызовите с ней Video details.
Ошибки и оплата
- 401
- Ключ отсутствует или недействителен.
- 402
- Недостаточно средств на балансе. Сначала пополните баланс.
- 422
- Недопустимое имя или значение параметра. Исправьте запрос по подсказкам в сообщении об ошибке. Без списания.
- 429
- Достигнут лимит запросов в минуту. Подождите указанное в Retry-After время, затем повторите попытку.
- 503
- Не удалось выполнить. Зарезервированная сумма возвращается на баланс. Если результат неизвестен, проверьте его перед повторной попыткой.
- 200 (пусто)
- Нет данных. Без списания.
Официальные источники
Используются только для проверки объектов и терминов. Они не означают, что платформа разрешила или одобрила работу EveryInfra.
- Xiaohongshu: точки входа для заметок с изображениями и видеозаметок ↗
Публичная документация Xiaohongshu по диплинкам отдельно описывает заметки с изображениями и текстом, видеозаметки и страницы комментариев к заметкам. Этот источник приводится только для различения типов контента; параметры перехода в приложение из документации нельзя напрямую передавать в этот эндпоинт.
Проверено 2026-09-04