# Moteur.ma Morocco Cars

> Search used cars for sale in Morocco on Moteur.ma (≈123,000 live ads): make, model, city, fuel, gearbox, body type, colour, price, year and mileage filters, 30 ads per page, newest first as the site orders them. Nothing is required: no parameters browses the whole used-car catalogue.
> ReefAPI engine `moteur-ma` · 7 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/moteur-ma/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/moteur-ma/v1/search — 3 credits
Search used cars for sale in Morocco on Moteur.ma (≈123,000 live ads): make, model, city, fuel, gearbox, body type, colour, price, year and mileage filters, 30 ads per page, newest first as the site orders them. Nothing is required: no parameters browses the whole used-car catalogue.

**Parameters:**
- `brand` (string, optional) — Make slug as Moteur.ma writes it: `dacia`, `renault`, `mercedes-benz`, `land-rover`. Full list with model slugs: the `makes` action.
- `model` (string, optional) — Model slug inside `brand`, e.g. `logan`, `clio`, `classe-c`. Requires brand.
- `city` (string, optional) — Moroccan city as the site lists it (Casablanca, Rabat, Marrakech, Tanger, Fes, Agadir …, 111 values including `Autre`). Case and accents are optional.
- `fuel` (enum, optional) — Fuel (Carburant). [one of: Essence, Diesel, Électrique, Hybride, Hybride rechargeable]
- `gearbox` (enum, optional) — Gearbox (Boîte). [one of: Manuelle, Automatique, Semi-automatique]
- `body_type` (enum, optional) — Body type (Carrosserie). [one of: Cabriolet, SUV et 4x4, Coupé, Citadine, Break, Monospace, Berline, CC, Micro-citadine, Compact, Crossover, Pick up, Utilitaire (Minivan), Utilitaire (Van)]
- `color` (enum, optional) — Colour (Couleur). [one of: Argent, Beige, Blanc, Blanc cassé, Bleu, Bleu clair, Bleu marine, Bordeaux, Gris, Gris clair, Gris fonce, Gris anthracite, Ivoire, Jaune, Marron, Marron clair, Noir, Or, Orange, Rouge, Rouge fonce, Rose, Tuning, Vert, Vert fonce, Violet, Autre]
- `price_min` (integer, optional) — Minimum price in Moroccan dirhams (MAD).
- `price_max` (integer, optional) — Maximum price in MAD. The site also keeps ads with no published price ("Appeler pour le prix") under a price ceiling.
- `year_min` (integer, optional) — Model year from.
- `year_max` (integer, optional) — Model year up to.
- `mileage_max` (integer, optional) — Maximum mileage in km.
- `page` (integer, optional, default 1) — 1-based page, 30 ads per page. Every page up to `last_page` is reachable (measured: page 4,102 of the full 123,059-ad catalogue).
- `include_pii` (boolean, optional, default true) — Accepted for compatibility; this API never masks anything. The ad's contact phone and the seller name are returned exactly as the page publishes them.

**Returns:** {total, page, page_size, last_page, has_more, filters_applied, listings[]}. Each listing: id, url, title, price_mad (null when the ad says "Appeler pour le prix"), price_label, currency MAD, city, published_at (site local time), year, gearbox, fuel, mileage_km, description_snippet, image.

**Example request body:**
```json
{
  "brand": "dacia",
  "model": "logan",
  "fuel": "Diesel"
}
```

### POST https://api.reefapi.com/moteur-ma/v1/listing — 3 credits
One used-car ad in full: price, make, model, year, mileage, fuel, gearbox, body, colour, doors, fiscal power, the seller's description, history flags (first owner, accident history, imported new, customs), equipment options, every photo, view count, the contact phone / WhatsApp link and the seller block (private or dealer name, logo, member since, city). Either `id` or `url`.

**Parameters:**
- `id` (string, optional) — Numeric Moteur.ma ad id, as returned by `search`.
- `url` (string, optional) — Or the ad URL (…/detail-annonce/<id>/<slug>.html).
- `include_pii` (boolean, optional, default true) — Accepted for compatibility; this API never masks anything. The ad's contact phone and the seller name are returned exactly as the page publishes them.

**Returns:** {id, url, title, price_mad, price_label, currency, category, city, published_date, views, brand, model, year, mileage_km, fuel, gearbox, body_type, color, doors, fiscal_power_cv, other_attributes, description, features{first_owner, tuned, accident_history, imported_new, customs_status}, options[], images[], images_count, is_boosted, phone, whatsapp_url, seller{name, type, member_since, avatar, city}}

**Example request body:**
```json
{
  "url": "https://www.moteur.ma/fr/voiture/achat-voiture-occasion/detail-annonce/491804/fiat-500-c.html"
}
```

### POST https://api.reefapi.com/moteur-ma/v1/makes — 3 credits
Every make and model slug the used-car `search` accepts, straight from the site's own filter data.

**Parameters:**
- `brand` (string, optional) — Only this make slug and its models.

**Returns:** {make_count, makes[{id, name, slug, models[{id, name, slug}]}]}

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

### POST https://api.reefapi.com/moteur-ma/v1/new_catalog — 3 credits
The new-car catalogue tree sold in Morocco: every make, its current models and every version id (feed them to `new_version`).

**Parameters:**
- `brand` (string, optional) — Only this make slug.

**Returns:** {brand_count, brands[{id, name, slug, models[{id, name, slug, image, versions[{id, name, slug}]}]}]}

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

### POST https://api.reefapi.com/moteur-ma/v1/new_models — 3 credits
A make's current new-car range in Morocco with the official "from" price (MAD) and number of versions of each model.

**Parameters:**
- `brand` (string, required) — New-car make slug, e.g. `dacia`, `toyota`, `byd`, `mercedes-benz` (see `new_catalog`).

**Returns:** {brand, model_count, models[{slug, name, url, from_price_mad, versions_count, image}]}

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

### POST https://api.reefapi.com/moteur-ma/v1/new_versions — 3 credits
Every version of one new model with its fuel, gearbox, fiscal power, horsepower and price — current price, list price and the promotion discount when one runs.

**Parameters:**
- `brand` (string, required) — New-car make slug, e.g. `citroen`.
- `model` (string, required) — Model slug inside that make, e.g. `c3-aircross`.

**Returns:** {brand, model, price_range_mad{min, max}, version_count, versions[{id, name, brand, brand_slug, model, model_slug, url, fuel, gearbox, fiscal_power_cv, power_hp, price_mad, list_price_mad, discount_mad, is_promo, image}]}

**Example request body:**
```json
{
  "brand": "dacia",
  "model": "logan"
}
```

### POST https://api.reefapi.com/moteur-ma/v1/new_version — 3 credits
One new-car version in full: showroom price, promotion discount and promo price, registration and other fees, on-the-road price, promo end date, and the whole technical sheet — power, torque, 0-100, top speed, consumption, dimensions, boot, weight, battery and range — plus every equipment line. Either `id` or `url`.

**Parameters:**
- `id` (string, optional) — Numeric version id, as returned by `new_versions` or `new_catalog`.
- `url` (string, optional) — Or the version page URL (…/<brand>/<model>/<slug>-<id>.html).

**Returns:** {id, url, name, brand, model, version, year, body_type, fuel, gearbox, propulsion, doors, seats, power_hp, fiscal_power_cv, currency, showroom_price_mad, discount_mad, promo_price_mad, registration_fee_mad, other_fees_mad, on_the_road_price_mad, price_ld_json, price_mismatch, is_promo, promo_valid_until, image, photos_count, specs{section: {label: value|true|false}}, fiche_technique}

**Example request body:**
```json
{
  "id": "4455"
}
```

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