Autodoc API
Autodoc API returns live Autodoc data as clean JSON for autodoc The primary endpoint, vehicle_lookup, returns level ('makers'|'models'|'generations'|'vehicles'|'vehicle') + items[] whose shape follows the level: makers/models/generations are {slug….
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
Developers reach for it when they need to validate, enrich, classify and normalize operational data without maintaining one-off scraping code or separate API contracts. If you were about to build or fix a Autodoc scraper, this API is the maintained alternative — it returns the same data as clean JSON, with the proxies, rotation and anti-bot handling already solved. This page covers the live example, request shape, response shape and available actions: vehicle_lookup, search, product_detail, part_search. Every request uses the same ReefAPI envelope, one API key and one shared credit pool, so it fits alongside the rest of your data stack.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/autodoc/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"category": "brake-pad-set-10130",
"maker": "bmw",
"model": "1er-reihe",
"generation": "1-coupe-e82",
"vehicle": "12272-118-d",
"max_results": 20
}
}{
"ok": true,
"meta": {
"api": "autodoc",
"endpoint": "search",
"mode": "live",
"latency_ms": 1900.4,
"record_count": 20,
"bytes": 691275,
"cache_hit": false,
"completeness_pct": 100,
"stop_reason": "limit_reached",
"method": "server_rendered_html",
"upstream_calls": 1,
"fitment": "vehicle",
"scope": [
"bmw",
"1er-reihe",
"1-coupe-e82"
],
"source": {
"route": "/car-parts/brake-pad-set-10130/bmw/1er-reihe/1-coupe-e82/[redacted-phone]-d"
},
"pagination": {
"page": 1,
"per_page": 20,
"returned": 20,
"pages_fetched": 1,
"total_results": null,
"known_pages_at_least": 5,
"has_more": true,
"next_page": 2
},
"notes": null
},
"data": {
"parts": [
{
"article_id": "7999106",
"article_number": "402B0071",
"url": "https://www.autodoc.co.uk/ridex/7999106",
"title": "RIDEX 402B0071 Brake pad set Rear Axle, Low-Metallic",
"brand": "RIDEX",
"brand_slug": "ridex",
"brand_id": "100015",
"category_name": "Brake pad set",
"category_generic_id": "402",
"price": 13.99,
"price_was": null,
"rrp": 24.7,
"currency": "GBP",
"on_sale": true,
"rating": 5,
"rating_stars_out_of_10": 10,
"review_count": 40,
"image": "https://media.autodoc.de/360_photos/7999106/preview.jpg",
"images_360_url": "https://media.autodoc.de/360_photos/7999106",
"specifications": [
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
}
],
"units_left": 2286,
"in_stock": true,
"fits_selected_vehicle": true
},
{
"article_id": "16413283",
"article_number": "402B0071P",
"url": "https://www.autodoc.co.uk/ridex-plus/16413283",
"title": "RIDEX PLUS 402B0071P Brake pad set Rear Axle",
"brand": "RIDEX PLUS",
"brand_slug": "ridex-plus",
"brand_id": "100762",
"category_name": "Brake pad set",
"category_generic_id": "402",
"price": 20.49,
"price_was": null,
"rrp": 56.58,
"currency": "GBP",
"on_sale": true,
"rating": 4,
"rating_stars_out_of_10": 8,
"review_count": 9,
"image": "https://media.autodoc.de/360_photos/16413283/preview.jpg",
"images_360_url": "https://media.autodoc.de/360_photos/16413283",
"specifications": [
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
}
],
"units_left": 49,
"in_stock": true,
"fits_selected_vehicle": true
},
{
"article_id": "8000053",
"article_number": "402B0334",
"url": "https://www.autodoc.co.uk/ridex/8000053",
"title": "RIDEX 402B0334 Brake pad set Front Axle",
"brand": "RIDEX",
"brand_slug": "ridex",
"brand_id": "100015",
"category_name": "Brake pad set",
"category_generic_id": "402",
"price": 15.49,
"price_was": null,
"rrp": 44.6,
"currency": "GBP",
"on_sale": true,
"rating": 4,
"rating_stars_out_of_10": 8,
"review_count": 37,
"image": "https://media.autodoc.de/360_photos/8000053/preview.jpg",
"images_360_url": "https://media.autodoc.de/360_photos/8000053",
"specifications": [
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
}
],
"units_left": 206,
"in_stock": true,
"fits_selected_vehicle": true
}
],
"category": {
"slug": "brake-pad-set-10130",
"category_id": "10130",
"name": "[redacted-name]",
"url": "https://www.autodoc.co.uk/car-parts/brake-pad-set-10130"
},
"vehicle": {
"vehicle_id": "12272",
"vehicle_slug": "[redacted-phone]-d",
"maker": "bmw",
"model": "1er-reihe",
"generation": "1-coupe-e82",
"name": "[redacted-name]",
"url": "https://www.autodoc.co.uk/spares/bmw/1er-reihe/1-coupe-e82/[redacted-phone]-d"
}
}
}What the Autodoc API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| vehicle_lookup | Walk Autodoc's vehicle tree — this is where every other action starts, because car parts are only meaningful against a specific car. Call it with no parameters for the 52 makers; add `maker` for that maker's model families; add `model` for the generations (the chassis codes: E82, F20, W204); add `generation` for the actual engine variants, each with Autodoc's numeric vehicle id. Add `vehicle` (or pass a `vehicle_url`) and you get the car itself — its full factory description (engine, kW/hp, fuel, build years, engine code) plus every part category Autodoc stocks for it, ready to feed straight into `search`. Set `market` to `de` to walk the German storefront's tree instead; the slugs are the same on both, so a vehicle resolved on one market can be used on the other. | Ops teams call vehicle_lookup to get walk Autodoc's vehicle tree. | market, maker, model, generation, vehicle, ... |
| search | The parts that FIT one exact car, in one part category — the question this API exists to answer. Give a `category` (from the `categories` action, or better from the `categories[]` that a `vehicle_lookup` on your vehicle returns) plus the full vehicle: `maker` + `model` + `generation` + `vehicle`, or a single `vehicle_url`. You get Autodoc's own fitment listing — every brand that makes that part for that car, with price, RRP, rating, review count, the manufacturer's part number, the key specifications and the image — 20 per page. THE VEHICLE IS NOT OPTIONAL, and that is Autodoc's data model rather than a limit of this API: a parts list only exists for one exact engine variant. Autodoc's category page, maker page, model page and generation page are all real pages that carry NO product listing whatsoever (measured: 0 parts at every level above the engine variant, 20 at it). Omitting the vehicle returns MISSING_PARAM rather than an empty result set that would cost you a call and tell you nothing. `market` decides which storefront is priced: `uk` (GBP) or `de` (EUR). The same vehicle and the same category work on both — what changes is the price, the currency and the language of the copy. | Developer tools call search to get the parts that FIT one exact car, in one part category. | category, maker, model, generation, vehicle, ... |
| product_detail | One part in full, by Autodoc's numeric article id (or its URL). Returns the complete image gallery and the 360-degree photo set, the manufacturer's own specification table verbatim (fitting position, dimensions, material, WVA number, weight, EAN), the manufacturer part number, brand, price with currency, availability, shipping cost and return window, the aggregate rating and the customer reviews inline — and, the two fields that matter most in this industry, the full OE cross-reference (every vehicle-manufacturer part number this part replaces) and the equivalent parts Autodoc sells alongside it. `market` picks the storefront — the same `article_id` is the same part on both, priced in GBP on `uk` and EUR on `de`, and `currency` always reports what the page itself said. | Validation workflows call product_detail to get one part in full, by Autodoc's numeric article id (or its URL). | article_id, url, market, max_reviews |
| part_search | Autodoc's own catalogue-wide search, across roughly 6.7 million parts. Built for the lookup this trade actually does: paste a manufacturer part number (`1987474465`, `402B0071`) and get that part plus its alternatives, or type plain English (`brake pads`, `wiper blades`) for a normal keyword result set. Results are not scoped to a car — use `search` when you need fitment, and `oem_lookup` when the number you hold came off the vehicle manufacturer's own part. Set `market` to `de` to search the German storefront (EUR). | Data-quality teams call part_search to get autodoc's own catalogue-wide search, across roughly 6.7 million parts. | query, market, page, max_results |
| oem_lookup | Cross-reference a vehicle manufacturer's ORIGINAL part number to everything Autodoc sells as a replacement for it. Give BMW's 34216774692 and get the Brembo, TRW, Bosch, ATE and budget-brand equivalents, each with price, rating and the manufacturer's own part number. This is the endpoint a workshop or a parts reseller uses, and it is the reverse of the `oem_numbers` list `product_detail` returns for a part. Set `market` to `de` for the German storefront's prices (EUR); the OE number and the parts it resolves to are the same on both. | Ops teams call oem_lookup to get cross-reference a vehicle manufacturer's ORIGINAL part number to everything Autodoc sells as…. | oem_number, market, page, max_results |
| categories | Autodoc's part-category vocabulary — all 199 leaf categories with the slug and numeric id the `search` action needs, so a caller never has to guess one. Optionally filter with `group` (`brake`, `filter`, `suspension`). `market` picks the storefront, which is what decides the LANGUAGE of the slugs and names — the numeric ids are the same category on both, and a uk slug passed to a de `search` resolves correctly because the number is what Autodoc keys on. Cached hard: this list barely moves. | Developer tools call categories to get autodoc's part-category vocabulary. | market, group |
Call search from your stack
curl -X POST https://api.reefapi.com/autodoc/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"category":"brake-pad-set-10130","maker":"bmw","model":"1er-reihe","generation":"1-coupe-e82","vehicle":"12272-118-d","max_results":20}'import requests
r = requests.post(
"https://api.reefapi.com/autodoc/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"category": "brake-pad-set-10130",
"maker": "bmw",
"model": "1er-reihe",
"generation": "1-coupe-e82",
"vehicle": "12272-118-d",
"max_results": 20
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/autodoc/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"category": "brake-pad-set-10130",
"maker": "bmw",
"model": "1er-reihe",
"generation": "1-coupe-e82",
"vehicle": "12272-118-d",
"max_results": 20
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.autodoc.search with {"category":"brake-pad-set-10130","maker":"bmw","model":"1er-reihe","generation":"1-coupe-e82","vehicle":"12272-118-d","max_results":20}.Who uses this API and why
- Ops teams use Autodoc to get walk Autodoc's vehicle tree.
- Developer tools use Autodoc to get the parts that FIT one exact car, in one part category.
- Validation workflows use Autodoc to get one part in full, by Autodoc's numeric article id (or its URL).
- Data-quality teams use Autodoc to get autodoc's own catalogue-wide search, across roughly 6.7 million parts.
- Ops teams use Autodoc to get cross-reference a vehicle manufacturer's ORIGINAL part number to everything Autodoc sells as….
Questions developers ask before integrating
What is the Autodoc API?
Autodoc API is a ReefAPI endpoint group for autodoc It returns live JSON through POST requests under /autodoc/v1.
Is the Autodoc API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Autodoc calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Autodoc login or account?
No login to Autodoc is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Autodoc data?
The page example is captured from a live vehicle_lookup call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Autodoc API use?
Autodoc actions currently cost 1-3 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Autodoc from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call autodoc actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Autodoc API a Autodoc scraper?
It is the managed alternative to a DIY Autodoc scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same autodoc back as clean JSON.
Why does my Autodoc scraper keep getting blocked?
Most Autodoc scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.