API-Referenz
Einführung
Die AliExpress Reviews API liefert AliExpress-Produktbewertungen als JSON. Es ist ein einziger REST-Endpoint über HTTPS; jede Antwort, auch Fehler, ist JSON.
- Basis-URL
https://api.aliexpress-reviews.com- Auth
- Header
x-api-key - Format
- JSON, UTF-8
Schnellstart: kostenlosen Key erstellen, dann im API-Tester des Dashboards ausprobieren oder ausführen:
curl "https://api.aliexpress-reviews.com/v1/reviews/1005006123456789?filter=5&pageSize=20" \
-H "x-api-key: $REVIEWS_API_KEY"Authentifizierung
Erstelle im Dashboard einen API-Key und sende ihn im Header x-api-key jeder Anfrage. Keys beginnen mit rv_.
Der Key wird nur einmal angezeigt, nämlich beim Erstellen: Wir speichern einen Hash, nicht den Key. Wenn du ihn verlierst, erneuere ihn im Dashboard; der alte Key funktioniert dann innerhalb von 5 Minuten nicht mehr.
Bewahre den Key nur serverseitig auf. Jeder, der ihn hat, kann dein Kontingent verbrauchen.
GET /v1/reviews/{productId}
Liefert eine Seite mit Bewertungen eines Produkts sowie eine Übersicht seiner Bewertungen.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
productId erforderlich | string | Numerische AliExpress-Produkt-ID: die Zahl in aliexpress.com/item/<id>.html. |
Query-Parameter
| Name | Typ | Standard | Plan | Beschreibung |
|---|---|---|---|---|
page | integer | 1 | Free | Seitennummer, 1–1000. |
pageSize | integer | 20 | Free | Bewertungen pro Seite: bis zu 20 bei Free, bis zu 100 bei Pro und Max. |
filter | string | all | Free | Einer der unten genannten Filter. Manche Werte erfordern einen höheren Plan. |
country | string | US | Pro | Land des Käufers, ISO 3166-1 alpha-2. Bestimmt, welche Bewertungen filter=local liefert, und die Anzahl bei local. |
lang | string | en_US | Pro | Sprache, in die Bewertungen übersetzt werden. originalContent behält den Text des Käufers. |
Unbekannte Parameter liefern 400. Ein Parameter, der nicht in deinem Plan enthalten ist, liefert 403, auch wenn sein Wert dem Standard entspricht.
Beispielanfrage
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()Filter
Die Filter sind dieselben, die AliExpress auf der Produktseite zeigt, und AliExpress wendet sie an. Sende pro Anfrage einen filter; sie lassen sich nicht kombinieren.
| Wert | Plan | Liefert |
|---|---|---|
filter=all | Free | Alle Bewertungen (Standard). |
filter=5 | Free | Nur 5-Sterne-Bewertungen. |
filter=4 | Free | Nur 4-Sterne-Bewertungen. |
filter=3 | Free | Nur 3-Sterne-Bewertungen. |
filter=2 | Free | Nur 2-Sterne-Bewertungen. |
filter=1 | Free | Nur 1-Stern-Bewertungen. |
filter=additional | Pro | Bewertungen mit zusätzlichem (nachträglichem) Feedback. |
filter=local | Pro | Bewertungen von Käufern im Land aus dem Parameter country. |
filter=image | Max | Bewertungen mit Fotos. |
summary.filterCounts in der Antwort zeigt dir, wie viele Bewertungen jeder Filter liefern würde, sodass du leere Filter in deiner UI ohne zusätzliche Anfragen ausblenden kannst.
Sprachen
Mit lang (Pro) werden content und additionalFeedback von AliExpress übersetzt. originalContent behält immer die Worte des Käufers.
| Wert | Sprache |
|---|---|
en_US | Englisch |
es_ES | Spanisch |
fr_FR | Französisch |
de_DE | Deutsch |
it_IT | Italienisch |
pt_BR | Portugiesisch (Brasilien) |
nl_NL | Niederländisch |
pl_PL | Polnisch |
Antwort
{
"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://..."]
}
]
}Seitenfelder
| Feld | Typ | Beschreibung |
|---|---|---|
productId | string | Das angefragte Produkt. |
filter | string | Angewendeter Filter. |
page, pageSize | integer | Zurückgegebene Seite und ihre angefragte Größe. |
total | integer | Bewertungen, die zum Filter passen. |
totalPages | integer | Verfügbare Seiten mit diesem pageSize. |
summary.averageRating | number | null | Durchschnittliche Sterne des Produkts, null ohne Bewertungen. |
summary.totalReviews | integer | Alle Bewertungen des Produkts, unabhängig vom Filter. |
summary.ratingDistribution | object | Bewertungen pro Stern, Schlüssel "1"–"5". |
summary.filterCounts | object | Bewertungen pro Filter: all, image, additional, local (abhängig von country). |
data | Review[] | Die Bewertungen dieser Seite. |
Bewertungsfelder
| Feld | Typ | Beschreibung |
|---|---|---|
id | string | AliExpress-Bewertungs-ID. |
author | string | Käufername, von AliExpress maskiert (z. B. J***n). |
country | string | Land des Käufers, ISO 3166-1 alpha-2. |
rating | integer | Sterne, 1–5. |
content | string | Bewertungstext, übersetzt in lang. |
originalContent | string | Bewertungstext, wie der Käufer ihn geschrieben hat. |
additionalFeedback | string | null | Nachträgliches Feedback, falls vorhanden. |
date | string | Bewertungsdatum, YYYY-MM-DD. |
sku | string | null | Vom Käufer gekaufte Variante (z. B. Color:Black). |
helpfulVotes | integer | Wie oft andere Käufer sie als hilfreich markiert haben. |
images | string[] | URLs der Fotos in voller Größe. Nur Max-Plan. |
thumbnails | string[] | Thumbnail-URLs. Nur Max-Plan. |
images und thumbnails entfallen bei Free und Pro.
Paginierung
Rufe page=1, 2, … ab, bis page den Wert totalPages erreicht. Jede Seite zählt als eine Anfrage auf dein Kontingent, nutze also die größte pageSize, die dein Plan erlaubt.
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;
}
}Rate Limits
| Plan | Anfragen pro Tag | Max. pageSize |
|---|---|---|
| Free | 100 | 20 |
| Pro | 1.000 | 100 |
| Max | 10.000 | 100 |
Kontingente werden um 00:00 UTC zurückgesetzt. Jede Antwort, die aufs Kontingent zählt (200, 404, 429, 502), enthält:
| Header | Beschreibung |
|---|---|
x-ratelimit-limit | Dein Tageskontingent. |
x-ratelimit-remaining | Heute verbleibende Anfragen. |
x-ratelimit-reset | Unix-Zeit des nächsten Resets. |
Mit 400/401/403 abgelehnte Anfragen zählen nicht. Bei überschrittenem Kontingent erhältst du bis zum Reset 429. Zusätzlich gilt ein globales Limit von 50 Anfragen pro Sekunde, das sich alle Nutzer teilen.
Caching
Jede Seite (Produkt + Parameter) wird bis zu 24 Stunden zwischengespeichert, daher kann es bis zu einen Tag dauern, bis neue Bewertungen erscheinen. Gecachte Antworten zählen trotzdem auf dein Kontingent.
Fehler
Fehler verwenden Standard-HTTP-Statuscodes und einen JSON-Body:
{ "error": { "message": "filter=image requires the MAX plan" } }| Status | Bedeutung | Zählt zum Kontingent |
|---|---|---|
400 | Ungültiger oder unbekannter Parameter oder fehlerhafte Produkt-ID. | Nein |
401 | Header x-api-key fehlt. | Nein |
403 | Ungültiger API-Key oder ein Parameter bzw. Filter, der nicht in deinem Plan enthalten ist. | Nein |
404 | AliExpress hat kein Produkt mit dieser ID. | Ja |
429 | Tageskontingent überschritten oder globales Rate Limit erreicht. | — |
502 | AliExpress hat nicht geantwortet. Versuche es später erneut. | Ja |
OpenAPI
Die vollständige Spezifikation findest du unter /openapi.json (OpenAPI 3.0). Importiere sie in Postman, Insomnia oder einen Client-Generator.