Referencia de la API
Introducción
AliExpress Reviews API devuelve reseñas de productos de AliExpress en JSON. Es un único endpoint REST sobre HTTPS; todas las respuestas, errores incluidos, son JSON.
- URL base
https://api.aliexpress-reviews.com- Autenticación
- Cabecera
x-api-key - Formato
- JSON, UTF-8
Inicio rápido: crea una clave gratuita y pruébala en el probador de API del panel o ejecuta:
curl "https://api.aliexpress-reviews.com/v1/reviews/1005006123456789?filter=5&pageSize=20" \
-H "x-api-key: $REVIEWS_API_KEY"Autenticación
Crea una API key en el panel y envíala en la cabecera x-api-key de cada petición. Las claves empiezan por rv_.
La clave solo se muestra una vez, al crearla: guardamos un hash, no la clave. Si la pierdes, rótala desde el panel; la clave anterior deja de funcionar en un plazo de 5 minutos.
Mantén la clave en el servidor. Cualquiera que la tenga puede gastar tu cuota.
GET /v1/reviews/{productId}
Devuelve una página de reseñas de un producto, junto con un resumen de sus valoraciones.
Parámetros de ruta
| Nombre | Tipo | Descripción |
|---|---|---|
productId obligatorio | string | Id numérico del producto de AliExpress: el número en aliexpress.com/item/<id>.html. |
Parámetros de consulta
| Nombre | Tipo | Por defecto | Plan | Descripción |
|---|---|---|---|---|
page | integer | 1 | Free | Número de página, 1–1000. |
pageSize | integer | 20 | Free | Reseñas por página: hasta 20 en Free, hasta 100 en Pro y Max. |
filter | string | all | Free | Uno de los filtros de abajo. Algunos valores requieren un plan superior. |
country | string | US | Pro | País del comprador, ISO 3166-1 alpha-2. Determina qué reseñas devuelve filter=local y el recuento de local. |
lang | string | en_US | Pro | Idioma al que se traducen las reseñas. originalContent conserva el texto del comprador. |
Los parámetros desconocidos devuelven 400. Un parámetro que tu plan no incluye devuelve 403, incluso si su valor es el predeterminado.
Ejemplo de petición
curl "https://api.aliexpress-reviews.com/v1/reviews/1005006123456789?filter=5&pageSize=20" \
-H "x-api-key: $REVIEWS_API_KEY"const url = new URL('https://api.aliexpress-reviews.com/v1/reviews/1005006123456789');
url.search = new URLSearchParams({ filter: '5', pageSize: '20' }).toString();
const res = await fetch(url, { headers: { 'x-api-key': process.env.REVIEWS_API_KEY } });
if (!res.ok) throw new Error((await res.json()).error.message);
const { summary, data } = await res.json();import os, requests
res = requests.get(
"https://api.aliexpress-reviews.com/v1/reviews/1005006123456789",
params={"filter": "5", "pageSize": 20},
headers={"x-api-key": os.environ["REVIEWS_API_KEY"]},
)
res.raise_for_status()
body = res.json()Filtros
Los filtros son los mismos que AliExpress muestra en la página del producto, y es AliExpress quien los aplica. Envía un solo filter por petición; no se pueden combinar.
| Valor | Plan | Devuelve |
|---|---|---|
filter=all | Free | Todas las reseñas (predeterminado). |
filter=5 | Free | Solo reseñas de 5 estrellas. |
filter=4 | Free | Solo reseñas de 4 estrellas. |
filter=3 | Free | Solo reseñas de 3 estrellas. |
filter=2 | Free | Solo reseñas de 2 estrellas. |
filter=1 | Free | Solo reseñas de 1 estrella. |
filter=additional | Pro | Reseñas con comentarios adicionales (de seguimiento). |
filter=local | Pro | Reseñas de compradores del país indicado en el parámetro country. |
filter=image | Max | Reseñas con fotos. |
El campo summary.filterCounts de la respuesta te indica cuántas reseñas devolvería cada filtro, para que puedas ocultar los filtros vacíos en tu interfaz sin peticiones adicionales.
Idiomas
Con lang (Pro), content y additionalFeedback llegan traducidos por AliExpress. originalContent conserva siempre las palabras originales del comprador.
| Valor | Idioma |
|---|---|
en_US | Inglés |
es_ES | Español |
fr_FR | Francés |
de_DE | Alemán |
it_IT | Italiano |
pt_BR | Portugués (Brasil) |
nl_NL | Neerlandés |
pl_PL | Polaco |
Respuesta
{
"productId": "1005006123456789",
"filter": "all",
"page": 1,
"pageSize": 20,
"total": 452,
"totalPages": 23,
"summary": {
"averageRating": 4.4,
"totalReviews": 452,
"ratingDistribution": { "5": 323, "4": 54, "3": 33, "2": 12, "1": 30 },
"filterCounts": { "all": 452, "image": 32, "additional": 6, "local": 63 }
},
"data": [
{
"id": "60012345678901234",
"author": "J***n",
"country": "ES",
"rating": 5,
"content": "Very good quality, arrived in 10 days",
"originalContent": "Muy buena calidad, llegó en 10 días",
"additionalFeedback": null,
"date": "2026-08-09",
"sku": "Color:Black",
"helpfulVotes": 3,
"images": ["https://..."],
"thumbnails": ["https://..."]
}
]
}Campos de la página
| Campo | Tipo | Descripción |
|---|---|---|
productId | string | El producto solicitado. |
filter | string | Filtro aplicado. |
page, pageSize | integer | Página devuelta y el tamaño solicitado. |
total | integer | Reseñas que coinciden con el filtro. |
totalPages | integer | Páginas disponibles con este pageSize. |
summary.averageRating | number | null | Media de estrellas del producto, null si no hay reseñas. |
summary.totalReviews | integer | Todas las reseñas del producto, independientemente del filtro. |
summary.ratingDistribution | object | Reseñas por estrella, claves "1"–"5". |
summary.filterCounts | object | Reseñas por filtro: all, image, additional, local (depende de country). |
data | Review[] | Las reseñas de esta página. |
Campos de la reseña
| Campo | Tipo | Descripción |
|---|---|---|
id | string | Id de la reseña en AliExpress. |
author | string | Nombre del comprador, enmascarado por AliExpress (p. ej. J***n). |
country | string | País del comprador, ISO 3166-1 alpha-2. |
rating | integer | Estrellas, 1–5. |
content | string | Texto de la reseña traducido a lang. |
originalContent | string | Texto de la reseña tal como lo escribió el comprador. |
additionalFeedback | string | null | Comentario de seguimiento, si lo hay. |
date | string | Fecha de la reseña, YYYY-MM-DD. |
sku | string | null | Variante que compró el comprador (p. ej. Color:Black). |
helpfulVotes | integer | Veces que otros compradores la marcaron como útil. |
images | string[] | URL de las fotos a tamaño completo. Solo plan Max. |
thumbnails | string[] | URL de las miniaturas. Solo plan Max. |
images y thumbnails se omiten en Free y Pro.
Paginación
Solicita page=1, 2, … hasta que page alcance totalPages. Cada página es una petición contra tu cuota, así que usa el pageSize más grande que permita tu plan.
async function allReviews(productId, filter = 'all') {
const reviews = [];
for (let page = 1; ; page++) {
const url = `https://api.aliexpress-reviews.com/v1/reviews/${productId}?filter=${filter}&page=${page}`;
const res = await fetch(url, { headers: { 'x-api-key': process.env.REVIEWS_API_KEY } });
const body = await res.json();
reviews.push(...body.data);
if (page >= body.totalPages) return reviews;
}
}Límites de uso
| Plan | Peticiones por día | pageSize máx. |
|---|---|---|
| Free | 100 | 20 |
| Pro | 1000 | 100 |
| Max | 10.000 | 100 |
Las cuotas se restablecen a las 00:00 UTC. Toda respuesta que cuenta para la cuota (200, 404, 429, 502) incluye:
| Cabecera | Descripción |
|---|---|
x-ratelimit-limit | Tu cuota diaria. |
x-ratelimit-remaining | Peticiones que quedan hoy. |
x-ratelimit-reset | Hora Unix del próximo restablecimiento. |
Las peticiones rechazadas con 400/401/403 no cuentan. Si superas la cuota recibes 429 hasta el restablecimiento. También hay un límite global de 50 peticiones por segundo compartido por todos los usuarios.
Caché
Cada página (producto + parámetros) se guarda en caché hasta 24 horas, así que las reseñas nuevas pueden tardar hasta un día en aparecer. Las respuestas en caché también cuentan para tu cuota.
Errores
Los errores usan códigos de estado HTTP estándar y un cuerpo JSON:
{ "error": { "message": "filter=image requires the MAX plan" } }| Estado | Significado | Cuenta para la cuota |
|---|---|---|
400 | Parámetro no válido o desconocido, o id de producto con formato incorrecto. | No |
401 | Falta la cabecera x-api-key. | No |
403 | API key no válida, o un parámetro o filtro que tu plan no incluye. | No |
404 | AliExpress no tiene ningún producto con ese id. | Sí |
429 | Cuota diaria superada, o se alcanzó el límite global de uso. | — |
502 | AliExpress no respondió. Inténtalo de nuevo más tarde. | Sí |
OpenAPI
La especificación completa está en /openapi.json (OpenAPI 3.0). Impórtala en Postman, Insomnia o un generador de clientes.