API de Publicaciones del usuario de Xiaohongshu
Salud de la API
- Salud 24 h
- Normal
- Tiempo medio 24 h
- —
- Saludable / normal
- Disponible
- Limitada
- Casi sin servicio
Últimas 24 horas
Últimos 30 días
Obtiene notas públicas del user_id, con las fijadas primero y el resto de la más reciente a la más antigua. El lote no garantiza todo el historial ni contenido privado o eliminado.
Xiaohongshu Publicaciones del usuario enumera las notas que ha publicado una cuenta a partir de su user_id: título, un extracto del texto, todas las imágenes, los recuentos de me gusta, guardados, comentarios y compartidos, y la fecha de publicación; en las notas de video añade el enlace de reproducción y la duración. Sirve para ver qué publica un creador y qué formatos le funcionan, ya sea para preseleccionar perfiles, vigilar cuentas de la competencia o revisar una cuenta antes de una campaña.
user_id es el identificador que aparece tras /user/profile/ en el enlace del perfil; también valen el enlace completo o un author_id de los resultados de comentarios o de búsqueda, pero no un apodo. Cada llamada devuelve una página de 20 notas. text es un extracto y url no lleva token de acceso, así que pide los detalles de la nota con su ID para leer el texto completo y obtener un enlace que se abra. Las notas fijadas, marcadas con is_pinned, salen primero.
Precio $5.56 por 1.000 solicitudes ($0.005556 por llamada). Las llamadas fallidas y los resultados vacíos no se cobran. Síncrona. Para tareas lentas añade "mode": "async" al cuerpo, recibe un job_id y consúltalo.
Prompt para IA
Pégalo en tu asistente de IA. Ya incluye los parámetros, los campos de respuesta y una solicitud de ejemplo de este endpoint, así que el asistente puede preguntarte qué necesitas y luego escribir el script.
Ayúdame a escribir un script de recopilación de datos con el endpoint de EveryInfra Xiaohongshu: Publicaciones del usuario (xiaohongshu/user_posts).
Contrato del endpoint:
- Solicitud: POST https://api.everyinfra.com/api/v1/social con la cabecera Authorization: Bearer <clave API>. Lee la clave de la variable de entorno EVERYINFRA_API_KEY y no la escribas en el código.
- En el cuerpo de la solicitud, pon platform en xiaohongshu y action en user_posts, y los parámetros dentro de params.
- Parámetros obligatorios:
- user_id: ID de usuario que aparece después de /user/profile/ en la URL de un perfil de Xiaohongshu, o la URL completa del perfil. También acepta el author_id que devuelven las acciones de comentarios.
- Parámetros opcionales:
- page_token: Cursor de paginación para las acciones comments, sub_comments, search, user_posts, search_users y hashtag: devuelve el valor next_page_token de una fila de la respuesta anterior para obtener la siguiente página.
- Devuelve una lista de registros. Campos principales de cada registro: id, url (Enlace del registro en Xiaohongshu), title, text (Texto de la nota o del comentario), like_count (Número de «me gusta»), collect_count (Número de guardados), comment_count, share_count, posted_at, image_url, author_name, author_id (ID de usuario del autor); 23 campos en total, lista completa en https://api.everyinfra.com/api/v1/social/catalog?platform=xiaohongshu.
- Cuerpo de solicitud de ejemplo:
{
"platform": "xiaohongshu",
"action": "user_posts",
"params": {
"user_id": "5bec178863f51f0001859bd9"
}
}
- Precio: $5.56 por 1.000 solicitudes; los resultados fallidos y vacíos no se cobran.
- Para decenas o cientos de objetivos, añade "mode": "async" al cuerpo: recibes un job_id al instante y consultas GET https://api.everyinfra.com/api/v1/jobs/{job_id} para obtener el resultado.
- Ante un 422, corrige la solicitud con los nombres de parámetros y los valores admitidos que sugiere el error; ante un 429 o un 503, espera lo que indique Retry-After y vuelve a intentarlo.
Antes de escribir código, pregúntame qué objetivos necesito, cuántos, qué campos y en qué formato quiero el resultado; luego confirma conmigo el plan y el coste aproximado.Parámetros de la solicitud
| Nombre | Ubicación | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|---|
Authorization | header | string | Sí | - | Bearer seguido de tu clave de API. Créala en la consola; nunca la pongas en una URL ni en un repositorio de código. |
platform | body | string | Sí | xiaohongshu | Identificador de la plataforma, valor fijo. |
action | body | string | Sí | user_posts | Identificador de la capacidad, valor fijo. |
user_id | body.params | No declarado | Sí | - | ID de usuario que aparece después de /user/profile/ en la URL de un perfil de Xiaohongshu, o la URL completa del perfil. También acepta el author_id que devuelven las acciones de comentarios. Se usa para obtener los datos de la cuenta o sus notas publicadas. No es el apodo. |
page_token | body.params | No declarado | No | - | Cursor de paginación para las acciones comments, sub_comments, search, user_posts, search_users y hashtag: devuelve el valor next_page_token de una fila de la respuesta anterior para obtener la siguiente página; omítelo para empezar desde la primera página. Cada página es una llamada y se factura por solicitud. |
Ejemplos de código
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": "user_posts",
"params": {
"user_id": "5bec178863f51f0001859bd9"
}
}'[Definición OpenAPI (JSON)]Los ejemplos leen la clave de la variable de entorno EVERYINFRA_API_KEY; el código copiado nunca contiene tu clave.
Ejemplo de respuesta
Todavía no hay una muestra real para estos parámetros de ejemplo: se muestra la estructura de la respuesta y sus campos según el contrato, con … como marcadores. No es el resultado de una llamada real.
{
"id": "req_…",
"platform": "xiaohongshu",
"action": "user_posts",
"results": [
{
"id": …,
"url": …,
"title": …,
"text": …,
"like_count": …,
"collect_count": …,
"comment_count": …,
"share_count": …,
"posted_at": …,
"image_url": …,
"author_name": …,
"author_id": …,
"avatar_url": …,
"author_url": …,
"is_video": …,
"next_page_token": …,
"video_url": …,
"duration_sec": …,
"duration_seconds": …,
"platform": …,
"images": …,
"is_goods_note": …,
"is_pinned": …,
"ip_location": …
}
],
"next_page_token": …,
"pagination": { … },
"count": …,
"billing": {
"charged": …,
"charged_usd": …,
"balance_after_usd": …,
…
},
"quota": { … }
}Campos de la respuesta
Los datos están en results. La tabla lista los campos que puede tener cada registro; los valores que la plataforma no muestra nunca se inventan.
| Campo | Significado |
|---|---|
id | Identificador único del registro en la plataforma. Solo es único dentro de una plataforma; puede repetirse entre plataformas. |
url | Enlace del registro en Xiaohongshu. Los enlaces de search, note, profile y hashtag suelen incluir un token de acceso y se abren sin iniciar sesión (el token caduca; vuelve a llamar para obtener uno nuevo). Los enlaces de notas de user_posts no llevan token y lo necesitan para abrirse en el navegador: llama a note con el ID de la nota para obtener un enlace que se abra. Los enlaces de perfil de search_users tampoco llevan token; llama a profile con el user_id para obtener uno que se abra. |
title | Título. null cuando la plataforma no usa títulos (por ejemplo publicaciones solo de texto). |
text | Texto de la nota o del comentario. note y hashtag devuelven el texto completo; search y user_posts pueden devolver un extracto recortado (unos 60 y 100 caracteres como máximo, respectivamente). Llama a note con el ID de la nota para obtener el texto completo. |
like_count | Número de «me gusta». En resultados de notas y comentarios, los de ese elemento; en profile, el total que han recibido las notas de la cuenta. null significa que no es público o que no se obtuvo en esta llamada, no cero. |
collect_count | Número de guardados. En resultados de notas, las veces que se guardó esa nota; en profile, el total de guardados de las notas de la cuenta. null significa que no es público o que no se obtuvo en esta llamada, no cero. |
comment_count | Comentarios. null significa no publicado, no 0. |
share_count | Veces compartido. null significa no publicado, no 0. |
posted_at | Fecha de publicación en ISO 8601, UTC (por ejemplo 2026-08-07T12:34:56+00:00). Las cadenas no estándar de la plataforma se transmiten tal cual, así que conviene analizarlas con tolerancia. null significa que la plataforma no la publica. |
image_url | Enlace de imagen. Las capacidades con varias imágenes pueden devolver una lista image_urls. |
author_name | Nombre visible del autor. |
author_id | ID de usuario del autor. Puedes enviarlo a profile o user_posts. En los resultados de notas es el ID de 24 caracteres de la URL del perfil; en los de comentarios (comments, comments_batch, sub_comments) suele ser otra forma de 29 caracteres. Las dos formas de una misma persona no coinciden: antes de eliminar duplicados entre lotes, conviértelas con el user_id que devuelve profile. |
avatar_url | Enlace a la imagen de perfil. Algunas plataformas dan enlaces de CDN con tamaño que pueden caducar. |
author_url | Enlace al perfil del autor. No lleva token de acceso, así que no se abre sin iniciar sesión; la url que devuelve profile para el author_id sí se abre directamente. |
is_video | Si la nota es de vídeo. La URL de reproducción NO va en la respuesta del detalle de la nota (desde 2026-10-14): llama a la acción video aparte con la misma URL de la nota para obtenerla; cada llamada se cobra por uso. |
next_page_token | Token de paginación (search, comments, sub_comments, user_posts, search_users, hashtag): devuélvelo sin cambios como page_token, con los demás parámetros iguales, para obtener la página siguiente. |
video_url | Enlace de reproducción del vídeo (MP4), firmado y con caducidad: si necesitas conservarlo, descarga el archivo cuanto antes. null en las notas de imagen o si esta vez no se obtuvo. Aparece en las filas de search/user_posts y en la acción video aparte; el detalle de la nota no lo incluye (desde 2026-10-14): llama a video con la misma URL de la nota cuando necesites el enlace. |
duration_sec | Duración del vídeo en segundos. null en las notas de imagen o si esta vez no se obtuvo. |
duration_seconds | Duración en segundos. null en contenido que no es video ni audio. |
platform | Identificador de la plataforma, igual que platform en la solicitud (por ejemplo xiaohongshu, tiktok). |
images | Enlaces de imágenes. En note, hashtag, search y user_posts, todas las imágenes de la nota en orden. En los resultados de comentarios (comments, comments_batch, sub_comments), las imágenes adjuntas al comentario, incluidos los stickers; un array vacío significa que no hay ninguna. null significa que esta vez no se obtuvo este dato. |
is_goods_note | Indica si la nota es de venta y lleva enlaces de productos (search, user_posts). |
is_pinned | Indica si la nota está fijada arriba en el perfil del autor (user_posts). Las fijadas salen primero, así que déjalas fuera si analizas por fecha de publicación. |
ip_location | Ubicación por IP (provincia o país) que muestra Xiaohongshu; no la escribe el usuario. Solo algunas filas de user_posts la traen. |
Preguntas frecuentes
¿Dónde encuentro el user_id?
Abre el perfil del creador: el identificador es la cadena que sigue a /user/profile/ en el enlace. También puedes pasar el enlace completo del perfil o un author_id tomado de los resultados de comentarios o de búsqueda. Un apodo no sirve para identificar la cuenta.
¿Por qué los enlaces de las notas no se abren en el navegador?
Los enlaces que devuelve esta capacidad no llevan token de acceso, y un navegador sin sesión no puede abrirlos. Llama a Xiaohongshu Detalles de la nota con el ID de la nota: obtendrás una url que sí se abre y, de paso, el texto completo.
¿Cómo leo todas las notas de una cuenta?
Cada llamada devuelve una página. Pasa el next_page_token de cualquier fila como page_token en la siguiente llamada, con los demás parámetros iguales, hasta que no haya más páginas. Cada página se cobra como una llamada aparte, y limit se acepta pero no cambia el tamaño de la página, así que calcula las llamadas para cuentas con mucho historial.
Errores y facturación
- 401
- Falta la clave o no es válida. La autenticación se comprueba antes que los parámetros, así que las solicitudes sin autenticar no ven el esquema de parámetros.
- 422
- Nombre o valor de parámetro incorrecto. El error enumera los parámetros y valores permitidos de esta capacidad y la opción más cercana; ocurre antes de cualquier cobro.
- 402
- Saldo insuficiente. Recarga primero.
- 429
- Se alcanzó el límite de solicitudes por minuto de la cuenta (todas sus claves API cuentan juntas; antes se aplica el límite propio de una clave si es menor). Espera lo que indique Retry-After y vuelve a intentarlo; un paquete de velocidad en la consola sube el límite.
- 503
- No se pudo completar ahora. Cualquier cargo de la llamada vuelve automáticamente a tu saldo, y el recibo de facturación de la respuesta indica el resultado real, también cuando aún no se conoce. No reenvíes a ciegas.
- 200 vacío
- La solicitud terminó sin datos y no se cobra (billing.reason = empty_result_refunded).