API reference

Introduction

The AliExpress Reviews API returns AliExpress product reviews as JSON. It is a single REST endpoint over HTTPS; every response, errors included, is JSON.

Base URL
https://api.aliexpress-reviews.com
Auth
x-api-key header
Format
JSON, UTF-8

Quickstart: create a free key, then try it in the dashboard’s API tester or run:

curl "https://api.aliexpress-reviews.com/v1/reviews/1005006123456789?filter=5&pageSize=20" \
  -H "x-api-key: $REVIEWS_API_KEY"

Authentication

Create an API key in the dashboard and send it in the x-api-key header of every request. Keys start with rv_.

The key is shown only once, when you create it: we store a hash, not the key. If you lose it, rotate it from the dashboard; the old key stops working within 5 minutes.

Keep the key server-side. Anyone who has it can spend your quota.

GET /v1/reviews/{productId}

Returns one page of reviews of a product, plus a summary of its ratings.

Path parameters

NameTypeDescription
productId requiredstringNumeric AliExpress product id: the number in aliexpress.com/item/<id>.html.

Query parameters

NameTypeDefaultPlanDescription
pageinteger1FreePage number, 1–1000.
pageSizeinteger20FreeReviews per page: up to 20 on Free, up to 100 on Pro and Max.
filterstringallFreeOne of the filters below. Some values need a higher plan.
countrystringUSProShopper country, ISO 3166-1 alpha-2. Decides which reviews filter=local returns and the local count.
langstringen_USProLanguage reviews are translated to. originalContent keeps the buyer’s text.

Unknown parameters return 400. A parameter your plan doesn’t include returns 403, even if its value is the default.

Example request

curl "https://api.aliexpress-reviews.com/v1/reviews/1005006123456789?filter=5&pageSize=20" \
  -H "x-api-key: $REVIEWS_API_KEY"

Filters

Filters are the same ones AliExpress shows on the product page, and AliExpress applies them. Send one filter per request; they can’t be combined.

ValuePlanReturns
filter=allFreeAll reviews (default).
filter=5Free5-star reviews only.
filter=4Free4-star reviews only.
filter=3Free3-star reviews only.
filter=2Free2-star reviews only.
filter=1Free1-star reviews only.
filter=additionalProReviews with additional (follow-up) feedback.
filter=localProReviews from buyers in the country parameter.
filter=imageMaxReviews with photos.

The response’s summary.filterCounts tells you how many reviews each filter would return, so you can hide empty filters in your UI without extra requests.

Languages

With lang (Pro), content and additionalFeedback come translated by AliExpress. originalContent always keeps the buyer’s own words.

ValueLanguage
en_USEnglish
es_ESSpanish
fr_FRFrench
de_DEGerman
it_ITItalian
pt_BRPortuguese (Brazil)
nl_NLDutch
pl_PLPolish

Response

{
  "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://..."]
    }
  ]
}

Page fields

FieldTypeDescription
productIdstringThe requested product.
filterstringFilter applied.
page, pageSizeintegerPage returned and its requested size.
totalintegerReviews matching the filter.
totalPagesintegerPages available with this pageSize.
summary.averageRatingnumber | nullAverage stars of the product, null without reviews.
summary.totalReviewsintegerAll reviews of the product, regardless of the filter.
summary.ratingDistributionobjectReviews per star, keys "1"–"5".
summary.filterCountsobjectReviews per filter: all, image, additional, local (depends on country).
dataReview[]The reviews of this page.

Review fields

FieldTypeDescription
idstringAliExpress review id.
authorstringBuyer name, masked by AliExpress (e.g. J***n).
countrystringBuyer country, ISO 3166-1 alpha-2.
ratingintegerStars, 1–5.
contentstringReview text translated to lang.
originalContentstringReview text as the buyer wrote it.
additionalFeedbackstring | nullFollow-up feedback, if any.
datestringReview date, YYYY-MM-DD.
skustring | nullVariant the buyer bought (e.g. Color:Black).
helpfulVotesintegerTimes other shoppers marked it helpful.
imagesstring[]Full-size photo URLs. Max plan only.
thumbnailsstring[]Thumbnail URLs. Max plan only.

images and thumbnails are omitted on Free and Pro.

Pagination

Request page=1, 2, … until page reaches totalPages. Each page is one request against your quota, so use the largest pageSize your plan allows.

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

PlanRequests per dayMax pageSize
Free10020
Pro1,000100
Max10,000100

Quotas reset at 00:00 UTC. Every response that counts against the quota (200, 404, 429, 502) carries:

HeaderDescription
x-ratelimit-limitYour daily quota.
x-ratelimit-remainingRequests left today.
x-ratelimit-resetUnix time of the next reset.

Requests rejected with 400/401/403 don’t count. Over the quota you get 429 until the reset. There is also a global limit of 50 requests per second shared by all users.

Caching

Each page (product + parameters) is cached for up to 24 hours, so new reviews can take up to a day to show up. Cached responses still count against your quota.

Errors

Errors use standard HTTP status codes and a JSON body:

{ "error": { "message": "filter=image requires the MAX plan" } }
StatusMeaningCounts against quota
400Invalid or unknown parameter, or a malformed product id.No
401Missing x-api-key header.No
403Invalid API key, or a parameter or filter your plan doesn’t include.No
404AliExpress has no product with that id.Yes
429Daily quota exceeded, or the global rate limit was hit.—
502AliExpress failed to answer. Retry later.Yes

OpenAPI

The full spec is at /openapi.json (OpenAPI 3.0). Import it into Postman, Insomnia or a client generator.