# DHgate API — search the China-to-global wholesale marketplace and read full listings: quantity price ladder, MOQ, variants with stock, shipping by country, seller, reviews

> Search DHgate products by keyword with the source's own filters: category, price range, free shipping, sold per piece, maximum MOQ, on-sale only, 4-star+ rated, ships-from country, destination country, and 6 sort orders. Each row: item id, title, URL, image, price range (the low end is the bulk-tier price), pre-discount range, discount %, unit, minimum order, free-shipping flag, units sold, product rating and review count, sponsored flag, and the seller (store name, store id, positive feedback %). Plus the source's total and category facets.
> ReefAPI engine `dhgate` · 5 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/dhgate/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/dhgate/v1/search — 3 credits
Search DHgate products by keyword with the source's own filters: category, price range, free shipping, sold per piece, maximum MOQ, on-sale only, 4-star+ rated, ships-from country, destination country, and 6 sort orders. Each row: item id, title, URL, image, price range (the low end is the bulk-tier price), pre-discount range, discount %, unit, minimum order, free-shipping flag, units sold, product rating and review count, sponsored flag, and the seller (store name, store id, positive feedback %). Plus the source's total and category facets.

**Parameters:**
- `query` (string, required) — Search words, e.g. 'phone case', 'wireless earbuds', 'wedding dress'. Required.
- `category` (string, optional) — DHgate category id to narrow the search, e.g. 105 (Cell Phones & Accessories). Ids come from `category_facets` of any search response; an id DHgate does not know is rejected.
- `min_price` (number, optional) — Minimum unit price in USD. The source matches on overlap: an item is kept when its price range (largest-quantity tier to single-piece price) overlaps min_price..max_price, so price_min may sit below min_price.
- `max_price` (number, optional) — Maximum unit price in USD (overlap match, see min_price).
- `free_shipping` (boolean, optional) — Only items with free shipping.
- `sold_per_piece` (boolean, optional) — DHgate's 'single piece' filter: items sold per piece rather than in lots. It does NOT mean a minimum order of 1 (measured: 6-7 of 40 rows still had a minimum order of 15-120 pieces); use `max_moq` for that.
- `max_moq` (integer, optional) — Only items whose minimum order quantity is at most this many units (DHgate's 'Min. Order: less than' filter).
- `on_sale` (boolean, optional) — Only items in a running promotion.
- `rating_4_up` (boolean, optional) — Only items DHgate lists under its review-score filter (4 stars and up).
- `ship_from` (string, optional) — Warehouse country the item ships from (two-letter code, e.g. US for DHgate's US local warehouses). The countries available for a query are in `ship_from_options`; nearly everything ships from CN, so CN does not narrow. The row flag `us_warehouse` is set on only some of the items this filter returns (7 of 41 measured).
- `ship_to` (string, optional, default "US") — Destination country (ISO 3166 two-letter code, e.g. US, DE, FR, GB, AU). DHgate's shipping cost and delivery estimate depend on it (measured: the same item ships free to DE/GB/FR and for US $10.31 to the US). Default US. Prices themselves did not change by country.
- `sort` (enum, optional, default "best_match") — Result order (DHgate's own sort bar). `best_match` mixes in sponsored rows and counts more loosely related items, so its total is larger than under the other sorts. [one of: best_match, best_selling, newest, price_asc, price_desc, top_rated]
- `page` (integer, optional, default 1) — Result page, 40 organic rows per page (plus up to 10 sponsored rows on best-match pages). DHgate serves pages 1-101; past that it returns nothing.

**Returns:** results[]{item_id, title, url, image, category_id, currency (USD), price_min (bulk-tier price of the cheapest variant), price_max, price_text, price_before_discount_min, price_before_discount_max, discount_pct, promotion_ends, unit, min_order, min_order_text, free_shipping, sold_count, rating, review_count, positive_review_pct, delivery_days_promise, us_warehouse, seller_coupons[], sponsored, seller{store_name, store_id, supplier_id, store_url, positive_feedback_pct, seller_tier, years_on_dhgate}} + total, page, has_more, sponsored_count, no_match (true = DHgate found nothing for the query), recommended_instead[] (the look-alike rows DHgate shows in that case; same shape as results), category_facets[]{category_id, name, count, subcategories[]}, ship_from_options{}

**Example request body:**
```json
{
  "query": "phone case",
  "sort": "best_selling"
}
```

### POST https://api.reefapi.com/dhgate/v1/product — 3 credits
Full DHgate product by item_id or URL: title, category path, images and video, price range and pre-discount range, the quantity price ladder (price per unit at each order-quantity tier), promotion, unit and units per lot, minimum and maximum order, units sold, total stock and stock by warehouse country, variant attributes and every SKU with its stock, item specifics, highlights, full description text, package size and weight, shipping to `ship_to` (cost, free flag, method, delivery days, processing days), the seller (store, positive feedback %, transactions, followers, on-time delivery rate, company name, year established, employees), seller coupons and the review breakdown (average, count, stars, platform-default reviews, AI summary).

**Parameters:**
- `item_id` (string, optional) — DHgate item code: the number at the end of a product URL (`/product/<slug>/1037834063.html`), returned as `item_id` in every search and store row. Provide item_id OR url.
- `url` (string, optional) — A dhgate.com product URL; alternative to item_id.
- `ship_to` (string, optional, default "US") — Destination country (ISO 3166 two-letter code, e.g. US, DE, FR, GB, AU). DHgate's shipping cost and delivery estimate depend on it (measured: the same item ships free to DE/GB/FR and for US $10.31 to the US). Default US. Prices themselves did not change by country.

**Returns:** item{item_id, title, url, category_id, category_name, category_path[], images[], video, currency, price_min, price_max, list_price_min, list_price_max, discount_pct, promotion{name, ends}, price_tiers[]{min_qty, max_qty, price, list_price, price_per_unit}, price_tiers_sku_id, unit, unit_plural, units_per_lot, priced_per (unit|lot: when lot, every price and quantity on this item counts lots of units_per_lot), min_order, min_order_units, max_order, sold_count, stock_total, stock_by_location{}, attributes[]{attribute_id, name, values[]{value_id, name, image}}, variants[]{sku_id, values[], value_ids[], stock, ships_from, on_sale}, specs{}, highlights[], description_text, description_images[], package{length_cm, width_cm, height_cm, gross_weight_kg}, shipping{ship_to, ship_to_name, ships_from, ships_from_name, cost, free, method, delivery_days_min, delivery_days_max, delivery_window_text, processing_days, money_back_days}, seller{store_name, store_id, supplier_id, store_url, positive_feedback_pct, transactions, positive_reviews_last_year, followers, item_count, member_since, store_years, on_time_delivery_rate, location, business_type, top_seller, about, company{name, year_established, employees, main_categories[], province, city}}, seller_coupons[]{amount, min_order_amount, ends, remaining}, rating{average, review_count, default_review_count, no_purchase_review_count, with_photos, stars{}, summary_ai}, rank, last_modified, sold_out}

**Example request body:**
```json
{
  "item_id": "1037834063"
}
```

### POST https://api.reefapi.com/dhgate/v1/sku_price — 1 credit
The quantity price ladder of ONE variant (SKU) of a DHgate product: price per unit at each order-quantity tier, current and before discount. Use a `sku_id` from `product` -> variants[]. The ladder in `product` is the default variant's; other variants can be priced differently.

**Parameters:**
- `item_id` (string, required) — DHgate item code.
- `sku_id` (string, required) — Variant id from `product` -> variants[].sku_id.
- `ship_to` (string, optional, default "US") — Destination country (ISO 3166 two-letter code, e.g. US, DE, FR, GB, AU). DHgate's shipping cost and delivery estimate depend on it (measured: the same item ships free to DE/GB/FR and for US $10.31 to the US). Default US. Prices themselves did not change by country.

**Returns:** item_id, sku_id, currency, price_tiers[]{min_qty, max_qty, price, list_price} (same unit as product price_tiers: per lot when the product is priced_per lot)

**Example request body:**
```json
{
  "item_id": "1037834063",
  "sku_id": "1479956928264249358"
}
```

### POST https://api.reefapi.com/dhgate/v1/reviews — 1 credit
Buyer reviews of a DHgate product, 10 per page: rating, text, date, buyer nickname (as DHgate masks it), buyer country and level, the variant bought, photos, helpful count, the seller's reply, and whether it is a platform-default 5-star review.

**Parameters:**
- `item_id` (string, required) — DHgate item code.
- `sort` (enum, optional, default "default") — Review order as DHgate offers it. [one of: default, most_helpful]
- `with_photos` (boolean, optional) — Only reviews that carry photos.
- `page` (integer, optional, default 1) — Review page (10 per page); `pages` says how many exist.

**Returns:** reviews[]{review_id, rating, text, date, date_text, buyer, buyer_country, buyer_level, variant{}, images[], video, helpful_count, seller_reply, is_platform_default} + total, pages, page, has_more

**Example request body:**
```json
{
  "item_id": "1037834063"
}
```

### POST https://api.reefapi.com/dhgate/v1/store — 2 credits
A DHgate seller's store: store name, positive feedback %, transactions, seller level, DHgate's service scores, and the store's product catalogue, 24 per page (item id, title, URL, image, price range, discount %, deal label, free-shipping flag, units sold). Use `store_id` from any search row or product seller block.

**Parameters:**
- `store_id` (string, required) — DHgate store number: `seller.store_id` in search/product results, or the number in a store URL (dhgate.com/store/21917041). A store URL is accepted too.
- `page` (integer, optional, default 1) — Store catalogue page, 24 products per page.

**Returns:** store{store_id, store_name, url, positive_feedback_pct, transactions, seller_level, service_scores{}} + results[]{item_id, title, url, image, currency, price_min, price_max, price_text, discount_pct, deal_label, free_shipping, sold_count} + page, has_more

**Example request body:**
```json
{
  "store_id": "21917041"
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=dhgate
- Human docs page: https://reefapi.com/docs/dhgate
- Overview page: https://reefapi.com/dhgate-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
