Referência da API
Introdução
A AliExpress Reviews API retorna avaliações de produtos do AliExpress em JSON. É um único endpoint REST sobre HTTPS; toda resposta, inclusive os erros, é JSON.
- URL base
https://api.aliexpress-reviews.com- Autenticação
- Header
x-api-key - Formato
- JSON, UTF-8
Início rápido: crie uma chave grátis e teste no testador de API do painel ou execute:
curl "https://api.aliexpress-reviews.com/v1/reviews/1005006123456789?filter=5&pageSize=20" \
-H "x-api-key: $REVIEWS_API_KEY"Autenticação
Crie uma chave de API no painel e envie-a no header x-api-key de cada requisição. As chaves começam com rv_.
A chave é exibida apenas uma vez, quando você a cria: armazenamos um hash, não a chave. Se você a perder, gere uma nova pelo painel; a chave antiga deixa de funcionar em até 5 minutos.
Mantenha a chave no servidor. Qualquer pessoa com ela pode consumir sua cota.
GET /v1/reviews/{productId}
Retorna uma página de avaliações de um produto, junto com o resumo das notas.
Parâmetros de caminho
| Nome | Tipo | Descrição |
|---|---|---|
productId obrigatório | string | Id numérico do produto no AliExpress: o número em aliexpress.com/item/<id>.html. |
Parâmetros de consulta
| Nome | Tipo | Padrão | Plano | Descrição |
|---|---|---|---|---|
page | integer | 1 | Free | Número da página, 1–1000. |
pageSize | integer | 20 | Free | Avaliações por página: até 20 no Free, até 100 no Pro e no Max. |
filter | string | all | Free | Um dos filtros abaixo. Alguns valores exigem um plano superior. |
country | string | US | Pro | País do comprador, ISO 3166-1 alpha-2. Define quais avaliações filter=local retorna e a contagem de local. |
lang | string | en_US | Pro | Idioma para o qual as avaliações são traduzidas. originalContent mantém o texto do comprador. |
Parâmetros desconhecidos retornam 400. Um parâmetro que seu plano não inclui retorna 403, mesmo que o valor seja o padrão.
Exemplo de requisição
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
Os filtros são os mesmos que o AliExpress mostra na página do produto, e é o AliExpress que os aplica. Envie um filter por requisição; eles não podem ser combinados.
| Valor | Plano | Retorna |
|---|---|---|
filter=all | Free | Todas as avaliações (padrão). |
filter=5 | Free | Apenas avaliações de 5 estrelas. |
filter=4 | Free | Apenas avaliações de 4 estrelas. |
filter=3 | Free | Apenas avaliações de 3 estrelas. |
filter=2 | Free | Apenas avaliações de 2 estrelas. |
filter=1 | Free | Apenas avaliações de 1 estrela. |
filter=additional | Pro | Avaliações com feedback adicional (de acompanhamento). |
filter=local | Pro | Avaliações de compradores no país indicado no parâmetro country. |
filter=image | Max | Avaliações com fotos. |
O summary.filterCounts da resposta informa quantas avaliações cada filtro retornaria, para você ocultar filtros vazios na sua interface sem requisições extras.
Idiomas
Com lang (Pro), content e additionalFeedback vêm traduzidos pelo AliExpress. originalContent sempre mantém as palavras do próprio comprador.
| Valor | Idioma |
|---|---|
en_US | Inglês |
es_ES | Espanhol |
fr_FR | Francês |
de_DE | Alemão |
it_IT | Italiano |
pt_BR | Português (Brasil) |
nl_NL | Holandês |
pl_PL | Polonês |
Resposta
{
"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 da página
| Campo | Tipo | Descrição |
|---|---|---|
productId | string | O produto solicitado. |
filter | string | Filtro aplicado. |
page, pageSize | integer | Página retornada e o tamanho solicitado. |
total | integer | Avaliações que correspondem ao filtro. |
totalPages | integer | Páginas disponíveis com este pageSize. |
summary.averageRating | number | null | Média de estrelas do produto, null sem avaliações. |
summary.totalReviews | integer | Todas as avaliações do produto, independentemente do filtro. |
summary.ratingDistribution | object | Avaliações por estrela, chaves "1"–"5". |
summary.filterCounts | object | Avaliações por filtro: all, image, additional, local (depende de country). |
data | Review[] | As avaliações desta página. |
Campos da avaliação
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Id da avaliação no AliExpress. |
author | string | Nome do comprador, mascarado pelo AliExpress (ex.: J***n). |
country | string | País do comprador, ISO 3166-1 alpha-2. |
rating | integer | Estrelas, 1–5. |
content | string | Texto da avaliação traduzido para lang. |
originalContent | string | Texto da avaliação como o comprador o escreveu. |
additionalFeedback | string | null | Feedback de acompanhamento, se houver. |
date | string | Data da avaliação, YYYY-MM-DD. |
sku | string | null | Variante que o comprador adquiriu (ex.: Color:Black). |
helpfulVotes | integer | Vezes que outros compradores a marcaram como útil. |
images | string[] | URLs das fotos em tamanho original. Apenas no plano Max. |
thumbnails | string[] | URLs das miniaturas. Apenas no plano Max. |
images e thumbnails são omitidos nos planos Free e Pro.
Paginação
Solicite page=1, 2, … até que page chegue a totalPages. Cada página é uma requisição na sua cota, então use o maior pageSize que seu plano permitir.
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;
}
}Limites de requisições
| Plano | Requisições por dia | pageSize máximo |
|---|---|---|
| Free | 100 | 20 |
| Pro | 1.000 | 100 |
| Max | 10.000 | 100 |
As cotas são renovadas às 00:00 UTC. Toda resposta que conta na cota (200, 404, 429, 502) traz:
| Header | Descrição |
|---|---|
x-ratelimit-limit | Sua cota diária. |
x-ratelimit-remaining | Requisições restantes hoje. |
x-ratelimit-reset | Horário Unix da próxima renovação. |
Requisições rejeitadas com 400/401/403 não contam. Ao exceder a cota, você recebe 429 até a renovação. Há também um limite global de 50 requisições por segundo compartilhado por todos os usuários.
Cache
Cada página (produto + parâmetros) fica em cache por até 24 horas, então novas avaliações podem levar até um dia para aparecer. Respostas em cache também contam na sua cota.
Erros
Os erros usam códigos de status HTTP padrão e um corpo JSON:
{ "error": { "message": "filter=image requires the MAX plan" } }| Status | Significado | Conta na cota |
|---|---|---|
400 | Parâmetro inválido ou desconhecido, ou id de produto malformado. | Não |
401 | Header x-api-key ausente. | Não |
403 | Chave de API inválida, ou parâmetro ou filtro que seu plano não inclui. | Não |
404 | O AliExpress não tem nenhum produto com esse id. | Sim |
429 | Cota diária excedida, ou o limite global de requisições foi atingido. | — |
502 | O AliExpress não respondeu. Tente novamente mais tarde. | Sim |
OpenAPI
A especificação completa está em /openapi.json (OpenAPI 3.0). Importe-a no Postman, no Insomnia ou em um gerador de clientes.