# MediaMarkt API scraper — search products, browse categories and read full product records (price, strike price, stock status, delivery window, marketplace sellers, specs, EAN, ratings, reviews) from MediaMarkt in 10 countries (DE, TR, AT, CH, NL, BE, ES, IT/MediaWorld, PL, HU) and Saturn Germany. No account, no browser.

> Search one national MediaMarkt storefront by keyword and get 12 products per page with the price a shopper pays now, the struck-through price and its type, discount, financing offer, who sells it (MediaMarkt or a marketplace seller), online and delivery status with the delivery window, customer rating on a 5-star scale, EAN, category path, energy class and key features. Sort by price, rating, bestseller or newest; filter by brand and minimum rating.
> ReefAPI engine `mediamarkt` · 3 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/mediamarkt/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, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /mediamarkt/v1/search — 2 credits
Search one national MediaMarkt storefront by keyword and get 12 products per page with the price a shopper pays now, the struck-through price and its type, discount, financing offer, who sells it (MediaMarkt or a marketplace seller), online and delivery status with the delivery window, customer rating on a 5-star scale, EAN, category path, energy class and key features. Sort by price, rating, bestseller or newest; filter by brand and minimum rating.

**Parameters:**
- `query` (string, required) — Search keyword, as a shopper would type it on the storefront.
- `country` (enum, optional, default "de") — Which national MediaMarkt storefront to read. Currency and language follow the country (TRY for tr, CHF for ch, PLN for pl, HUF for hu, EUR elsewhere). `it` is MediaWorld, MediaMarkt's Italian brand. Unknown values are rejected. [one of: tr, de, at, ch, nl, be, es, it, pl, hu]
- `store` (enum, optional, default "mediamarkt") — Retail brand. `saturn` reads saturn.de, the sister chain on the same platform, and is only valid with country=de. [one of: mediamarkt, saturn]
- `language` (enum, optional) — Only for multilingual storefronts: Switzerland (de, fr, it) and Belgium (nl, fr). Defaults to the storefront's first language (de for ch, nl for be). Titles, specs and category names come back in this language; prices and ids are identical. [one of: de, fr, it, nl]
- `page` (integer, optional, default 1) — Result page, 1-based. 12 products per page; the storefront itself stops at page 30 (360 products), whatever `total_results` says.
- `sort` (enum, optional, default "relevance") — Result order. Only orderings the storefront itself offers. [one of: relevance, price_asc, price_desc, rating, bestseller, newest]
- `brand` (string, optional) — Keep only one brand, spelled as the storefront spells it (brands are upper-case on MediaMarkt: APPLE, SAMSUNG, SIEMENS). One brand per call.
- `min_rating` (integer, optional) — Keep only products whose customer rating is at least this many stars (1-5).
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5, default 3).

**Returns:** results[]{position, product_id, title, brand, url, image, ean, currency, price (number, what a web shopper pays now), was_price (struck-through price) + was_price_type (e.g. RRP = manufacturer list price), discount_amount, discount_percent, app_price (only when the app-only price differs), member_price (only when the club price differs), installment{months, monthly_amount, total_amount, interest_effective_percent}, vat_rate, seller{type: retailer|marketplace, id, name, rating, rating_scale}, rating, review_count, rating_scale (5), category, breadcrumb[], availability{online_status, buyable_online, delivery_available, pickup_available, delivery_status, delivery_earliest, delivery_latest, shipped_from_store, shipping_cost, pickup_status, release_date}, energy_efficiency{class, label_url, datasheet_url}, badges[], key_features[{name, value}], refurbished, sponsored}, count, total_results, page, page_count, max_page, search_mode ('keyword' | 'resolved' when the storefront answered with a category or brand page | 'phrase' when it answered with an editorial page and the keyword was re-asked as an exact phrase), resolved_url, category, country, store, language, currency

**Example request body:**
```json
{
  "query": "iphone",
  "country": "tr"
}
```

### POST /mediamarkt/v1/category — 2 credits
List the products of one MediaMarkt category page (from the site navigation or a product breadcrumb), 12 per page, with the same product fields as search. Sort and brand/rating filters work the same way.

**Parameters:**
- `category` (string, required) — A category page URL from the storefront (…/category/<name>-<id>.html) or its path. Its host sets the country. Category URLs appear in the site navigation and in every product's breadcrumb.
- `page` (integer, optional, default 1) — Result page, 1-based. 12 products per page; the storefront itself stops at page 30 (360 products), whatever `total_results` says.
- `sort` (enum, optional, default "relevance") — Result order. Only orderings the storefront itself offers. [one of: relevance, price_asc, price_desc, rating, bestseller, newest]
- `brand` (string, optional) — Keep only one brand, spelled as the storefront spells it (brands are upper-case on MediaMarkt: APPLE, SAMSUNG, SIEMENS). One brand per call.
- `min_rating` (integer, optional) — Keep only products whose customer rating is at least this many stars (1-5).
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5, default 3).

**Returns:** results[]{position, product_id, title, brand, url, image, ean, currency, price (number, what a web shopper pays now), was_price (struck-through price) + was_price_type (e.g. RRP = manufacturer list price), discount_amount, discount_percent, app_price (only when the app-only price differs), member_price (only when the club price differs), installment{months, monthly_amount, total_amount, interest_effective_percent}, vat_rate, seller{type: retailer|marketplace, id, name, rating, rating_scale}, rating, review_count, rating_scale (5), category, breadcrumb[], availability{online_status, buyable_online, delivery_available, pickup_available, delivery_status, delivery_earliest, delivery_latest, shipped_from_store, shipping_cost, pickup_status, release_date}, energy_efficiency{class, label_url, datasheet_url}, badges[], key_features[{name, value}], refurbished, sponsored}, count, total_results, page, page_count, max_page, category, breadcrumb[], category_url, country, store, language, currency

### POST /mediamarkt/v1/product/detail — 2 credits
The full MediaMarkt product record by id or URL: title, brand, EAN, price with strike price, discount, app-only and club prices when they differ, financing, seller, online / delivery / pickup status with the delivery window and shipping cost, image gallery, complete technical specification grouped as on the site, description, colour and size variants with their own price and status, other marketplace sellers' offers, rating with its 5-star distribution, and the first page of customer reviews.

**Parameters:**
- `product_id` (string, required) — MediaMarkt product id — the number at the end of a product URL (…/product/_apple-iphone-17-pro-max-…-1249245.html → 1249245). A full product URL is also accepted, and its host sets the country. Every `search` row returns `product_id`.
- `country` (enum, optional, default "de") — Which national MediaMarkt storefront to read. Currency and language follow the country (TRY for tr, CHF for ch, PLN for pl, HUF for hu, EUR elsewhere). `it` is MediaWorld, MediaMarkt's Italian brand. Unknown values are rejected. [one of: tr, de, at, ch, nl, be, es, it, pl, hu]
- `store` (enum, optional, default "mediamarkt") — Retail brand. `saturn` reads saturn.de, the sister chain on the same platform, and is only valid with country=de. [one of: mediamarkt, saturn]
- `language` (enum, optional) — Only for multilingual storefronts: Switzerland (de, fr, it) and Belgium (nl, fr). Defaults to the storefront's first language (de for ch, nl for be). Titles, specs and category names come back in this language; prices and ids are identical. [one of: de, fr, it, nl]
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5, default 3).

**Returns:** product{product_id, title, brand, url, image, ean, currency, price (number, what a web shopper pays now), was_price (struck-through price) + was_price_type (e.g. RRP = manufacturer list price), discount_amount, discount_percent, app_price (only when the app-only price differs), member_price (only when the club price differs), installment{months, monthly_amount, total_amount, interest_effective_percent}, vat_rate, seller{type: retailer|marketplace, id, name, rating, rating_scale}, rating, review_count, rating_scale (5), category, breadcrumb[], availability{online_status, buyable_online, delivery_available, pickup_available, delivery_status, delivery_earliest, delivery_latest, shipped_from_store, shipping_cost, pickup_status, release_date}, energy_efficiency{class, label_url, datasheet_url}, badges[], key_features[{name, value}], refurbished, title_raw, product_type, description (plain text), images[], specs[]{group, attributes{name: value}}, variants[]{name, is_color, options[]{product_id, value, title, image, price, online_status}}, marketplace_offers[]{offer_id, seller{type, id, name, rating, rating_scale, review_count}, price, was_price, was_price_type, currency, condition, shipping_cost, delivery_earliest, delivery_latest}, rating_distribution{'5'..'1'}, reviews[]{review_id, rating, title, text, pros[], cons[], date, author, verified_purchase, syndicated_from, reviewed_variant_id, helpful_votes}, reviews_summary (the site's own review summary text where it publishes one), manufacturer_id, online_since, category_ids[]}, country, store, language

**Example request body:**
```json
{
  "product_id": "1249245",
  "country": "tr"
}
```

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