Product details include a rating and a review count. The comments are a separate call. You pass the same productId you used for GET /v1/aliexpress/product/detail, or the id from search. The response pages buyer text, a five-star rating, photos, and a summary of the rating breakdown.
👉 To access this endpoint, you must obtain an API key: https://steadyapi.com/register
Authentication
Every call uses a Bearer token from your SteadyAPI dashboard.
Documentation:
https://docs.steadyapi.com/#authenticating-requests
headers = {
'Authorization': 'Bearer YOUR_API_KEY'
}
Where this fits
Search is GET /v1/aliexpress/search. Detail is GET /v1/aliexpress/product/detail. Reviews take productId from either one. The description call is different: it wants description_token from the detail response as token, not the product id. Reviews do not use that token.
Reviews for one product
Endpoint: GET /v1/aliexpress/product/reviews
Documentation:
https://docs.steadyapi.com/#aliexpress-GETapi-v1-aliexpress-product-reviews
Parameters
productId— required product idpage— optional integer, default 1filter— optionalallorimage, defaultalllang— optional, defaulten_US
page moves through the comments. filter=image keeps reviews that include photos. filter=all is the default. Any other filter value is rejected. lang defaults to en_US. There is no sort parameter on this route.
Python
import requests
url = "https://api.steadyapi.com/v1/aliexpress/product/reviews"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
response = requests.get(url, headers=headers, params={
"productId": product["product_id"],
"page": 1,
"filter": "all",
})
response.raise_for_status()
payload = response.json()
print(payload.get("meta", {}).get("total"))
for review in payload.get("body", {}).get("reviews", [])[:8]:
print(review.get("rating"), review.get("buyer_country"), review.get("content"))
Annotated sample
{
"id": "30063078701207729",
"buyer_name": "c***s",
"buyer_country": "ES",
"rating": 2.0,
"content": "",
"date": "17 Aug 2023",
"sku_info": "Color:XT80 Black ",
"images": [],
"up_votes": 0,
"down_votes": 0,
"anonymous": false
}
Read each item from body.reviews with those keys. rating is a five-star score. In this row a source score of 40 becomes 2.0. content is the product feedback field, and it can be an empty string. images is a list. body.summary is the rating breakdown for the product, separate from the comment list. meta.total is the count, meta.page is the page you requested, and meta.product_id echoes the id. Store id if you are saving comments.
Practical use
Page with page, starting at 1. Stop when the page is empty or when the number of comments you have stored reaches meta.total. There is no cursor.
Use the fields listed above. content can be empty on a row that still has a rating, a date, and a sku_info. Do not expect a second text field on the mapped review.
filter=image changes meta.total as well as the list. A product with a high reviews_count on the detail call can still return a short page here when the filter is image.
👉 Get your API key and read reviews: https://steadyapi.com/register