AliExpress API

Read AliExpress products, SKU prices and reviews as JSON

The AliExpress API returns product search, full detail and store data as clean JSON.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a AliExpress endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
A
/aliexpress/v1

8 active endpoints, on 1 and 2 credit tiers.

  • POST/aliexpress/v1/search
  • POST/aliexpress/v1/product_detail
  • POST/aliexpress/v1/reviews
  • POST/aliexpress/v1/similar
  • POST/aliexpress/v1/description
  • POST/aliexpress/v1/shipping
  • POST/aliexpress/v1/store_info
  • +1 more

What AliExpress endpoints does ReefAPI ship?

8 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

8 endpoints

search

1 cr

Product search cards (price, sold_count, rating, store).

required
optional
query, country, currency, page, max_pages, max_results, sort, min_price, max_price, ship_from, free_shipping

product_detail

2 cr

Full product + SKU-variant price/stock matrix + specs + images + video + store + shipping + r…

required
optional
product_id, url, country, currency, language, province, city

reviews

1 cr

Buyer reviews (paginated.

required
optional
product_id, url, page, max_pages, max_results, page_size, filter, review_sort, country, currency

similar

1 cr

Products similar to a given item (search-backed 'more like this', seed product excluded), pag…

required
optional
product_id, url, query, page, max_pages, max_results, sort, country, currency

description

1 cr

Full product description text + images.

required
optional
product_id, url, description_url, country, currency

shipping

1 cr

Shipping options per destination country.

required
optional
product_id, url, country, currency, language, province, city

store_info

1 cr

Store profile (+ live seller metrics when a query is supplied).

required
optional
store_id, store_url, query, country, currency

deals

1 cr

SuperDeals / discounted cards (search-derived, sorted by discount).

required
query
optional
min_discount, sort, page, max_pages, max_results, country, currency

Every parameter, every allowed value →

AliExpress API

3 of 8 endpoints, ready to run

View docs ↗

One product in full: the price band, the discount base, every SKU with its own price, stock, image and ship-from country, plus the spec table and the rating.

2 credits1 required · 2 optional
POST/aliexpress/v1/product_detail
ok1069 ms · 1 records · sample
{
  "ok": true,
  "meta": {
    "api": "aliexpress",
    "endpoint": "product_detail",
    "mode": "live",
    "latency_ms": 1069.1,
    "record_count": 1,
    "cache_hit": false
  },
  "data": {
    "product": {
      "product_id": "1005006677962779",
      "title": "Zealot-S32 Wireless Speaker Outdoor Portable Subwoofer Speaker, Waterproof IPX 6, Dual Pairing,1800mAh Battery",
      "url": "https://www.aliexpress.com/item/1005006677962779.html",
      "category": {
        "category2": "518",
        "category3": "100000306"
      },
      "currency": "USD",
      "price_min": 19.36,
      "price_max": 19.36,
      "price_current": 19.36,
      "original_price_current": 40.34,
      "rating": 4.9,
      "review_count": 2673,
      "sold_count": 10000,
      "sold_text": "This seller: 1,000+ sales | Total sales: 10,000+",
      "total_stock": 9,
      "sku_properties": [
        {
          "name": "Color",
          "values": [
            "Black"
          ],
          "value_details": [
            {
              "value_id": "193",
              "name": "Black",
              "image": "https://ae-pic-a1.aliexpress-media.com/kf/S99e5b30841f24ab29abcc91323ea85cc4.jpg",
              "thumbnail": "https://ae-pic-a1.aliexpress-media.com/kf/S99e5b30841f24ab29abcc91323ea85cc4.jpg_120x120.jpg_.webp",
              "color_hex": "#000000"
            }
          ],
          "has_images": true
        },
        {
          "name": "Woofer Size/Full-Range Size",
          "values": [
            "1\""
          ],
          "value_details": [
            {
              "value_id": "100006186",
              "name": "1\"",
              "image": null,
              "thumbnail": null,
              "color_hex": null
            }
          ],
          "has_images": false
        },
        {
          "name": "Tweeter Size",
          "values": [
            "0.5\""
          ],
          "value_details": [
            {
              "value_id": "203067815",
              "name": "0.5\"",
              "image": null,
              "thumbnail": null,
              "color_hex": null
            }
          ],
          "has_images": false
        }
      ],
      "sku_variants": [
        {
          "sku_id": "12000037991739374",
          "props": {
            "Color": "Black",
            "Tweeter Size": "0.5\"",
            "Set Type": "Speaker",
            "Woofer Size/Full-Range Size": "1\""
          },
          "price": {
            "sale": 19.36,
            "sale_str": "$19.36",
            "original": 40.34,
            "currency": "USD"
          },
          "stock": 9,
          "available": true,
          "image": "https://ae-pic-a1.aliexpress-media.com/kf/S99e5b30841f24ab29abcc91323ea85cc4.jpg",
          "thumbnail": "https://ae-pic-a1.aliexpress-media.com/kf/S99e5b30841f24ab29abcc91323ea85cc4.jpg_120x120.jpg_.webp"
        }
      ],
      "variant_count": 1,
      "specs": [
        {
          "name": "High-concerned chemical",
          "value": "none"
        },
        {
          "name": "Input/Output",
          "value": "AUX"
        },
        {
          "name": "Battery Capacity[mAh]",
          "value": "1800"
        }
      ],
      "images": [
        "https://ae-pic-a1.aliexpress-media.com/kf/S834f12d4bcb84e2b8c96b9a81f728a0dj.jpg_960x960.jpg",
        "https://ae-pic-a1.aliexpress-media.com/kf/S0ade01339fea4faebd5b426047b5ef79p.jpg_960x960.jpg",
        "https://ae-pic-a1.aliexpress-media.com/kf/S8d5c809a43eb457aa6067c77ca2210f1x.jpg_960x960.jpg"
      ],
      "video_url": null,
      "store": {
        "store_id": 1103576287,
        "shop_id": 1103573332,
        "name": "Stone's Store",
        "store_url": "https://www.aliexpress.com/store/1103576287",
        "store_home": "https://m.aliexpress.com/store/storeHome.htm?sellerAdminSeq=2678280160",
        "seller_id": 2678280160,
        "seller_country": "China",
        "seller_open_time": "Mar 1, 2024",
        "seller_positive_rate": 100,
        "seller_score": 10,
        "seller_feedback_count": 10,
        "seller_level": "12-s",
        "top_rated": false,
        "logo": null
      },
      "shipping": {
        "ship_to": "US",
        "shipping_cost": 0,
        "free": true,
        "list_freight": 1.99,
        "delivery_estimate": "5-12 days",
        "delivery_eta": "Sep. 02",
        "delivery_days_min": 5,
        "delivery_days_max": 12,
        "guaranteed_delivery_days": 60,
        "ship_from": "China",
        "option_count": 1,
        "lines": [
          "Tracking available"
        ],
        "selected_option_code": "CAINIAO_FULFILLMENT_STD"
      },
      "coupons": null,
      "sale": {
        "type": "real_super_deals_atm",
        "ends_at": null,
        "countdown": null
      },
      "selling_points": null,
      "tags": {
        "choice": true,
        "local_plus": false,
        "scene_type": "ONLY_CHOICE",
        "site_type": "followCartPdpChoice"
      },
      "interest_point": null,
      "wishlist_count": 3116,
      "store_wished_count": 27817,
      "description_url": "https://pdp.aliexpress-media.com/product/description/stdmobile/v2/en_US/desc.json?productId=1005006677962779&key=Sce3f3c9e29184382975c78a5f3e799d4a.json&token=105a0b465a0a1f21dcaf68af597990d9&sellerId=2678280160",
      "weight": null,
      "weight_unit": null,
      "weight_raw": null,
      "weight_source": null
    }
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the AliExpress API works

AliExpress is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 184 engines.

02
Call
POST /aliexpress/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 or 2 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Get every SKU price for a product, in the currency you sell in

The search row gives you one price. The real number is per SKU, because on AliExpress the colour, the size and the shipping origin each carry their own price and their own stock.

01search
POST/aliexpress/v1/search
{"query": "bluetooth speaker", "country": "DE", "currency": "EUR", "max_results": 20}

One flat credit. Take results[].product_id.

02product_detail
POST/aliexpress/v1/product_detail
{"product_id": "...", "country": "DE", "currency": "EUR"}

Two credits. sku_variants[] is the payload: sku_id, the property combination, sale and original price, stock, availability and image.

03reviews
POST/aliexpress/v1/reviews
{"product_id": "...", "max_results": 100}

One flat credit for a hundred rows, each tagged with the SKU it refers to.

Three flat credits for a product priced at SKU level with a hundred buyer reviews attached — every endpoint on this engine is flat-rated, so a wide sweep costs what you can count in advance.

request
curl -X POST https://api.reefapi.com/aliexpress/v1/product_detail \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"product_id":"3256808363596774"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "aliexpress",
    "endpoint": "product_detail",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

AliExpress ids, SKU variants and what country plus currency change

The same AliExpress product is reachable under two different numeric ids, and the per-SKU block is where the prices and images that actually differ per variant live. Everything below was measured on 2026-08-27 with product_detail, search, reviews and shipping. Values shown as null were null in the response, not left blank in this table.

FieldMeasured exampleWhat it means
product_id (long form)3256806194871771The number in /item/<id>.html. 16 digits, begins 3256.
product_id (short form)1005006381186523The same product, exactly 2,251,799,813,685,248 (2^51) lower. Accepted as input and echoed back unchanged. Confirmed on four products.
sku_id12000036967401257One buyable variant, color plus size. 17 digits. A shoe listing returned 50 of them.
store_id / seller_id1102530031 / 2671009820Two different numbers on the same store block. store_items and store_info take store_id.
review_id60095699688325802From the reviews action, unrelated to product_id.
price_min / price_max14.99 / 18.79 EURCheapest and dearest SKU. price_current is the pre-selected SKU, not always the minimum.
sold_countnullAlways null on product_detail. The number lives in sold_text as free text ("5.000+ verkauft").
weightnullmeta.weight_found came back false on every product tried.
country / currencyUS, then DEChanged the price (2.64 USD to 14.99 EUR), the delivery window (8-14 days to 5-11 days) and the store_url host (aliexpress.com to de.aliexpress.com).

sku_variants[].props uses localized keys. With language=en the keys were "Color" and "Shoe Size"; with language=de the exact same product returned "Farbe" and "Schuhgroesse". Key your variant matching on sku_id, never on the property name.

The SKU id, the currency, and where the country parameter bites

Measured on 2026-08-27 across speakers and footwear on the US, German and Brazilian storefronts. Three of these lines go against us.

SKU images were being dropped. A customer found it, not us.

Our defect, and the worst kind — it was reported by someone paying for the data. The per-SKU images were parsed out and discarded, so a colour matrix came back without the picture of each colour. Re-measured for this page: sku_properties[].value_details[] carries image, thumbnail and color_hex for every option that has one, has_images flags the properties that do, and every sku_variants[] row carries its own image. The fix holds on every product we opened.

Two ids, and they answer different questions

product_id is the long number in the /item/ URL and it is what every endpoint takes. sku_id is the id of one buyable combination — one colour, one size, one shipping origin — and it is what a price and a stock number actually belong to. A review row carries sku_info, so you can tell which variant a complaint is about.

The price is a band, not a number

product_detail returns price_min, price_max and price_current, plus original_price_current as the discount base. Where a product has one buyable SKU those collapse to one figure; where it has several they do not, and the honest answer to "what does this cost" is the sku_variants[] row you mean. Each of those carries price.sale, price.original, its own stock and its own availability flag.

currency converts, it does not relabel

The same query on the US, German and Brazilian storefronts returned prices in USD, EUR and BRL respectively, and the German call on one product returned a Germany-warehouse SKU at 21.99 EUR against an original of 55.40 — a different warehouse, not a converted number. The ship-from country appears as a SKU property, so shipping origin is part of the price, not a footnote to it.

An id from one storefront may not resolve on another

Against us. A product_id taken from the German search feed answered NOT_FOUND on the US storefront on three separate attempts, while the German storefront answered it three times out of three. Another id from the same feed resolved on both. Carry the country you found an id under, and treat a NOT_FOUND as a storefront question before you treat it as a dead product.

store_info did not work on our run

Against us, and stated because you should not build on it today: two attempts on the same store, thirty-three and thirty-eight seconds each, came back TARGET_BLOCKED and then PARSE_ERROR. store_items and store_categories are not in the live catalogue at all. Store-level data is the weak corner of this engine; product, review and shipping data is not.

Search rows are thinner than detail rows

store_name was null on every search row we collected, in every country. rating was null on part of the US feed and filled on the German and Brazilian ones. sold_count follows the same pattern. If a field matters to you, read it from product_detail rather than from the grid.

Reviews are deep and they tell you how deep

A product reporting 807 reviews returned 100 in one call and told us total_reviews and total_pages in the response, so the fraction taken is never a guess. Across those 100 rows, rating, text, buyer, country, date and sku_info were on every single one; photos on about half. The bodies come in the buyer's own language, not translated.

Paging and cost

200 rows came back from one search call in about thirteen seconds, and page 50 asked directly still answered with a full page. Every endpoint on this engine is flat: search, reviews, similar, description, shipping and deals at 1 credit, product_detail at 2. There is no per-row arithmetic to do.

What people build with AliExpress

The jobs this data is most often used for.

8

endpoints

1/2

credits per call

01

Dropshipping tools call search and product_detail to source products with prices, SKUs and shipping.

02

Price-research products use deals and reviews to find trending, well-rated items.

03

Catalog tools use store_items to mirror a supplier's full AliExpress inventory.

What AliExpress data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 184 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/aliexpress/v1/product_detail \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"product_id":"3256808363596774"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/aliexpress/v1/product_detail",
    headers={"x-api-key": REEF_KEY},
    json={
  "product_id": "3256808363596774"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up AliExpress.

Get a free key →
Why does the same AliExpress product have two different ids, 3256... and 1005...?

They are the same item written two ways, and the gap between them is a constant: 2,251,799,813,685,248, which is 2^51. Measured on four products on 2026-08-27, for example 3256806194871771 minus 2^51 gives 1005006381186523. Both forms are accepted as product_id and the API echoes back whichever form you sent, so pick one and stay consistent if you are joining against your own table.

Do SKU-level images come through, and why did 50 variants share only 5 images?

Every variant carries image and thumbnail, and on a 50-variant running shoe all 50 were populated. Only 5 were distinct because AliExpress attaches the photo to the color, not to the color and size pair, so all ten sizes of the blue shoe point at the same blue photo. If you want the color swatch set on its own, sku_properties[].value_details[] carries one image, thumbnail and color_hex per color value.

Does every size of an AliExpress listing cost the same?

No, and that is the usual reason a scraped price looks wrong. On one measured listing price_min was 14.99 EUR and price_max 18.79 EUR, with EU 43 at 16.19 and EU 44 at 16.69. price_current (14.99) is the pre-selected SKU, not an average and not the minimum in every case. Read sku_variants[].price.sale if you need the price for a specific size.

Why is sold_count null when the listing clearly shows thousands sold?

AliExpress publishes the figure as a rounded label rather than an exact number, so product_detail returns sold_count null and puts the label in sold_text, for example "50,000+ sold". The search action does parse that label into sold_count, where "1,000+ sold" became 1000 and "24 sold" became 24. Treat search's sold_count as a floor, not an exact count.

What actually changes when I set country and currency?

Quite a lot. The same product returned 2.64 USD shipping to the US with an 8 to 14 day estimate, and 14.99 EUR to Germany with 5 to 11 days. The store_url host switched from aliexpress.com to de.aliexpress.com, and sold_text came back in German. meta also reports province_sent, which is defaulted from the country (US gave California, DE gave Berlin), so set province yourself if you need a state-accurate delivery estimate.

Why do the sku_variants property names change between calls?

Because the language parameter localizes them. The same shoe returned props keyed "Color" and "Shoe Size" under language=en and "Farbe" and "Schuhgroesse" under language=de. sku_id is stable across languages, so match on sku_id and use props only for display.

Why does review_count in product_detail differ from total_reviews in reviews?

They are two different counters read at two different moments. On 2026-08-27 the same product returned review_count 1354 from product_detail and total_reviews 1352 from reviews. The reviews action also gives you summary.distribution with a count per star (5: 1103, 4: 132, 3: 55, 2: 15, 1: 49) plus positive_num, neutral_num and negative_num, which is the block to use when the numbers have to add up.

What does product_type "ad" mean in search results?

It marks a sponsored placement. Search rows come back with product_type either "natural" or "ad", and the ad rows are interleaved with organic ones in the same results array. If you are measuring rank or building a price index, filter on product_type equal to "natural" first, otherwise paid placements will move your numbers around.

What is the AliExpress API?

AliExpress API is a ReefAPI endpoint group for product search, prices, variants, reviews and shipping. It returns live JSON through POST requests under /aliexpress/v1.

Is the AliExpress API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. AliExpress calls use the same shared credit balance as every other ReefAPI engine.

Do I need an AliExpress login or account?

No login to AliExpress is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the AliExpress data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the AliExpress API use?

AliExpress actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call AliExpress from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call aliexpress actions with the same key, credit pool and JSON envelope used by normal REST requests.

35 E-commerce & Marketplaces APIs on the same key

One key, one credit pool, one response envelope. If you are pulling AliExpress, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 183 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-27.