# x-kom API — search x-kom.pl, al.to and neonet.pl and read products with PLN shelf, crossed-out, Omnibus 30-day and promo-code prices, store pickup, specs, reviews and the daily hot shot

> Search x-kom.pl (or al.to / neonet.pl) by keyword with the shop's own category, brand, price range (PLN), availability filters and sorts. Each row: product id, name, brand, producer code, URL, image, category path, the shelf price, crossed-out price, EU Omnibus lowest-30-day price, promo-code price with its code, dates and per-customer limit, availability, outlet condition, badges, rating (x-kom's 1-6 scale and the 5-star figure), review count, instalment offer, key specs. Also returns category and brand facets with counts for the query.
> ReefAPI engine `x-kom` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/x-kom/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/x-kom/v1/search — 2 credits
Search x-kom.pl (or al.to / neonet.pl) by keyword with the shop's own category, brand, price range (PLN), availability filters and sorts. Each row: product id, name, brand, producer code, URL, image, category path, the shelf price, crossed-out price, EU Omnibus lowest-30-day price, promo-code price with its code, dates and per-customer limit, availability, outlet condition, badges, rating (x-kom's 1-6 scale and the 5-star figure), review count, instalment offer, key specs. Also returns category and brand facets with counts for the query.

**Parameters:**
- `query` (string, required) — Search words as typed into the shop's search box (Polish or brand/model names, e.g. 'iphone 17', 'rtx 5070').
- `category_id` (string, optional) — Narrow the search to one category id (from `facets.categories` or the categories action).
- `brand_id` (string, optional) — Brand (producer) id, e.g. 357 = Apple. The ids come back in `facets.brands` of any search or category call.
- `price_min` (integer, optional) — Lowest price in PLN. Measured: x-kom applies the price filter to the promo-code price when a code is published (a 3499 zł laptop with a 2599 zł code is inside 2000-3000); each row's `filter_price` is that price.
- `price_max` (integer, optional) — Highest price in PLN (same promo-code rule as price_min).
- `only_available` (boolean, optional, default false) — Only products the shop marks Available (category 159: 3849 → 3431).
- `sort` (enum, optional, default "default") — Order of the results. [one of: default, price_asc, price_desc, popularity, rating, name]
- `page` (integer, optional, default 1) — Result page (1-based). `pages` in the answer is the last page; a page past it is refused.
- `limit` (integer, optional, default 30) — Rows per page, 1-60 (default 30).
- `site` (enum, optional, default "xkom") — Which shop of the x-kom platform to read: xkom (x-kom.pl, default), alto (al.to) or neonet (neonet.pl). Product ids are shared between x-kom.pl and al.to. [one of: xkom, alto, neonet]

**Returns:** results[]{product_id, site, name, title, brand, brand_id, producer_code, url, image, category{id, name, parent_id, parent_name, group_id, group_name}, currency, price, old_price, lowest_price_30d, promo_code{code, price, starts_at, ends_at, customer_limit, active}, code_price, filter_price, price_visible, discount_value, availability_status, is_outlet, outlet_condition, marks[], badges[], rating (1-6 scale), rating_5, review_count, free_shipping, installment{text, zero_percent, min_monthly}, energy_class, key_specs{name: value}, sponsored, variant_group_id, is_gift_card, is_digital} + total, pages, page, limit, has_more, page_past_end, sort, rows_outside_price_range, facets{categories[]{category_id, name, count, group_id, group_name, children[]}, brands[]{brand_id, name, count}}, query

**Example request body:**
```json
{
  "query": "iphone 17",
  "limit": 10
}
```

### POST https://api.reefapi.com/x-kom/v1/category — 2 credits
List one x-kom category (e.g. 159 laptops, 1590 smartphones) with the same brand, price, availability and sort options and the same rows as search, plus sub-category and brand facets. Category ids come from the categories action or from search facets.

**Parameters:**
- `category_id` (string, required) — x-kom category id (e.g. 159 = Laptopy/Notebooki/Ultrabooki). An id the shop does not know answers total 0.
- `brand_id` (string, optional) — Brand (producer) id, e.g. 357 = Apple. The ids come back in `facets.brands` of any search or category call.
- `price_min` (integer, optional) — Lowest price in PLN. Measured: x-kom applies the price filter to the promo-code price when a code is published (a 3499 zł laptop with a 2599 zł code is inside 2000-3000); each row's `filter_price` is that price.
- `price_max` (integer, optional) — Highest price in PLN (same promo-code rule as price_min).
- `only_available` (boolean, optional, default false) — Only products the shop marks Available (category 159: 3849 → 3431).
- `sort` (enum, optional, default "default") — Order of the results. [one of: default, price_asc, price_desc, popularity, rating, name]
- `page` (integer, optional, default 1) — Result page (1-based). `pages` in the answer is the last page; a page past it is refused.
- `limit` (integer, optional, default 30) — Rows per page, 1-60 (default 30).
- `site` (enum, optional, default "xkom") — Which shop of the x-kom platform to read: xkom (x-kom.pl, default), alto (al.to) or neonet (neonet.pl). Product ids are shared between x-kom.pl and al.to. [one of: xkom, alto, neonet]

**Returns:** results[]{product_id, site, name, title, brand, brand_id, producer_code, url, image, category{id, name, parent_id, parent_name, group_id, group_name}, currency, price, old_price, lowest_price_30d, promo_code{code, price, starts_at, ends_at, customer_limit, active}, code_price, filter_price, price_visible, discount_value, availability_status, is_outlet, outlet_condition, marks[], badges[], rating (1-6 scale), rating_5, review_count, free_shipping, installment{text, zero_percent, min_monthly}, energy_class, key_specs{name: value}, sponsored, variant_group_id, is_gift_card, is_digital} + total, pages, page, limit, has_more, page_past_end, sort, rows_outside_price_range, facets{categories[]{category_id, name, count, group_id, group_name, children[]}, brands[]{brand_id, name, count}}, category_id

**Example request body:**
```json
{
  "category_id": "159",
  "limit": 10
}
```

### POST https://api.reefapi.com/x-kom/v1/product — 2 credits
The full product record by id or URL: every price fact (shelf, crossed-out, Omnibus lowest 30-day with its date, promo code with dates and limit, instalment plans), availability online with the delivery date, pickup availability in each of the shop's stores, shipping options with prices, grouped specifications, variants of the same model with their prices, all images, the description as plain text and review statistics. (x-kom's API publishes no EAN.)

**Parameters:**
- `product_id` (string, optional) — Product id as in search results (`product_id`). Either product_id or url is required.
- `url` (string, optional) — A product URL from x-kom.pl, al.to or neonet.pl (the shop is taken from the URL). Either product_id or url is required.
- `site` (enum, optional, default "xkom") — Which shop of the x-kom platform to read: xkom (x-kom.pl, default), alto (al.to) or neonet (neonet.pl). Product ids are shared between x-kom.pl and al.to. [one of: xkom, alto, neonet]

**Returns:** product{product_id, site, name, title, brand, brand_id, producer_code, url, image, category{id, name, parent_id, parent_name, group_id, group_name}, currency, price, old_price, lowest_price_30d, promo_code{code, price, starts_at, ends_at, customer_limit, active}, code_price, filter_price, price_visible, discount_value, availability_status, is_outlet, outlet_condition, marks[], badges[], rating (1-6 scale), rating_5, review_count, free_shipping, installment{text, zero_percent, min_monthly}, energy_class, key_specs{name: value}, sponsored, variant_group_id, is_gift_card, is_digital, lowest_price_30d_date, description, specs[]{name, values[], unit}, images[], variants[]{dimension, options[]{label, product_id, price, unavailable}}, online_availability{text, delivery_text, delivery_date, last_items}, same_day_delivery, available_in_stores, stores[]{store_id, store, availability, availability_text, pickup_text, pickup_date}, shipping_options[]{method, payment, price, kind}, review_stats{rating, rating_5, review_count, reviews_on_this_variant, confirmed_purchases, histogram_6pt}, installment_plans[], secondary_categories[], gallery_count}

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

### POST https://api.reefapi.com/x-kom/v1/reviews — 1 credit
Customer reviews of a product: author, date, rating (1-6 and 5-star), title, text, confirmed purchase flag, helpful votes, photos and shop replies. x-kom pools reviews across the variants of a model; every review names the product id it was written on and `this_variant_only` keeps just the asked product.

**Parameters:**
- `product_id` (string, required) — Product id (`product_id` from search or product).
- `sort` (enum, optional, default "helpful") — Order of the reviews. [one of: helpful, newest, oldest, rating_desc, rating_asc]
- `rating` (integer, optional) — Only reviews with this rating on x-kom's 1-6 scale.
- `this_variant_only` (boolean, optional, default false) — Only reviews written on this exact product, not on its sibling variants.
- `confirmed_only` (boolean, optional, default false) — Only reviews from confirmed purchases.
- `page` (integer, optional, default 1) — Review page (1-based).
- `limit` (integer, optional, default 10) — Reviews per page, 1-50 (default 10).
- `site` (enum, optional, default "xkom") — Which shop of the x-kom platform to read: xkom (x-kom.pl, default), alto (al.to) or neonet (neonet.pl). Product ids are shared between x-kom.pl and al.to. [one of: xkom, alto, neonet]

**Returns:** results[]{review_id, product_id, variant{name: value}, author, created_at, rating, rating_5, title, body, confirmed_purchase, votes_up, votes_down, photos[], replies[]{author, is_staff, created_at, body}} + total, pages, page, limit, has_more, stats{average_rating, average_rating_5, this_variant, confirmed_purchases}

**Example request body:**
```json
{
  "product_id": "179862",
  "limit": 10
}
```

### POST https://api.reefapi.com/x-kom/v1/hot_shot — 2 credits
The shop's current 'Gorący strzał' (hot shot) deal: the deal price, the regular and Omnibus 30-day price, the saving, how many units the deal has and how many are sold, the per-customer limit, the start and end time, and the product it is for. x-kom runs a new one twice a day.

**Parameters:**
- `site` (enum, optional, default "xkom") — Which shop of the x-kom platform to read: xkom (x-kom.pl, default), alto (al.to) or neonet (neonet.pl). Product ids are shared between x-kom.pl and al.to. [one of: xkom, alto, neonet]

**Returns:** hot_shot_id, site, name, currency, price, old_price, lowest_price_30d, lowest_price_30d_date, saving, saving_text, quantity_total, quantity_sold, quantity_left, max_per_customer, starts_at, ends_at, is_active, is_suspended, image, product{product_id, name, title, brand, url, image, category, regular_price, old_price, availability_status, rating, review_count, key_specs}

**Example request body:**
```json
{
  "site": "xkom"
}
```

### POST https://api.reefapi.com/x-kom/v1/categories — 1 credit
The shop's category tree: without parameters the top-level groups; with group_id the categories in that group with their product counts. Use the ids with category / search.

**Parameters:**
- `group_id` (string, optional) — Top-level group id (e.g. 2 = Laptopy i komputery).
- `site` (enum, optional, default "xkom") — Which shop of the x-kom platform to read: xkom (x-kom.pl, default), alto (al.to) or neonet (neonet.pl). Product ids are shared between x-kom.pl and al.to. [one of: xkom, alto, neonet]

**Returns:** results[]{group_id, name} or results[]{category_id, name, product_count, group_id}

**Example request body:**
```json
{
  "group_id": "2"
}
```

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