AliExpress
AliExpress through the shared marketplace schema: the same `SearchResult` and `Product` every marketplace returns, plus shipping quotes.
Operations
| Operation | Endpoint | Returns | Price |
|---|---|---|---|
| Search | GET | POST /v1/aliexpress/search | SearchResult | $0.001 |
| Image Search | POST /v1/aliexpress/image-search | SearchResult | $0.001 |
| Browse | GET | POST /v1/aliexpress/browse | SearchResult | $0.001 |
| Categories | GET | POST /v1/aliexpress/categories | CategoryList | $0.001 |
| Product | GET | POST /v1/aliexpress/product | Product | $0.001–$0.002 |
| Shipping | GET | POST /v1/aliexpress/shipping | ShippingQuote | $0.001–$0.002 |
AliExpress's older endpoints (/aliexpress/keyword-search, /aliexpress/product-details and the unversioned /aliexpress/image-search) are deprecated and have no v1 URL; Versioning maps each to its replacement.
Things Specific to AliExpress
Variants are not separately fetchable. A size or colour is a SKU inside one product, so
variant.productId is absent — one call gives you the whole variation matrix, with per-SKU prices and
stock (a number). A variant's id is AliExpress's numeric SKU id, which is what shipping takes.
One id per product. AliExpress spells some products two ways (3256… in keyword search, 1005…
elsewhere). Every response uses the global 1005… form; both are accepted as input.
Shipping is a quote, on request. product?include=shipping adds delivery (the cheapest option to
region) and shippingOptions (all of them); shipping
quotes any variant and quantity on its own. Without it, delivery.handlingDays still says how long the
seller takes to dispatch.
The product carries everything AliExpress states. The named category path, package weight (its
dimensions in the package's ext), the store's country (its three store scores in the seller's
ext.detailedRatings), per-variant purchaseLimit (bulkPrice and taxIncluded in the variant's ext),
and wholesale in the product's ext. Prices default to USD.
A price filter matches any variant. AliExpress products often span a price range, and a filter
matches a product if any of its variants falls in the band — while the card reports the lowest ("from")
price. So a priceMin=40 request can return a row displaying $28 whose $50 variant matched. About
90–95% of returned rows land inside the band; filter the returned price yourself if you need a hard
bound.
No reviews operation. A product carries an aggregate rating (rating.average and rating.count)
but no review rows.