Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Autodoc API page →
E-commerce & Marketplaces

Autodoc API & Scraper

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….

6 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 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 track product listings, prices, availability, variants and reviews 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.

Reference

Autodoc part numbers: which number belongs to whom

A car part has at least three different numbers attached to it and they are not interchangeable. Autodoc has its own internal id, the parts brand has its article number, and the car manufacturer has the OE number the part replaces. Each is looked up by a different action. All examples were measured 2026-08-27 on one RIDEX rear brake pad set.

FieldWhose number it isMeasured exampleLooked up by
article_idAutodoc's own part id7999106product_detail (article_id)
article_number / skuThe parts brand's number402B0071 (RIDEX)part_search (query)
oem_numbers[]The car maker's original numbers34216774692 (BMW), 14 on this one partoem_lookup (oem_number)
eanGTIN-13 from the spec table4059191314577returned by product_detail only
vehicle_idOne exact engine variant12272, BMW E82 118d 2.0 136 hp N47 D20 Cvehicle_lookup, then search
category slugWords plus the real numeric idbrake-pad-set-10130categories, then search
brand_idThe parts brand100015 (RIDEX)returned on every part row

The two searches are not interchangeable. part_search takes a parts-brand number: 402B0071 returned article 7999106 first, then BREMBO P 06 038 and FEBI BILSTEIN 16533 as alternatives. oem_lookup takes only a car maker's OE number and answers one it does not carry with a typed NOT_FOUND rather than a landing page. Makers, models and generations have no public numeric id at all, so their slug is the key and maker_id is usually null.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "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
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "autodoc",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 16774.7,
    "record_count": 20,
    "bytes": 723446,
    "cache_hit": false,
    "completeness_pct": 100,
    "stop_reason": "limit_reached",
    "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/12272-118-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,
    "timing": {
      "total_ms": 16744,
      "clearance": "solved",
      "cold_start": true,
      "clearance_ms": 15129,
      "clearance_solves": 1,
      "fetches": 1,
      "fetch_ms": 1602,
      "walls_retried": 0,
      "transport_errors_retried": 0
    },
    "charged_credits": 2,
    "version": "1.3.0"
  },
  "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": 10.99,
        "price_was": null,
        "rrp": 24.7,
        "currency": "GBP",
        "on_sale": true,
        "rating": 5,
        "rating_stars_out_of_10": 10,
        "review_count": 44,
        "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": 1942,
        "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": 18.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": 44,
        "in_stock": true,
        "fits_selected_vehicle": true
      },
      {
        "article_id": "7999363",
        "article_number": "402B0138",
        "url": "https://www.autodoc.co.uk/ridex/7999363",
        "title": "RIDEX 402B0138 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": 30.8,
        "currency": "GBP",
        "on_sale": true,
        "rating": 4,
        "rating_stars_out_of_10": 8,
        "review_count": 73,
        "image": "https://media.autodoc.de/360_photos/7999363/preview.jpg",
        "images_360_url": "https://media.autodoc.de/360_photos/7999363",
        "specifications": [
          {
            "name": "[trimmed-depth]",
            "value": "[trimmed-depth]"
          },
          {
            "name": "[trimmed-depth]",
            "value": "[trimmed-depth]"
          },
          {
            "name": "[trimmed-depth]",
            "value": "[trimmed-depth]"
          }
        ],
        "units_left": 1854,
        "in_stock": true,
        "fits_selected_vehicle": true
      }
    ],
    "category": {
      "slug": "brake-pad-set-10130",
      "category_id": "10130",
      "name": "Brake pads",
      "url": "https://www.autodoc.co.uk/car-parts/brake-pad-set-10130"
    },
    "vehicle": {
      "vehicle_id": "12272",
      "vehicle_slug": "12272-118-d",
      "maker": "bmw",
      "model": "1er-reihe",
      "generation": "1-coupe-e82",
      "name": "Brake pads for BMW E82 118d 2.0 136 hp Diesel 2009 - 2013 N47 D20 C",
      "url": "https://www.autodoc.co.uk/spares/bmw/1er-reihe/1-coupe-e82/12272-118-d"
    }
  }
}
Actions

What the Autodoc API does

ActionDescriptionConcrete use caseKey params
vehicle_lookupWalk 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 every maker (176: the popular ones flagged `popular: true`, the rest from Autodoc's full maker page, each with `model_count`); 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` or `es` to walk that storefront's tree instead; the slugs are the same on all, so a vehicle resolved on one market can be used on the other.Pricing teams call vehicle_lookup to get walk Autodoc's vehicle tree.market, maker, model, generation, vehicle, ...
searchThe 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), `de` or `es` (EUR). The same vehicle and the same category work on all three — what changes is the price, the currency and the language of the copy.Marketplace operators call search to get the parts that FIT one exact car, in one part category.category, maker, model, generation, vehicle, ...
product_detailOne 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.Catalog enrichment teams 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_searchAutodoc'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` or `es` to search that storefront (EUR). Free text is matched by the STOREFRONT'S OWN search, which only understands its own language: Spanish text on `es`, German on `de`, English on `uk` (measured: 'pastillas de freno' on es = 20/20 brake-pad sets; the same text on de = air fresheners, as on autodoc.de itself). Part numbers work on every market.Retail analysts call part_search to get autodoc's own catalogue-wide search, across roughly 6.7 million parts.query, market, page, max_results
oem_lookupCross-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` or `es` for that storefront's prices (EUR); the OE number and the parts it resolves to are the same on all three.Pricing 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
categoriesAutodoc'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.Marketplace operators call categories to get autodoc's part-category vocabulary.market, group
Code samples

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}'
MCP one-liner
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}.
Use cases

Who uses this API and why

  • Pricing teams use Autodoc to get walk Autodoc's vehicle tree.
  • Marketplace operators use Autodoc to get the parts that FIT one exact car, in one part category.
  • Catalog enrichment teams use Autodoc to get one part in full, by Autodoc's numeric article id (or its URL).
  • Retail analysts use Autodoc to get autodoc's own catalogue-wide search, across roughly 6.7 million parts.
  • Pricing teams use Autodoc to get cross-reference a vehicle manufacturer's ORIGINAL part number to everything Autodoc sells as….
FAQ

Questions developers ask before integrating

How do I address one exact car?

Four path segments: maker, model, generation and vehicle, for example bmw / 1er-reihe / 1-coupe-e82 / 12272-118-d. Model slugs are German even on the UK site, so 1er-reihe is the 1 Series. vehicle accepts either the full slug or the bare numeric id 12272, and search will not run without it. You can replace all four with a single vehicle_url, and the URL's own domain sets the storefront, so an autodoc.de URL prices in EUR without passing market.

Is the category slug validated?

Only its numeric suffix is. The words are decoration. A search with category=nonsense-words-10130 came back ok with the category resolved to slug brake-pad-set-10130, category_id 10130, name Brake pads. A slug whose words and id disagree will therefore silently return a different part category. Always copy the slug from the categories action or from the categories[] a vehicle_lookup returns for your car.

Do the UK and German storefronts price the same part differently?

They are separate catalogues carrying the same number in a different currency. Article 7999106 returned 10.99 GBP on market=uk and 10.99 EUR on market=de, measured minutes apart, so the numeral is identical and the money is not. Review counts differ too, 41 on the UK listing and 29 on the German one, because each storefront collects its own. Treat them as two catalogues, not one catalogue with a currency switch.

Does compatibility data actually come through?

Yes, but through the fitment listing rather than a per-part vehicle list. On the measured part, fits_vehicles came back as an empty array, while compatible_makers listed BMW with maker_id 16 and oem_references listed 14 BMW OE numbers with the maker named against each. The reliable answer to does this fit my car is to run search scoped to a vehicle and read fits_selected_vehicle: it was true on all five brake-pad rows for the E82 118d, and false on the same part returned by oem_lookup, which is not vehicle-scoped.

Why is total_results always null?

Autodoc publishes no result count anywhere on the page, and its pagination strip is a sliding window rather than a full list of pages. meta.pagination therefore reports known_pages_at_least, a lower bound, and never a total. Pages are 20 parts each, so page until has_more is false. Each upstream page is roughly 650KB, so set max_results to what you will actually use.

What is the difference between the categories action and a vehicle's own category list?

categories returns the catalogue-wide leaf categories, 199 of them, each with a slug and a numeric id. A vehicle_lookup scoped to a car returns a different list that also includes Autodoc's group landing pages, which have no numeric suffix, such as air-conditioning and axle-drive. Those still work as a category value: air-conditioning scoped to the E82 118d returned parts normally. Only about half of the two lists overlap, so prefer the vehicle's own list when you have a car.

Are the numeric category ids the same on both storefronts?

Mostly, but not entirely. 164 of the 199 ids published on autodoc.co.uk also appear in the 199 published on autodoc.de. The slugs and names are localised, which matters for the group filter: group=oil returns 17 categories on the UK storefront and 0 on the German one, where the matching word is öl. Filter on the id where you can, and re-read categories per market where you cannot.

Is units_left a real stock figure?

It is Autodoc's own ending-soon counter, not a warehouse count, and it varies wildly: 1,873 on the RIDEX pad set and 56 on the RIDEX PLUS front set in the same response. Pair it with in_stock, which is the flag that actually matters; one cross-reference row came back with units_left 0 and in_stock false. rrp against price is where the discount lives, 24.70 against 10.99 GBP with on_sale true on the measured part.

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 an 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. 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.

docs / autodoc

Autodoc

Autodoc

base /autodoc/v16 endpoints
post/autodoc/v1/vehicle_lookup1 credit

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 every maker (176: the popular ones flagged `popular: true`, the rest from Autodoc's full maker page, each with `model_count`); 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` or `es` to walk that storefront's tree instead; the slugs are the same on all, so a vehicle resolved on one market can be used on the other.

ParameterAllowed / rangeDescription
market = ukoptionaluk · de · esWhich Autodoc storefront to read: `uk` (autodoc.co.uk, prices in GBP), `de` (autodoc.de, EUR) or `es` (autodoc.es, EUR, Spanish titles, categories and free-text search). Defaults to `uk`. This decides the catalogue, the prices and the currency, and it applies to EVERY action here — the vehicle tree, the fitment listing, the part page, both searches and the category list. The SLUGS are shared between the storefronts, so a vehicle or category you resolved on one market can be passed straight to the other; the ids (`article_id`, `vehicle_id`, `category_id`) are the same part and the same car on both. What changes is the price, the currency and the language of the human-readable text. Currency is always read from the page itself and returned in `currency`, so you never have to infer it from this value.
makeroptional—The car manufacturer, as the slug Autodoc uses in its own URLs — `bmw`, `vw`, `audi`, `mercedes-benz`, `ford`, `vauxhall`, `toyota`, `renault`. Call `vehicle_lookup` with no parameters to get the full list of makers (176) with their exact slugs; never guess one. Autodoc publishes no open numeric id for a maker (that lives behind a route this API cannot reach), so the slug IS the key.
modeloptional—The model family slug, as returned by `vehicle_lookup` for your maker — note Autodoc uses German slugs for some families even on the UK site (`1er-reihe` is the BMW 1 Series, `3er-reihe` the 3 Series). Requires `maker`.
generationoptional—The generation / body slug — the chassis code most owners know their car by (`1-coupe-e82`, `1-e87`, `1-f20`). Returned by `vehicle_lookup` for your model. Requires `maker` and `model`.
vehicleoptional—The exact engine variant — this is what makes a fitment answer true, and `search` REQUIRES it. Pass either the full slug `vehicle_lookup` returns (`12272-118-d`) or just Autodoc's numeric vehicle id (`12272`); both resolve to the same car. Requires `maker`, `model` and `generation`, because Autodoc's vehicle URLs are hierarchical — the id alone has no page of its own. NOTE: this is the ONLY way to scope parts to a car. Autodoc's `?carId=` query parameter looks like it should work and is silently ignored (measured: identical results with it, without it, and with a nonsense value).
vehicle_urloptional—A full Autodoc vehicle URL instead of the four path parameters — the shortest way to re-use a vehicle you already resolved. Accepted by both `vehicle_lookup` and `search`. Either storefront's spelling works (`autodoc.co.uk/spares/…` or `autodoc.de/ersatzteile/…`) and the URL's own domain SETS the market, so you do not have to pass `market` as well; passing a URL from one storefront together with `market` set to the other is refused rather than silently resolved to one of them.
Try in playground →
post/autodoc/v1/product_detail2 credits

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.

ParameterAllowed / rangeDescription
article_idoptional—Autodoc's own numeric part id, exactly as every other action here returns it. This is the ONLY key `product_detail` needs — the brand in the URL is decoration and Autodoc redirects `/anything/7999106` to the right part. Provide `article_id` or `url`.
urloptional—A full Autodoc part URL — an alternative to `article_id`. Either storefront's domain works and the domain SETS the market, so `autodoc.de/ridex/7999106` returns the same part priced in EUR.
market = ukoptionaluk · de · esWhich Autodoc storefront to read: `uk` (autodoc.co.uk, prices in GBP), `de` (autodoc.de, EUR) or `es` (autodoc.es, EUR, Spanish titles, categories and free-text search). Defaults to `uk`. This decides the catalogue, the prices and the currency, and it applies to EVERY action here — the vehicle tree, the fitment listing, the part page, both searches and the category list. The SLUGS are shared between the storefronts, so a vehicle or category you resolved on one market can be passed straight to the other; the ids (`article_id`, `vehicle_id`, `category_id`) are the same part and the same car on both. What changes is the price, the currency and the language of the human-readable text. Currency is always read from the page itself and returned in `currency`, so you never have to infer it from this value.
max_reviews = 25optional0–100How many of the part's inline reviews to return (0-100). Autodoc publishes roughly 25 on the page itself; there is no second page of them on this route, so asking for more does not fetch more.
Try in playground →
post/autodoc/v1/oem_lookup3 credits

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` or `es` for that storefront's prices (EUR); the OE number and the parts it resolves to are the same on all three.

ParameterAllowed / rangeDescription
oem_numberrequired—A vehicle manufacturer's ORIGINAL part number (BMW 34216774692, VAG 1K0615301AA). Returns every aftermarket part Autodoc sells as a replacement for it — the cross-reference this industry runs on. Spaces and dots are ignored. A number Autodoc does not carry returns a typed NOT_FOUND rather than the catalogue landing page it actually serves.
market = ukoptionaluk · de · esWhich Autodoc storefront to read: `uk` (autodoc.co.uk, prices in GBP), `de` (autodoc.de, EUR) or `es` (autodoc.es, EUR, Spanish titles, categories and free-text search). Defaults to `uk`. This decides the catalogue, the prices and the currency, and it applies to EVERY action here — the vehicle tree, the fitment listing, the part page, both searches and the category list. The SLUGS are shared between the storefronts, so a vehicle or category you resolved on one market can be passed straight to the other; the ids (`article_id`, `vehicle_id`, `category_id`) are the same part and the same car on both. What changes is the price, the currency and the language of the human-readable text. Currency is always read from the page itself and returned in `currency`, so you never have to infer it from this value.
page = 1optional1–50Which page of results to start from (1-based). Autodoc serves 20 parts per page. Page until `meta.pagination.has_more` is false.
max_results = 20optional1–200How many parts to return in total (1-200). Anything above 20 costs one extra upstream page fetch per additional 20 results, and each Autodoc page is roughly 650KB, so ask for what you will use.
Try in playground →
post/autodoc/v1/categories1 credit

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.

ParameterAllowed / rangeDescription
groupoptional—Optional substring filter over the category list (`brake`, `filter`, `suspension`, `oil`). Case-insensitive, matched against both the category name and its slug. Omit to get all 199. NOTE this matches the words of the storefront you asked for: on `market=de` the names and slugs are German, so `filter` still works (Ölfilter/Luftfilter) but `oil` returns nothing and `öl`/`brems` are what match (measured: `oil` -> 17 categories on uk, 0 on de). Filter on `category_id` instead when you need a market-independent answer — the ids are the same categories on both storefronts.
market = ukoptionaluk · de · esWhich Autodoc storefront to read: `uk` (autodoc.co.uk, prices in GBP), `de` (autodoc.de, EUR) or `es` (autodoc.es, EUR, Spanish titles, categories and free-text search). Defaults to `uk`. This decides the catalogue, the prices and the currency, and it applies to EVERY action here — the vehicle tree, the fitment listing, the part page, both searches and the category list. The SLUGS are shared between the storefronts, so a vehicle or category you resolved on one market can be passed straight to the other; the ids (`article_id`, `vehicle_id`, `category_id`) are the same part and the same car on both. What changes is the price, the currency and the language of the human-readable text. Currency is always read from the page itself and returned in `currency`, so you never have to infer it from this value.
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.