AliExpress Product API: Search, Reviews and Shipping
AliExpress's own Open Platform is built for affiliates, sellers and dropshippers, each with their own app keys and approval. To read AliExpress product data as JSON without that, the Perceptlayer AliExpress API chains four GET endpoints: search (required query, page, sort), product (product_id), product-reviews (product_id, page, page_size, filter) and product-shipping (product_id, country). Each successful call costs 1 credit.
What does AliExpress's own API cover?
AliExpress's Open Platform is organised around who is calling. Its getting-started guide has separate tracks for affiliate developers, sellers' apps and dropshipping developers, and seller apps must be authorised by the seller before they call any API (AliExpress Open Platform, 2026). The affiliate programme accepts publishers with an online presence and traffic (AliExpress Portals, 2026).
That's the right route if you promote AliExpress products for commission or run a store on it. If you need to read product listings, reviews and shipping options for research, price monitoring or an agent, without joining a programme, the AliExpress API returns them as JSON with one key. Data is collected from publicly available sources and returned as found at the time of the call.
Which AliExpress endpoints are there?
Nine GET endpoints in three groups: finding products, reading one product, and reading a store. Every one costs 1 credit per successful call. Most parameters are required, so a call missing one fails with invalid_parameters (422) and costs nothing. The table lists each endpoint with its required inputs.
| Endpoint | Returns | Required |
|---|---|---|
/v1/aliexpress/autocomplete |
Search suggestions | query (up to 100 characters) |
/v1/aliexpress/search |
A page of products | query, page, sort |
/v1/aliexpress/product |
One product | product_id |
/v1/aliexpress/product-description |
Its description | description_ref |
/v1/aliexpress/product-reviews |
A page of reviews | product_id, page, page_size, filter |
/v1/aliexpress/product-shipping |
Shipping options | product_id, country |
/v1/aliexpress/store |
A store | seller_id, store_id |
/v1/aliexpress/store-benefits |
Store benefits | seller_id, store_id |
/v1/aliexpress/store-products |
A store's products | seller_id, store_id |
The chain this guide follows is search, then product, then reviews and shipping. The product description is a separate call because it takes a description_ref rather than the product ID; read that reference from the product response.
How do you search AliExpress products?
Call GET /v1/aliexpress/search with all three required parameters: the query, the page number and a sort. Add min_price and max_price to bound the price, ship_from to restrict where items ship from, and filters[] for the site's own filters. This request asks for the first page of phone cases, sorted by number of orders:
curl "https://api.perceptlayer.com/v1/aliexpress/search?query=phone+case&page=1&sort=orders" \
-H "X-API-Key: $API_KEY"
Keys go in the X-API-Key header and start with sk_live_. Get a free API key, and see the authentication docs for the details.
| Parameter | Type | Required | Notes |
|---|---|---|---|
query |
string | yes | Up to 200 characters |
page |
integer | yes | Start at 1 |
sort |
string | yes | default, orders, price_asc or price_desc |
min_price, max_price |
number | no | Price bounds |
ship_from |
string | no | Where the item ships from |
filters[] |
list of strings | no | The site's search filters |
autocomplete is a quick way to find the wording buyers use: send a partial term as query and it returns AliExpress's suggestions, which make better search queries than guesses.
What does a search response contain?
Our recorded search for query=wireless earbuds&page=1&sort=orders returns total_results 16,557 with page_size 60, and a results array. This is the first result, trimmed with …:
{
"success": true,
"data": {
"query": "wireless earbuds",
"sort": "orders",
"page": 1,
"page_size": 60,
"total_results": 16557,
"has_more": true,
"results": [
{
"product_id": "3256812408115438",
"title": "HTC NE79 TWS Bluetooth 6.0 Earbuds AI Translation 135 Languages ENC Noise Cancelling HiFi Stereo Headphones with LED Display",
"url": "https://www.aliexpress.com/item/3256812408115438.html",
"price": { "amount": 4.35, "currency": "USD", "formatted": "US $4.35" },
"original_price": { "amount": 17.31, "currency": "USD", "formatted": "US $17.31" },
"discount_percent": 74,
"rating": 4.9,
"sold_count": 17921,
"sold_text": "10,000+ sold",
"selling_points": ["Fastest delivery in 6 days"],
"is_sponsored": false,
…
},
…
]
}
}
product_id is what the product, reviews and shipping endpoints take. price.amount is the price shown, and original_price with discount_percent shows the advertised discount: 4.35 against 17.31 here. sold_count is a number while sold_text is the rounded label, so use the number for ranking. is_sponsored marks paid placement; filter on it before you treat order rank as popularity.
How do you get a product's reviews?
Call GET /v1/aliexpress/product-reviews with the product_id and the three paging and filter parameters, all required. page and page_size control the paging, and filter picks which reviews: all, local, image (reviews with photos) or additional. Nothing is documented about the largest page_size the endpoint accepts, so test it in the playground before you pick one.
curl "https://api.perceptlayer.com/v1/aliexpress/product-reviews?product_id=$PRODUCT_ID&page=1&page_size=20&filter=all" \
-H "X-API-Key: $API_KEY"
| Parameter | Type | Notes |
|---|---|---|
product_id |
string, required | From the search results |
page |
integer, required | Start at 1 |
page_size |
integer, required | Reviews per page |
filter |
string, required | all, local, image or additional |
The image filter is useful when you want reviews that show the item, for example to check that a product matches its listing photos. Reviews are written by people, so drop reviewer names and anything else that identifies them unless you have a reason and a lawful basis to keep it.
This Python loop pulls a fixed number of review pages for a list of products and saves each page as it arrives, so one failure doesn't lose the rest:
import json
import os
import requests
BASE = "https://api.perceptlayer.com/v1/aliexpress"
HEADERS = {"X-API-Key": os.environ["API_KEY"]}
PRODUCT_IDS = ["3256812408115438"] # product_id values from search
PAGES = 3
spent = 0
for pid in PRODUCT_IDS:
for page in range(1, PAGES + 1):
r = requests.get(f"{BASE}/product-reviews", headers=HEADERS, timeout=60,
params={"product_id": pid, "page": page, "page_size": 20, "filter": "all"})
if r.status_code != 200:
print(pid, page, r.json()["error"]["code"])
break
spent += int(r.headers["X-Credits-Used"])
with open(f"reviews-{pid}-{page}.json", "w") as f:
json.dump(r.json(), f)
print("credits used:", spent)
We haven't run this loop live for this article, and the reviews response isn't recorded, so it saves pages as returned. The loop moves to the next product on the first error, and a failed call adds nothing to spent because it costs nothing. The errors docs list the codes you might see.
How do you check shipping to a country?
Call GET /v1/aliexpress/product-shipping with the product_id and the destination country. Shipping options and costs on AliExpress depend on where the buyer is, so a price comparison that ignores shipping compares the wrong numbers. One call returns the options for one product to one country.
curl "https://api.perceptlayer.com/v1/aliexpress/product-shipping?product_id=$PRODUCT_ID&country=US" \
-H "X-API-Key: $API_KEY"
The country parameter is a string with no documented format beyond that, so confirm the code style the endpoint expects in the playground first. If you sell into several markets, multiply: 50 products checked for 4 countries is 200 calls.
What does a 100-product review pull cost?
Each endpoint is 1 credit per successful call, so the cost is the number of calls. Take 100 products from search results: the search pages to find them, 100 product calls, 3 pages of reviews each and one shipping check each to a single country. The recorded search returned page_size 60, so 100 products take 2 search pages.
| Step | Calls | Credits |
|---|---|---|
search, 2 pages of 60 |
2 | 2 |
product for 100 products |
100 | 100 |
product-reviews, 3 pages × 100 products |
300 | 300 |
product-shipping, 1 country × 100 products |
100 | 100 |
| Total | 502 | 502 |
That's 502 credits, inside the 1,000 free credits a month. Repeat it weekly to track new reviews and it's 502 × 4 = 2,008 credits a month, within the Starter pack's 10,000. To cut it, skip product for products you already have and fetch only page 1 of reviews on later runs. Failed calls cost nothing; the credits docs explain the balance, and pricing has what packs cost.
For comparing AliExpress prices with other marketplaces, the Walmart product search guide and the Google Shopping guide cover two more sources. To try this one, run a search in the playground on the AliExpress API page.
APIs in this post
Frequently asked questions
How much does the AliExpress API cost?
All 9 endpoints cost 1 credit per successful call, and failed calls cost nothing. Reviews for 100 products at 3 pages each, with product details, 2 search pages and a shipping check, come to 502 credits. Every verified account gets 1,000 free credits a month, and the pricing page has what credit packs cost.
Do I need an AliExpress affiliate or seller account?
No. One Perceptlayer key works for AliExpress and every other API in the catalogue, with no programme to join. If you want to earn commission on links, join the AliExpress affiliate programme and use its API, since this one only reads product data and doesn't generate affiliate links.
Why does my search call fail with invalid_parameters?
Search requires query, page and sort together, and sort must be default, orders, price_asc or price_desc. Leaving out page or sort, or sending another sort value, fails with invalid_parameters (422) and a message naming the parameter. The failed call costs nothing.
Can I get reviews with photos only?
Yes. Set filter=image on product-reviews. The other values are all, local and additional. The filter is required, so every reviews call names one. Paging works the same way for every filter, with page and page_size both required.
Are the prices and shipping costs live?
They're what AliExpress showed at the time of the call, for the country you asked about in the case of shipping. Prices and shipping change, so store the time of each call with the data. For a price tracker, re-check the products you watch on a schedule rather than relying on an old pull.