# Unieuro API — search Italy's largest electronics retailer and read products with EUR prices, the EU Omnibus prior price, suggested price, club price, online stock, delivery windows, specs, reviews, store pickup and the store directory

> Search unieuro.it by keyword with the site's own brand, price (EUR), in-stock, promotion, free-delivery and rating filters and its price sorts. Each row: code, EAN, brand, title, URL, image, the price you pay now, the manufacturer's suggested price, the EU Omnibus prior price ('Prezzo precedente') when shown, the struck-through price, the Unieuro Club price, promotion, online stock status, home-delivery and store-pickup windows with costs, rating and category path. The source serves the first 1000 hits of a query.
> ReefAPI engine `unieuro` · 7 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/unieuro/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/unieuro/v1/search — 2 credits
Search unieuro.it by keyword with the site's own brand, price (EUR), in-stock, promotion, free-delivery and rating filters and its price sorts. Each row: code, EAN, brand, title, URL, image, the price you pay now, the manufacturer's suggested price, the EU Omnibus prior price ('Prezzo precedente') when shown, the struck-through price, the Unieuro Club price, promotion, online stock status, home-delivery and store-pickup windows with costs, rating and category path. The source serves the first 1000 hits of a query.

**Parameters:**
- `query` (string, required) — Search words (Italian works best).
- `category` (string, optional) — Optional: keep only this category (a code from the categories action or a row's category_code, e.g. C2102).
- `brand` (string, optional) — Brand exactly as the site lists it (case-insensitive: Samsung, Apple, Smeg, LG). An unknown brand gives an empty result (the source does not fall back to everything).
- `min_price` (number, optional) — Lowest current price in EUR (applied to the price you pay now, VAT included).
- `max_price` (number, optional) — Highest current price in EUR (applied to the price you pay now, VAT included).
- `in_stock` (boolean, optional, default false) — Only products the site marks available to buy online now ('Disponibili').
- `on_promotion` (boolean, optional, default false) — Only products in a running promotion ('In promozione').
- `free_delivery` (boolean, optional, default false) — Only products with free home delivery.
- `min_rating` (integer, optional) — Only products whose Unieuro customer rating is at least this many stars (1-5).
- `sort` (enum, optional, default "relevance") — Result order. Only the orders the site itself offers. [one of: relevance, price_asc, price_desc]
- `page` (integer, optional, default 1) — Results page, 1-based. The source serves only the first 1000 hits of any query (page × limit ≤ 1000); narrow with filters to reach further.
- `limit` (integer, optional, default 24) — Products per page, 1-100.

**Returns:** results[]{code, url_code, ean, manufacturer_part_number, title, brand, url, image, currency (EUR), price (pay now), recommended_retail_price (manufacturer's suggested price, 'Prezzo consigliato'), omnibus_prior_price (EU Omnibus 'Prezzo precedente': lowest price of the 30 days before the promotion; null when not shown), omnibus_applies, crossed_out_price, discount_percent, club_price (Unieuro Club card price, not the public price), club_only_promotion, installment_amount, on_promotion, promotion_title, promotion_days_left, in_stock, stock_status (inStock|lowStock|outOfStock), free_delivery, home_delivery{from, to, cost, cost_text}, store_pickup{from, to, cost, cost_text}, rating, category, category_code, category_path[]{code, name}, energy_class, new_product, preorder, key_features{}} + total, pages, page, limit, has_more, page_capped, sort, query

**Example request body:**
```json
{
  "query": "lavatrice",
  "limit": 24
}
```

### POST https://api.reefapi.com/unieuro/v1/category — 2 credits
List one unieuro.it category by its code (C2102 = iPhone, C21 = Smartphones and phones) or its page URL, optionally narrowed by words, with the same filters and sorts as search.

**Parameters:**
- `category` (string, optional) — Category code from the categories action or a row's category_code / category_path[].code. One of category or url.
- `url` (string, optional) — A unieuro.it category page URL (resolved through the category tree; costs one extra request).
- `query` (string, optional) — Optional words to narrow the category.
- `brand` (string, optional) — Brand exactly as the site lists it (case-insensitive: Samsung, Apple, Smeg, LG). An unknown brand gives an empty result (the source does not fall back to everything).
- `min_price` (number, optional) — Lowest current price in EUR (applied to the price you pay now, VAT included).
- `max_price` (number, optional) — Highest current price in EUR (applied to the price you pay now, VAT included).
- `in_stock` (boolean, optional, default false) — Only products the site marks available to buy online now ('Disponibili').
- `on_promotion` (boolean, optional, default false) — Only products in a running promotion ('In promozione').
- `free_delivery` (boolean, optional, default false) — Only products with free home delivery.
- `min_rating` (integer, optional) — Only products whose Unieuro customer rating is at least this many stars (1-5).
- `sort` (enum, optional, default "relevance") — Result order. Only the orders the site itself offers. [one of: relevance, price_asc, price_desc]
- `page` (integer, optional, default 1) — Results page, 1-based. The source serves only the first 1000 hits of any query (page × limit ≤ 1000); narrow with filters to reach further.
- `limit` (integer, optional, default 24) — Products per page, 1-100.

**Returns:** results[]{code, url_code, ean, manufacturer_part_number, title, brand, url, image, currency (EUR), price (pay now), recommended_retail_price (manufacturer's suggested price, 'Prezzo consigliato'), omnibus_prior_price (EU Omnibus 'Prezzo precedente': lowest price of the 30 days before the promotion; null when not shown), omnibus_applies, crossed_out_price, discount_percent, club_price (Unieuro Club card price, not the public price), club_only_promotion, installment_amount, on_promotion, promotion_title, promotion_days_left, in_stock, stock_status (inStock|lowStock|outOfStock), free_delivery, home_delivery{from, to, cost, cost_text}, store_pickup{from, to, cost, cost_text}, rating, category, category_code, category_path[]{code, name}, energy_class, new_product, preorder, key_features{}} + total, pages, page, limit, has_more, page_capped, sort, category{code, level}

**Example request body:**
```json
{
  "category": "C2102",
  "sort": "price_asc",
  "limit": 24
}
```

### POST https://api.reefapi.com/unieuro/v1/product — 2 credits
Full product record: price you pay now, suggested price, EU Omnibus prior price with its label, struck-through price with the site's note, discount, promotion and its end date, price validity dates, live online stock level and status, home-delivery and store-pickup windows and costs, instalment amount, loyalty points, rating, description, specifications (grouped, with units), images, videos, category path and the optional services (installation, warranty, WEEE pickup) with prices.

**Parameters:**
- `code` (string, optional) — Unieuro product code exactly as a search row's `code` returns it (e.g. APLIPHONE15128; a few codes contain + or /), or its `url_code`, or pass `url`. For reviews use `code`: the review provider knows only that form.
- `url` (string, optional) — A unieuro.it product page URL (…-pid<CODE>).

**Returns:** product{code, url_code, ean, title, name, brand, url, currency, price, recommended_retail_price, original_price, original_price_label, omnibus_prior_price, omnibus_prior_price_label, omnibus_applies, crossed_out_price, crossed_out_price_note, discount_amount, discount_percent, is_discounted, club_only_promotion, installment_amount, loyalty_points, promotion{name, title, ends}, price_valid_from, price_valid_to, in_stock, stock_status, stock_level, purchasable, home_delivery{cost, from, to}, store_pickup{cost, from, to}, free_shipping, only_home_delivery, only_store_pickup, preorder, new_product, rating, summary, description, specifications[]{group, name, value, unit}, images[], videos[], category{code, name}, category_path[]{code, name, url}, services[]{code, name, price, mandatory, warranty}}

**Example request body:**
```json
{
  "code": "APLIPHONE15128"
}
```

### POST https://api.reefapi.com/unieuro/v1/reviews — 2 credits
Customer reviews of one product as published by the site's review provider, newest first, optionally one star rating or one language. Includes reviews the provider syndicates from other retailers for the same product — each row says which retailer it came from; locale=it_IT keeps the Italian reviews.

**Parameters:**
- `code` (string, optional) — Unieuro product code exactly as a search row's `code` returns it (e.g. APLIPHONE15128; a few codes contain + or /), or its `url_code`, or pass `url`. For reviews use `code`: the review provider knows only that form.
- `url` (string, optional) — A unieuro.it product page URL (…-pid<CODE>).
- `rating` (integer, optional) — Only reviews with exactly this many stars (1-5).
- `locale` (string, optional) — Only reviews written in this locale (it_IT, en_GB, el_GR …).
- `page` (integer, optional, default 1) — Reviews page, 1-based.
- `limit` (integer, optional, default 20) — Reviews per page, 1-100.

**Returns:** reviews[]{review_id, rating, body, author (display name), date, locale, source_merchant, syndicated, product_title_at_source, attribute_ratings{}, helpful_votes, verified, purchase_date, url} + total, pages, page, limit, has_more, own_reviews_on_page

**Example request body:**
```json
{
  "code": "APLIPHONE15128",
  "limit": 10
}
```

### POST https://api.reefapi.com/unieuro/v1/store_availability — 1 credit
Can this product be collected at this store, and when: the store-pickup answer and date window the product page shows after choosing a store. One product, one store per call.

**Parameters:**
- `code` (string, optional) — Unieuro product code exactly as a search row's `code` returns it (e.g. APLIPHONE15128; a few codes contain + or /), or its `url_code`, or pass `url`. For reviews use `code`: the review provider knows only that form.
- `url` (string, optional) — A unieuro.it product page URL (…-pid<CODE>).
- `store_id` (string, required) — The store's `store_id` from the stores action (13 digits). Not the short store_code.

**Returns:** code, store_id, available, pickup_from, pickup_to, store_verified (false: the source answers 'not available' to an id it does not know as well)

**Example request body:**
```json
{
  "code": "APLIPHONE15128",
  "store_id": "8796095186936"
}
```

### POST https://api.reefapi.com/unieuro/v1/stores — 3 credits
Unieuro's store directory: id, code, name, address, city, province, region, coordinates, phone, opening hours, special openings and in-store services. With latitude/longitude it returns the stores within radius_km sorted by distance; without, the whole network, optionally narrowed by city, province or region.

**Parameters:**
- `latitude` (number, optional) — Centre point latitude (with longitude).
- `longitude` (number, optional) — Centre point longitude (with latitude).
- `radius_km` (integer, optional, default 50) — Search radius around the point, km.
- `city` (string, optional) — Keep stores whose city contains this text (accent/case-insensitive).
- `province` (string, optional) — Keep stores in this province (two-letter sigla: MI, RM, TO).
- `region` (string, optional) — Keep stores whose region contains this text.

**Returns:** stores[]{store_id, store_code, name, address, address_extra, postal_code, city, province, region, phone, email, latitude, longitude, distance_km, opening_hours[]{day, hours}, special_openings, services[], pickup_point, url} + total, total_unfiltered

**Example request body:**
```json
{
  "latitude": 45.46,
  "longitude": 9.19,
  "radius_km": 20
}
```

### POST https://api.reefapi.com/unieuro/v1/categories — 2 credits
The full category tree, flattened: code (feed it to category / search), name, parent, level, readable path and page URL. Optional text match.

**Parameters:**
- `match` (string, optional) — Keep categories whose name or path contains this text.

**Returns:** categories[]{category_code, name, parent_code, level, path, url} + total, total_unfiltered

**Example request body:**
```json
{
  "match": "lavatric"
}
```

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