# Uzum Market API scraper — uzum.uz, Uzbekistan's largest marketplace: keyword search, category and seller listings, full product cards (every SKU's price, struck price, Uzum Nasiya instalment, stock and delivery), customer reviews with seller replies, and seller profiles. Prices in UZS.

> Search Uzum Market by keyword, optionally inside a category, one seller's shop or a price range, with the site's sorts. Needs query or shop_id (shop_id alone lists a seller's catalogue).
> ReefAPI engine `uzum` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/uzum/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/uzum/v1/search — 2 credits
Search Uzum Market by keyword, optionally inside a category, one seller's shop or a price range, with the site's sorts. Needs query or shop_id (shop_id alone lists a seller's catalogue).

**Parameters:**
- `query` (string, optional) — Search words in Russian, Uzbek or Latin (brand names work: 'iphone 15'). Required unless shop_id is given.
- `category_id` (integer, optional) — Optional Uzum category id (the number at the end of a uzum.uz/ru/category/… URL, category.id of a product, or the categories action), e.g. 12690 = smartphones.
- `shop_id` (integer, optional) — Optional: only this seller's products (seller.shop_id from product or seller). An unknown id returns an empty list.
- `min_price` (integer, optional) — Optional lower price bound in UZS (whole sum), inclusive. The source filters on the product's price; a row shows one colour group, so a few rows can sit just outside the range.
- `max_price` (integer, optional) — Optional upper price bound in UZS (whole sum), inclusive (same product-level caveat as min_price).
- `sort` (enum, optional, default "relevance") — Order of results, the site's own sorts. The site sorts by its own product price, while a row shows one colour group's price, so price sorts are approximate per row. [one of: relevance, orders, rating, newest, price_asc, price_desc]
- `language` (enum, optional, default "ru") — Language of titles and texts. It also changes search matching and ranking. [one of: ru, uz]
- `page` (integer, optional, default 1) — Result page (1-based). The source stops near result 10 000; a page starting past result 9 900 is refused.
- `limit` (integer, optional, default 48) — Rows per page, 1-100 (the source's own maximum).

**Returns:** results[{position, product_id, sku_group_id (one colour/variant group of the product; a product can fill several rows), default_sku_id, card_type, title, url, image, images[], price_uzs (this group's selling price, whole sum), old_price_uzs (struck price, only when higher), discount_percent (computed), installment_monthly_uzs (Uzum Nasiya monthly payment, not the price), installment_text, currency, rating, review_count, single_sku, is_adult, delivery_date_text, stock_type (FBO = Uzum warehouse, FBS = seller's warehouse, DBS = seller delivers), is_sponsored (paid placement), badges[]}], count, page, limit, total_results (the source's own figure), has_more, last_page, query, corrected_query, applied_filters, sort_applied, language

**Example request body:**
```json
{
  "query": "кроссовки",
  "limit": 20
}
```

### POST https://api.reefapi.com/uzum/v1/category — 2 credits
List one Uzum Market category with the site's sorts, an optional keyword, seller and price range.

**Parameters:**
- `category_id` (integer, required) — Uzum category id (the number at the end of a uzum.uz/ru/category/… URL, category.id of a product, or the categories action), e.g. 12690 = smartphones.
- `query` (string, optional) — Optional keyword inside the category.
- `shop_id` (integer, optional) — Optional: only this seller's products (seller.shop_id from product or seller). An unknown id returns an empty list.
- `min_price` (integer, optional) — Optional lower price bound in UZS (whole sum), inclusive. The source filters on the product's price; a row shows one colour group, so a few rows can sit just outside the range.
- `max_price` (integer, optional) — Optional upper price bound in UZS (whole sum), inclusive (same product-level caveat as min_price).
- `sort` (enum, optional, default "relevance") — Order of results, the site's own sorts. The site sorts by its own product price, while a row shows one colour group's price, so price sorts are approximate per row. [one of: relevance, orders, rating, newest, price_asc, price_desc]
- `language` (enum, optional, default "ru") — Language of titles and texts. It also changes search matching and ranking. [one of: ru, uz]
- `page` (integer, optional, default 1) — Result page (1-based). The source stops near result 10 000; a page starting past result 9 900 is refused.
- `limit` (integer, optional, default 48) — Rows per page, 1-100 (the source's own maximum).

**Returns:** results[{position, product_id, sku_group_id (one colour/variant group of the product; a product can fill several rows), default_sku_id, card_type, title, url, image, images[], price_uzs (this group's selling price, whole sum), old_price_uzs (struck price, only when higher), discount_percent (computed), installment_monthly_uzs (Uzum Nasiya monthly payment, not the price), installment_text, currency, rating, review_count, single_sku, is_adult, delivery_date_text, stock_type (FBO = Uzum warehouse, FBS = seller's warehouse, DBS = seller delivers), is_sponsored (paid placement), badges[]}], count, page, limit, total_results (the source's own figure), has_more, last_page, query, corrected_query, applied_filters, sort_applied, language, category{id, name, parent{id, name}}

**Example request body:**
```json
{
  "category_id": 12690,
  "sort": "orders",
  "limit": 20
}
```

### POST https://api.reefapi.com/uzum/v1/product — 1 credit
One full Uzum Market product card by product id or URL: title, brand, description, highlights, properties, category path, every SKU with its options, price, struck price, Uzum Nasiya monthly payment, available quantity, warehouse type and delivery date, plus rating, review count, order count and the seller with its legal name.

**Parameters:**
- `product_id` (integer, optional) — Uzum product id: product_id from any search/category row (the number at the end of a uzum.uz/ru/product/… URL).
- `url` (string, optional) — Alternatively a uzum.uz product URL.
- `language` (enum, optional, default "ru") — Language of titles and texts. It also changes search matching and ranking. [one of: ru, uz]

**Returns:** product{product_id, title, url, brand, category{id, name}, breadcrumbs[{id, name}], price_uzs (lowest SKU price), price_max_uzs, price_min_in_stock_uzs, old_price_uzs, discount_percent, currency, available_quantity, in_stock, orders_quantity (the source rounds it down once large), orders_quantity_is_lower_bound, rating, review_count, review_photo_count, description, short_description, highlights[], properties[{name, value, filter_id, value_id}], options[{id, name, type, values[{id, name, code}]}], skus[{sku_id, seller_sku, options[{name, value, value_code, value_id}], price_uzs, old_price_uzs, discount_percent, installment_monthly_uzs, installment_text, available_quantity, in_stock, stock_type, warehouse, delivery_days, delivery_date, delivery_text, vat_rate, vat_amount_uzs, discount_ends_at, image}], sku_count, images[], video_url, badges[], warranty_months, is_original, seller{shop_id, name, short_name, shop_url_slug, url, is_official, rating, review_count, orders_quantity, avatar, seller_account_id, legal_records[{name, value}]}}

**Example request body:**
```json
{
  "product_id": 146320
}
```

### POST https://api.reefapi.com/uzum/v1/reviews — 2 credits
Customer reviews of one Uzum Market product, paged in the site's own order: star rating, packaging and delivery ratings, text, pros, cons, the buyer's display name (null when posted anonymously), date, the options bought, photos, likes and the seller's reply.

**Parameters:**
- `product_id` (integer, required) — Uzum product id (product_id from search/category/product).
- `page` (integer, optional, default 1) — Review page (1-based).
- `limit` (integer, optional, default 20) — Reviews per page, 1-100.

**Returns:** reviews[{review_id, product_id, rating, packaging_rating, delivery_rating, text, pros, cons, author, is_anonymous, created_at, edited, options_bought[{name, value}], photos[], like_count, dislike_count, seller_reply{text, created_at, shop_name}}], count, page, limit, has_more, product_id

**Example request body:**
```json
{
  "product_id": 1659259,
  "limit": 20
}
```

### POST https://api.reefapi.com/uzum/v1/seller — 1 credit
A seller's (shop's) public profile on Uzum Market: name, description, rating, review and order counts, official flag, registration date, legal name and records. List its products with search shop_id=<shop_id>.

**Parameters:**
- `shop` (string, required) — The shop's URL name (seller.shop_url_slug of a product, the part after /shop/ in uzum.uz/ru/shop/<name>) or the whole shop URL. The numeric shop id is not accepted by the source here.
- `language` (enum, optional, default "ru") — Language of titles and texts. It also changes search matching and ranking. [one of: ru, uz]

**Returns:** seller{shop_id, name, shop_url_slug, url, description, rating, review_count, orders_quantity, is_official, registered_at, avatar, banner, seller_account_id, legal_name, legal_records[{name, value}], registration_number, contacts[], has_charity_products}

**Example request body:**
```json
{
  "shop": "macintoshuz"
}
```

### POST https://api.reefapi.com/uzum/v1/categories — 3 credits
Uzum Market's category tree (about 4 100 categories) as a flat list with parent ids, to find a category_id for category or search.

**Parameters:**
- `parent_id` (integer, optional) — Optional: only the direct children of this category id.
- `language` (enum, optional, default "ru") — Language of titles and texts. It also changes search matching and ranking. [one of: ru, uz]

**Returns:** categories[{category_id, name, parent_id, is_adult}], count, parent_id, language

**Example request body:**
```json
{
  "parent_id": 10044
}
```

## 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=uzum
- Human docs page: https://reefapi.com/docs/uzum
- Overview page: https://reefapi.com/uzum-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
