# Auchan Portugal API — supermarket prices by store: shelf price, promotion with dates, was price, PVPR, price per kg/litre, EAN, ingredients and nutrition from auchan.pt

> Search Auchan Portugal's online shop: shelf price, was price and promotion dates, recommended retail price (PVPR), price per kg/l, brand, category, labels. `query` required; filters: category, brand, nutriscore, organic, national_product, min_price, max_price; sort; paging up to 100 per page. Rows are the online store's prices and range (`product` takes a store_id).
> ReefAPI engine `auchan-pt` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/auchan-pt/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). Clients that add connectors by URL, such as ChatGPT and the Claude app, connect with OAuth 2.1 (the user pastes their key once on a ReefAPI page; discovery at `/.well-known/oauth-protected-resource/mcp`). Config files send the key as `Authorization: Bearer <key>`. `?key=<key>` in the URL also works as a last-resort fallback.

## Endpoints

### POST https://api.reefapi.com/auchan-pt/v1/search — 3 credits
Search Auchan Portugal's online shop: shelf price, was price and promotion dates, recommended retail price (PVPR), price per kg/l, brand, category, labels. `query` required; filters: category, brand, nutriscore, organic, national_product, min_price, max_price; sort; paging up to 100 per page. Rows are the online store's prices and range (`product` takes a store_id).

**Parameters:**
- `query` (string, required) — Search words as typed in the Auchan shop (Portuguese works best).
- `category` (string, optional) — Auchan category id as `categories` returns it (e.g. produtos-lacteos, leite-uht, alimentacao-). An id the site does not know is rejected.
- `brand` (string, optional) — Brand as Auchan prints it (upper case, e.g. MIMOSA, AUCHAN, NESTLÉ).
- `nutriscore` (enum, optional) — Nutri-Score letter A-E (the site's own facet). [one of: A, B, C, D, E]
- `organic` (boolean, optional) — true = only the site's 'Biológico' family.
- `national_product` (boolean, optional) — true = only products the site labels 'Produto Nacional'.
- `min_price` (integer, optional) — Minimum shelf price in whole euros (the site's price filter takes whole euros only: 1.5 or 1.00 are silently ignored by auchan.pt, so they are rejected here).
- `max_price` (integer, optional) — Maximum shelf price in whole euros.
- `sort` (enum, optional, default "popular") — popular (site default) · relevance · best_seller · price_asc · price_desc · name_asc · name_desc. [one of: popular, relevance, best_seller, price_asc, price_desc, name_asc, name_desc]
- `page` (integer, optional, default 1) — Result page, 1-based.
- `per_page` (integer, optional, default 48) — Products per page, 1-100 (default 48).

**Returns:** store{store_id, store_name, store_defaulted, sourcing_codes[], resolved_from}, query, category, filters, sort, total, total_is_exact, total_note, page, per_page, has_more, returned, results[]{rank, product_id (-> product.product_id), name, brand, price, price_unit (un|kg), price_text, regular_price (struck-through price of a promotion), recommended_retail_price (PVPR), recommended_retail_price_text, discount_vs_recommended_text, currency, on_offer, promotion_window{text, from, to}, unit_price, unit_price_unit, unit_price_text, min_quantity_text, min_quantity_price, labels[], category_path, analytics_price, analytics_discount, image, url}

**Example request body:**
```json
{
  "query": "leite"
}
```

### POST https://api.reefapi.com/auchan-pt/v1/category — 3 credits
List one Auchan category (id from `categories`) with the same row fields, filters and paging as `search` — the way to walk the whole catalogue.

**Parameters:**
- `category` (string, optional) — Auchan category id as `categories` returns it (e.g. produtos-lacteos, leite-uht, alimentacao-). An id the site does not know is rejected.
- `brand` (string, optional) — Brand as Auchan prints it (upper case, e.g. MIMOSA, AUCHAN, NESTLÉ).
- `nutriscore` (enum, optional) — Nutri-Score letter A-E (the site's own facet). [one of: A, B, C, D, E]
- `organic` (boolean, optional) — true = only the site's 'Biológico' family.
- `national_product` (boolean, optional) — true = only products the site labels 'Produto Nacional'.
- `min_price` (integer, optional) — Minimum shelf price in whole euros (the site's price filter takes whole euros only: 1.5 or 1.00 are silently ignored by auchan.pt, so they are rejected here).
- `max_price` (integer, optional) — Maximum shelf price in whole euros.
- `sort` (enum, optional, default "popular") — popular (site default) · relevance · best_seller · price_asc · price_desc · name_asc · name_desc. [one of: popular, relevance, best_seller, price_asc, price_desc, name_asc, name_desc]
- `page` (integer, optional, default 1) — Result page, 1-based.
- `per_page` (integer, optional, default 48) — Products per page, 1-100 (default 48).

**Returns:** store{store_id, store_name, store_defaulted, sourcing_codes[], resolved_from}, query, category, filters, sort, total, total_is_exact, total_note, page, per_page, has_more, returned, results[]{rank, product_id (-> product.product_id), name, brand, price, price_unit (un|kg), price_text, regular_price (struck-through price of a promotion), recommended_retail_price (PVPR), recommended_retail_price_text, discount_vs_recommended_text, currency, on_offer, promotion_window{text, from, to}, unit_price, unit_price_unit, unit_price_text, min_quantity_text, min_quantity_price, labels[], category_path, analytics_price, analytics_discount, image, url}

**Example request body:**
```json
{
  "category": "produtos-lacteos"
}
```

### POST https://api.reefapi.com/auchan-pt/v1/promotions — 3 credits
Auchan products on promotion in the online store right now (the site's own promotions facet): offer price, was price, promotion dates, PVPR. Narrow with `query`, `category`, `brand`, filters.

**Parameters:**
- `query` (string, optional) — Optional search words inside the promotions.
- `category` (string, optional) — Auchan category id as `categories` returns it (e.g. produtos-lacteos, leite-uht, alimentacao-). An id the site does not know is rejected.
- `brand` (string, optional) — Brand as Auchan prints it (upper case, e.g. MIMOSA, AUCHAN, NESTLÉ).
- `nutriscore` (enum, optional) — Nutri-Score letter A-E (the site's own facet). [one of: A, B, C, D, E]
- `organic` (boolean, optional) — true = only the site's 'Biológico' family.
- `national_product` (boolean, optional) — true = only products the site labels 'Produto Nacional'.
- `min_price` (integer, optional) — Minimum shelf price in whole euros (the site's price filter takes whole euros only: 1.5 or 1.00 are silently ignored by auchan.pt, so they are rejected here).
- `max_price` (integer, optional) — Maximum shelf price in whole euros.
- `sort` (enum, optional, default "popular") — popular (site default) · relevance · best_seller · price_asc · price_desc · name_asc · name_desc. [one of: popular, relevance, best_seller, price_asc, price_desc, name_asc, name_desc]
- `page` (integer, optional, default 1) — Result page, 1-based.
- `per_page` (integer, optional, default 48) — Products per page, 1-100 (default 48).

**Returns:** store{store_id, store_name, store_defaulted, sourcing_codes[], resolved_from}, query, category, filters, sort, total, total_is_exact, total_note, page, per_page, has_more, returned, results[]{rank, product_id (-> product.product_id), name, brand, price, price_unit (un|kg), price_text, regular_price (struck-through price of a promotion), recommended_retail_price (PVPR), recommended_retail_price_text, discount_vs_recommended_text, currency, on_offer, promotion_window{text, from, to}, unit_price, unit_price_unit, unit_price_text, min_quantity_text, min_quantity_price, labels[], category_path, analytics_price, analytics_discount, image, url}

**Example request body:**
```json
{
  "query": "leite"
}
```

### POST https://api.reefapi.com/auchan-pt/v1/product — 3 credits
One Auchan product by the `product_id` a search row returns: price, was price or PVPR, discount %, promotions, price per kg/l, EAN, order limits, availability, delivery estimate, category, labels, images, ingredients and nutrition text. Optional store_id for that store's price.

**Parameters:**
- `product_id` (string, required) — The numeric product id a search row returns, or its https://www.auchan.pt/pt/…/<id>.html URL.
- `store_id` (string, optional) — Auchan store id from the `stores` action (click-and-collect store). The price then follows that store's price book (measured: bananas 0.54 € online and at hypermarket 010, 0.59 € at supermarkets B85 and B64). Omit for the online store (000); the response's `store` block says which.

**Returns:** product{product_id, name, brand, ean, short_description, description, price, price_unit, price_valid_until, regular_price, recommended_retail_price, discount_vs_recommended_pct, discount_pct, is_promotion, currency, promotions[]{id, name, callout, details, class, start, end}, promotion_badges[], unit_price, unit_price_unit, unit_price_text, min_quantity_text, average_weight, sales_unit, unit_measure, unit_quantity, step_quantity, min_order_quantity, max_order_quantity, available, online, availability_messages[], delivery_estimate, rating, category_id, category_name, labels[], images[], url}, label{ingredients, nutrition_text, attributes[]{label, value}}, store{…}

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

### POST https://api.reefapi.com/auchan-pt/v1/categories — 3 credits
Auchan Portugal's category tree from the shop menu (three levels): id, name, URL, children. Ids feed `category` and the `category` filter.

**Parameters:**
- `category` (string, optional) — Return only this category's subtree; omit for the whole tree.

**Returns:** parent, total_categories, categories[]{category_id, name, url, path, depth, children[]}

**Example request body:**
```json
{
  "category": "alimentacao-"
}
```

### POST https://api.reefapi.com/auchan-pt/v1/stores — 2 credits
Auchan stores near a point, from the site's own store finder: id (for `store_id`), name, type, address, post code, coordinates, distance, phone, delivery types, opening hours.

**Parameters:**
- `latitude` (number, required) — Latitude of the point (Portugal).
- `longitude` (number, required) — Longitude of the point.
- `radius_km` (enum, optional, default "30") — Search radius in km: 15, 30, 50, 100 or 300 (the site's options). [one of: 15, 30, 50, 100, 300]

**Returns:** latitude, longitude, radius_km, total, stores[]{store_id, name, type, address, postal_code, city, locality, latitude, longitude, distance, distance_unit, phone, email, delivery_types, active_delivery_types, opening_hours, open_date}

**Example request body:**
```json
{
  "latitude": 38.75,
  "longitude": -9.15
}
```

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