# ParuVendu.fr France Classifieds

> Search ParuVendu.fr, one of France's big general classifieds sites, section by section: used cars (brand, model, fuel, gearbox, body, year, mileage, price), real estate for sale or rent (property type, price, surface), second-hand goods (28 categories, sale/gift/swap, condition), pets and local services. Every section can be narrowed to a French department. `section` is required.
> ReefAPI engine `paruvendu` · 4 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/paruvendu/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/paruvendu/v1/search — 3 credits
Search ParuVendu.fr, one of France's big general classifieds sites, section by section: used cars (brand, model, fuel, gearbox, body, year, mileage, price), real estate for sale or rent (property type, price, surface), second-hand goods (28 categories, sale/gift/swap, condition), pets and local services. Every section can be narrowed to a French department. `section` is required.

**Parameters:**
- `section` (enum, required) — Which part of ParuVendu to search: `cars` (used cars), `real_estate` (homes, flats, land, parking for sale or rent), `goods` (second-hand items), `pets`, `services`. Each section accepts its own filters; a filter from another section is rejected. [one of: cars, real_estate, goods, pets, services]
- `query` (string, optional) — Free text as a French buyer types it: `cabriolet`, `canape`, `chiot berger`. Sections cars, goods, pets, services.
- `category` (string, optional) — Goods / pets / services rubric: a code such as `BMAME000` (Meubles), `ACI00000` (Chien, Chiot), `LMR00000` (Ménage / repassage) or its exact French name. See `categories`.
- `brand` (string, optional) — Cars: brand code, e.g. `VVOBM000` (BMW), `VVORE000` (Renault). See `car_facets`.
- `model` (string, optional) — Cars: model code of that brand, e.g. `VVOBMS1` (BMW Série 1). From `car_facets` with `brand`.
- `fuel` (enum, optional) — Cars: energy. [one of: ES, DI, GP, BI, EL, HY, HR, MH, HD, ZZ]
- `gearbox` (enum, optional) — Cars: transmission. [one of: MA, AU, SA, ZZ]
- `body_type` (enum, optional) — Cars: body style. [one of: TO, 4X, BR, CA, CO, MO, SO, PU]
- `year_min` (integer, optional) — Cars: model year from.
- `year_max` (integer, optional) — Cars: model year up to.
- `mileage_max` (integer, optional) — Cars: kilometres up to.
- `transaction` (enum, optional, default "sale") — Real estate: for sale (default) or for rent. [one of: sale, rent]
- `property_type` (enum, optional, default "house") — Real estate: house (default), apartment, land, parking or building. [one of: house, apartment, land, parking, building]
- `surface_min` (integer, optional) — Real estate: living surface from, m².
- `min_price` (integer, optional) — Minimum price in euros (not services).
- `max_price` (integer, optional) — Maximum price in euros (not services).
- `ad_type` (enum, optional) — Goods: sale, swap, gift, wanted, event. Pets: sale, gift, wanted. [one of: sale, swap, gift, wanted, event]
- `condition` (enum, optional) — Goods: item condition. [one of: like_new, used, to_refurbish, collector, new_gift]
- `seller_type` (enum, optional) — Pets: who is selling. [one of: private, professional, association, breeder]
- `department` (string, optional) — French department number to search in, e.g. `33` (Gironde), `75` (Paris), `2A`.
- `sort` (enum, optional) — Result order. cars: newest, price_asc, price_desc, mileage_asc, mileage_desc · real_estate: relevance (default), newest, price_asc, price_desc, surface_asc (ads without a surface come first), surface_desc · goods/pets: newest, oldest, price_asc, price_desc · services: newest, oldest. [one of: newest, price_asc, price_desc, mileage_asc, mileage_desc, relevance, surface_desc, surface_asc, oldest]
- `page` (integer, optional, default 1) — Result page, 1-500 (ParuVendu serves no page past 500). Page size is the site's: 25 cars, about 30 elsewhere.
- `include_pii` (boolean, optional, default false) — Accepted for gateway compatibility; seller fields are returned as published.

**Returns:** {section, query, total, page, page_size, last_page, has_more, page_beyond_end, sort, filters_applied, listings[]}. Each listing: id, ad_number, url, section, title, price_eur, price_text, city, postal_code, department, description_snippet, image, photo_count, seller_type, seller_name, seller_listing_count, seller_url, is_featured, is_new, published_on; cars add year, mileage_km, fuel, gearbox, body_type; real_estate adds property_kind, surface_m2, rooms, bedrooms, land_m2, energy_class; goods add category.

**Example request body:**
```json
{
  "section": "cars",
  "brand": "VVOBM000",
  "max_price": 15000,
  "sort": "price_desc"
}
```

### POST https://api.reefapi.com/paruvendu/v1/listing — 2 credits
One ParuVendu ad in full: title, full description, price (with the page's own second price witnesses), every photo, city/department/region, every labelled attribute (cars: make, model, version, year, mileage, fuel, gearbox, CO2, Crit'Air, warranty; property: rooms, surface, bedrooms, land, energy class), the ad reference and the seller block (name, private or professional, dealer page, listing count, member since, dealer phone when the page publishes it). Either `id` or `url` is required.

**Parameters:**
- `id` (string, optional) — ParuVendu listing id exactly as a `search` row gives it, e.g. `1296268993A1KVVOBMS1`.
- `url` (string, optional) — Or the listing URL (https://www.paruvendu.fr/.../<id>).
- `include_pii` (boolean, optional, default false) — Accepted for gateway compatibility; seller fields are returned as published.

**Returns:** {id, ad_number, url, section, title, description, price_eur, price_text, price_analytics, price_ld_json, price_mismatch, currency, category_path[], city, postal_code, department, region, attributes[{label, value}], attributes_map, features[], images[], image, images_count, reference, updated_at, published_on, ld_json_type, vehicle{brand, model, version, year, mileage_km, fuel, gearbox, body_type, color, co2_g_km, condition} (cars), seller{name, type, is_professional, listing_count, member_since, profile_url, phone, logo}}

**Example request body:**
```json
{
  "url": "https://www.paruvendu.fr/a/voiture-occasion/bmw/serie-1/1296268993A1KVVOBMS1"
}
```

### POST https://api.reefapi.com/paruvendu/v1/car_facets — 1 credit
ParuVendu's own car filter vocabulary: every brand code, and with `brand` that brand's model codes, plus fuel, gearbox, body and door codes and the year range — the exact codes `search` (section=cars) accepts.

**Parameters:**
- `brand` (string, optional) — Brand code (e.g. `VVOBM000`) to also list that brand's models.

**Returns:** {brand, brands[{code, name}], models[{code, name}], fuels[], gearboxes[], body_types[], doors[], year_min, year_max}

**Example request body:**
```json
{
  "brand": "VVOBM000"
}
```

### POST https://api.reefapi.com/paruvendu/v1/categories — 1 credit
The category codes `search` accepts: 28 goods rubrics, 13 pet families, 15 service families, the 5 property types and the car fuel/gearbox/body codes.

**Parameters:**
- `section` (enum, optional) — Only this section's codes. [one of: real_estate, goods, pets, services, cars]

**Returns:** {sections{<section>: [{code, name}]}}

**Example request body:**
```json
{
  "section": "goods"
}
```

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