# Auchan API — live auchan.fr data for a chosen Auchan drive or click & collect store: product search, category listings and the current promotions with the store's price, old price and discount, unit price, multi-buy and Waaoh loyalty offers and stock; one product in full with EAN, Nutri-Score, nutrition table, ingredients, allergens and characteristics; Auchan stores near a French postcode; the category tree. No login, no loyalty card, no API key.

> Search auchan.fr by keyword for one store, with the site's sorts and filters (promotion, Waaoh loyalty offer, new, Nutri-Score, rating). 30 products per page, priced for the store.
> ReefAPI engine `auchan` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/auchan/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/auchan/v1/search — 3 credits
Search auchan.fr by keyword for one store, with the site's sorts and filters (promotion, Waaoh loyalty offer, new, Nutri-Score, rating). 30 products per page, priced for the store.

**Parameters:**
- `query` (string, required) — Search text as typed into auchan.fr's search box (French works best: 'lait', 'café moulu', 'couches').
- `store_id` (string, optional) — Auchan store number (drive, click & collect point or locker) from the `stores` action. Prices, assortment, promotions and stock are that store's. Without it the engine prices for its default store 975 (Auchan Drive Hypermarché Kremlin-Bicêtre, Paris area) and says store_defaulted: true.
- `page` (integer, optional, default 1) — Result page, 30 products per page ('lait' at store 823: 292 products, 10 pages, no product repeated across pages 1-3).
- `sort` (enum, optional, default "relevance") — Order, the site's own sort keys. Unknown values are refused. [one of: relevance, price_asc, price_desc, unit_price_asc, unit_price_desc, rating_desc, brand_asc, brand_desc, best_sellers]
- `on_promotion` (boolean, optional, default false) — Only products with a promotion at this store (the site's 'En promotion' filter).
- `loyalty_offer` (boolean, optional, default false) — Only products with a Waaoh loyalty offer (money credited to the loyalty account, 'cagnotté'; the till price does not change).
- `new_only` (boolean, optional, default false) — Only products the site marks 'Nouveauté'.
- `nutriscore` (enum, optional) — Only products with this Nutri-Score (old and new calculation both count). [one of: a, b, c, d, e]
- `min_rating` (enum, optional) — Only products whose average customer rating is at least this many stars. [one of: 3, 4, 5]

**Returns:** data.products[]: product_id, uuid, offer_id, name, brand, title, url, image, pack_size, price (price charged now for one unit, EUR), regular_price, was_price (struck-through old price on an immediate reduction), discount_percent, currency, unit_price, unit (kg, l, pce…), promotions[] {label, type, loyalty, immediate, min_quantity, percent}, loyalty_offer (Waaoh 'cagnotté' text, never in price), availability, stock_quantity (the store's stock figure), delivery_promise, rating, review_count, new, sponsored, labels[] (Bio, AB, Filières…), priced, position. data.total (the site's count for this store and filters), data.pagination {page, last_page, has_more}, data.store {store_id, name, type, postal_code, city}, data.store_defaulted, data.query.

**Example request body:**
```json
{
  "query": "lait",
  "store_id": "823"
}
```

### POST https://api.reefapi.com/auchan/v1/category — 3 credits
List one Auchan category (aisle) for one store, with the same sorts and filters as search.

**Parameters:**
- `category_id` (string, required) — Auchan category id: the code after 'ca-' in a category URL (auchan.fr/oeufs-produits-laitiers/cremerie-oeufs-laits/ca-n0101 -> n0101), or a `category_id` from the categories action.
- `store_id` (string, optional) — Auchan store number (drive, click & collect point or locker) from the `stores` action. Prices, assortment, promotions and stock are that store's. Without it the engine prices for its default store 975 (Auchan Drive Hypermarché Kremlin-Bicêtre, Paris area) and says store_defaulted: true.
- `page` (integer, optional, default 1) — Result page, 30 products per page ('lait' at store 823: 292 products, 10 pages, no product repeated across pages 1-3).
- `sort` (enum, optional, default "relevance") — Order, the site's own sort keys. Unknown values are refused. [one of: relevance, price_asc, price_desc, unit_price_asc, unit_price_desc, rating_desc, brand_asc, brand_desc, best_sellers]
- `on_promotion` (boolean, optional, default false) — Only products with a promotion at this store (the site's 'En promotion' filter).
- `loyalty_offer` (boolean, optional, default false) — Only products with a Waaoh loyalty offer (money credited to the loyalty account, 'cagnotté'; the till price does not change).
- `new_only` (boolean, optional, default false) — Only products the site marks 'Nouveauté'.
- `nutriscore` (enum, optional) — Only products with this Nutri-Score (old and new calculation both count). [one of: a, b, c, d, e]
- `min_rating` (enum, optional) — Only products whose average customer rating is at least this many stars. [one of: 3, 4, 5]

**Returns:** data.products[]: product_id, uuid, offer_id, name, brand, title, url, image, pack_size, price (price charged now for one unit, EUR), regular_price, was_price (struck-through old price on an immediate reduction), discount_percent, currency, unit_price, unit (kg, l, pce…), promotions[] {label, type, loyalty, immediate, min_quantity, percent}, loyalty_offer (Waaoh 'cagnotté' text, never in price), availability, stock_quantity (the store's stock figure), delivery_promise, rating, review_count, new, sponsored, labels[] (Bio, AB, Filières…), priced, position. data.category {category_id, name}, data.subcategories[] {category_id, name, url}, data.total, data.pagination, data.store, data.store_defaulted.

**Example request body:**
```json
{
  "category_id": "n0101",
  "store_id": "823"
}
```

### POST https://api.reefapi.com/auchan/v1/promotions — 3 credits
The current promotions of one store (the site's 'Promos' shop): immediate reductions, multi-buy offers and Waaoh loyalty offers, 30 products per page.

**Parameters:**
- `store_id` (string, optional) — Auchan store number (drive, click & collect point or locker) from the `stores` action. Prices, assortment, promotions and stock are that store's. Without it the engine prices for its default store 975 (Auchan Drive Hypermarché Kremlin-Bicêtre, Paris area) and says store_defaulted: true.
- `page` (integer, optional, default 1) — Result page, 30 products per page ('lait' at store 823: 292 products, 10 pages, no product repeated across pages 1-3).
- `sort` (enum, optional, default "relevance") — Order, the site's own sort keys. Unknown values are refused. [one of: relevance, price_asc, price_desc, unit_price_asc, unit_price_desc, rating_desc, brand_asc, brand_desc, best_sellers]
- `loyalty_offer` (boolean, optional, default false) — Only products with a Waaoh loyalty offer (money credited to the loyalty account, 'cagnotté'; the till price does not change).
- `new_only` (boolean, optional, default false) — Only products the site marks 'Nouveauté'.
- `nutriscore` (enum, optional) — Only products with this Nutri-Score (old and new calculation both count). [one of: a, b, c, d, e]
- `min_rating` (enum, optional) — Only products whose average customer rating is at least this many stars. [one of: 3, 4, 5]

**Returns:** data.products[]: product_id, uuid, offer_id, name, brand, title, url, image, pack_size, price (price charged now for one unit, EUR), regular_price, was_price (struck-through old price on an immediate reduction), discount_percent, currency, unit_price, unit (kg, l, pce…), promotions[] {label, type, loyalty, immediate, min_quantity, percent}, loyalty_offer (Waaoh 'cagnotté' text, never in price), availability, stock_quantity (the store's stock figure), delivery_promise, rating, review_count, new, sponsored, labels[] (Bio, AB, Filières…), priced, position. data.total, data.pagination, data.store, data.store_defaulted.

**Example request body:**
```json
{
  "store_id": "823"
}
```

### POST https://api.reefapi.com/auchan/v1/product — 3 credits
One Auchan product in full for one store: price, old price and discount, unit price, promotions and Waaoh offer, stock, EAN, Auchan reference, Nutri-Score, nutrition table, ingredients, allergens, characteristics (origin, legal name, storage…), category path, images, rating and review count.

**Parameters:**
- `product_id` (string, required) — Auchan product id: the 'C' code after 'pr-' in a product URL (auchan.fr/.../pr-C1306935 -> C1306935), the `product_id` of a search row.
- `store_id` (string, optional) — Auchan store number (drive, click & collect point or locker) from the `stores` action. Prices, assortment, promotions and stock are that store's. Without it the engine prices for its default store 975 (Auchan Drive Hypermarché Kremlin-Bicêtre, Paris area) and says store_defaulted: true.

**Returns:** data.product: product_id, uuid, offer_id, name, brand, title, description, url, pack_size, price, regular_price, was_price, discount_percent, currency, unit_price, unit, promotions[], loyalty_offer, availability, stock_quantity, ean, internal_ref, nutriscore, nutriscore_new_calculation, allergens, ingredients, characteristics[] {group, label, value}, nutrition {basis, rows[] {nutrient, per_100, daily_intake_percent}}, labels[], category_path[] {category_id, name}, images[], rating, review_count, priced. data.store, data.store_defaulted.

**Example request body:**
```json
{
  "product_id": "C1306935",
  "store_id": "823"
}
```

### POST https://api.reefapi.com/auchan/v1/stores — 3 credits
Auchan pickup stores (drives, click & collect points, lockers) near a French postcode or a point, nearest first, with the store_id the other actions take, address, distance, type and opening hours.

**Parameters:**
- `postal_code` (string, optional) — French 5-digit postcode; the stores near its town are returned, nearest first. Give postal_code, or latitude and longitude.
- `latitude` (number, optional) — Latitude of the point to search around (with longitude).
- `longitude` (number, optional) — Longitude of the point to search around (with latitude).

**Returns:** data.stores[]: store_id, name, type (DRIVE | PICKUP_POINT | LOCKERS), channels[], address, postal_code, city, latitude, longitude, distance_km, open, closed, enabled, phone, hours[] {day, open, close}, url, seller_id, point_of_service_id. data.location {postal_code, city, latitude, longitude}.

**Example request body:**
```json
{
  "postal_code": "59000"
}
```

### POST https://api.reefapi.com/auchan/v1/categories — 3 credits
Auchan's aisles: the top-level navigation ('Nos rayons'), or the sub-categories of one category with category_id.

**Parameters:**
- `category_id` (string, optional) — Optional: list the sub-categories of this category instead of the top-level aisles.

**Returns:** data.categories[]: category_id, name, url (+ group and kind on the top level). data.parent {category_id, name, total} when category_id is given.

**Example request body:**
```json
{
  "category_id": "n01"
}
```

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