# CarSensor used-car API — search Japan's largest used-car marketplace (Recruit's carsensor.net, 519 200 live cars measured 2026-10-02) by keyword, maker and model, any of the 47 prefectures or 9 regions or a single municipality, price, year, mileage, engine size, body style, fuel, drivetrain, gearbox, seats, doors, remaining shaken inspection, warranty type, kei / imported / welfare / camper / commercial class, and 70 equipment and condition codes from accident-free history and one-owner to adaptive cruise control and a sunroof. Full listing detail returns the complete spec sheet, every photo of that car, the Japanese condition fields (修復歴 accident-repair history, 車検 inspection expiry, 法定整備 statutory servicing, リサイクル料 recycling fee), the optional purchase plans with their own totals, and the selling dealer with its address and resolvable dealer page. Prices come back in plain yen, converted from the 万円 (ten-thousand yen) units the site prints and cross-checked against two other figures the page publishes for the same car; mileage is converted from 万km the same way. Dealer profiles and a dealer's whole stock list are their own action. No account, logged-out public data only.

> Search CarSensor's live used-car inventory. Needs at least one narrowing parameter — `query`, `prefecture`, `region`, `city`, `maker`, `model` or any filter — because without one the source would hand back the whole 519 000-car national list 30 rows at a time; the error says so rather than returning it. Every filter here was measured biting against TWO controls in the same run (a narrow keyword search and a whole prefecture), and the numbers are in each parameter's description. 🔴 Page size is fixed by the source at 30 and there is no override. The source does not error on a page past the end: it silently repeats the LAST page (measured on two different result sets), so `last_page` is computed from the source's own total and `page_clamped` tells you when that happened. 🔴 Prices come back as plain yen. The site itself prints 万円 (ten-thousand yen) units, e.g. `68.1万円`, so every `*_jpy` field is that figure times 10 000 and `*_display` carries the source's own string beside it. Mileage is the same: the card prints `1.7万km` and `mileage_km` returns 17000.
> ReefAPI engine `carsensor` · 5 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/carsensor/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/carsensor/v1/search — 3 credits
Search CarSensor's live used-car inventory. Needs at least one narrowing parameter — `query`, `prefecture`, `region`, `city`, `maker`, `model` or any filter — because without one the source would hand back the whole 519 000-car national list 30 rows at a time; the error says so rather than returning it. Every filter here was measured biting against TWO controls in the same run (a narrow keyword search and a whole prefecture), and the numbers are in each parameter's description. 🔴 Page size is fixed by the source at 30 and there is no override. The source does not error on a page past the end: it silently repeats the LAST page (measured on two different result sets), so `last_page` is computed from the source's own total and `page_clamped` tells you when that happened. 🔴 Prices come back as plain yen. The site itself prints 万円 (ten-thousand yen) units, e.g. `68.1万円`, so every `*_jpy` field is that figure times 10 000 and `*_display` carries the source's own string beside it. Mileage is the same: the card prints `1.7万km` and `mileage_km` returns 17000.

**Parameters:**
- `query` (string, optional) — Free-text keywords, exactly as typed into the site's own search box. Japanese works best because the listings are Japanese: measured, `プリウス` matched 11 002 cars while the roman `prius` matched 32. Give this or any other narrowing filter — at least one is required, and they all combine.
- `prefecture` (enum, optional) — One of Japan's 47 prefectures, romanised exactly as the source's own sitemap spells it. Measured bite: Osaka alone held 29 908 cars. 🔴 A name the source does not know is rejected here on purpose: upstream it answers HTTP 200 with the FULL 519 000-car national list, so a typo would look like a working search over the wrong data. Cannot be combined with `region` — the source has one geography slot. [one of: aichi, akita, aomori, chiba, ehime, fukui, fukuoka, fukushima, gifu, gunma, hiroshima, hokkaido, hyogo, ibaraki, ishikawa, iwate, kagawa, kagoshima, kanagawa, kouchi, kumamoto, kyoto, mie, miyagi, miyazaki, nagano, nagasaki, nara, niigata, okayama, okinawa, ooita, osaka, saga, saitama, shiga, shimane, shizuoka, tochigi, tokushima, tokyo, tottori, toyama, wakayama, yamagata, yamaguchi, yamanashi]
- `region` (enum, optional) — A whole region instead of a single prefecture. The nine are a true partition of the country: measured on one keyword, their totals summed to exactly the unfiltered figure (11 002). Cannot be combined with `prefecture`. [one of: chugoku, hokkaido, hokuriku, kansai, kanto, kyushu, shikoku, tohoku, tokai]
- `city` (integer, optional) — The source's own 4-5 digit municipality code (5335 = Ikeda City, Osaka). Narrower than a prefecture and it composes with one: measured, the same keyword went 11 002 → 6 with city 5335, and city 5335 under `prefecture=tokyo` honestly returned 0. An unknown code answers 404 upstream. City codes appear in the `breadcrumb` of every `listing` response, which is where to get them.
- `maker` (string, optional) — Two-letter maker code — TO Toyota, NI Nissan, HO Honda, MA Mazda, SB Subaru, SZ Suzuki, MI Mitsubishi, DA Daihatsu, LE Lexus, ME Mercedes-Benz, BM BMW, AD Audi, VW Volkswagen, MN MINI, PO Porsche, VO Volvo. The `makers` action returns all 119 with their Japanese names and live stock counts. Measured bite: TO = 118 750 cars nationwide, 7 866 in Osaka.
- `model` (array, optional) — One or more of the source's own model codes (`TO_S122` = Toyota Prius). Several models are a genuine OR: measured, Prius (9 196) plus Crown came back as 10 619. Call `makers` with a `maker` for that maker's model table with live counts. Up to 12 per call.
- `price_min` (integer, optional) — Vehicle body price floor in whole yen. Measured bite: 11 002 → 4 607 and 29 908 → 14 298 at 2 000 000.
- `price_max` (integer, optional) — Vehicle body price ceiling in whole JAPANESE YEN (1 000 000 = 100万円 ≈ a mid-range used car). Measured bite: 11 002 → 2 832 and 29 908 → 8 125 at 1 000 000. Note the site itself prints every price in 万円 (ten-thousand yen) units; this parameter and every returned `*_jpy` field are plain yen.
- `year_from` (integer, optional) — Earliest first-registration year (the source's 年式). Its own dropdown runs 1989-2027. Measured bite: 11 002 → 3 918 and 29 908 → 15 107 at 2020.
- `year_to` (integer, optional) — Latest first-registration year. Measured bite: 11 002 → 640 and 29 908 → 2 756 at 2010.
- `mileage_min` (integer, optional) — Odometer floor in kilometres. Measured bite: 11 002 → 2 318 and 29 908 → 3 516 at 100 000.
- `mileage_max` (integer, optional) — Odometer ceiling in KILOMETRES (50 000, not 5 — the site's own dropdown is labelled 5万Km and sends 50000). Measured bite: 11 002 → 4 450 and 29 908 → 17 716.
- `engine_cc_from` (integer, optional) — Engine displacement floor in cc (the source's own steps are 550, 660, 800, then every 100 to 3000, then 3500-6000). Measured bite: 11 002 → 2 427 and 29 908 → 12 271 at 2000.
- `engine_cc_to` (integer, optional) — Engine displacement ceiling in cc. Measured bite: 11 002 → 1 (a hybrid Prius is 1800 cc, so one car matching is the honest answer) and 29 908 → 10 383 at 1000.
- `body_type` (enum, optional) — Body style, using the source's own codes, each with the live count measured 2026-10-02. Measured bite: SUV 11 002 → 630 and 29 908 → 6 175. 🔴 Two notes against us. A code the source does not know answers HTTP 404 upstream, so values are validated here. And the site's own search panel offers an eleventh option, コンパクトカー (compact car, `XX`) which its own backend rejects with a 404 on both the query and the path form — so it is deliberately NOT offered here. Most compact cars land under Hatchback. [one of: D, X, M, S, T, W, C, O, N, P]
- `fuel` (enum, optional) — Fuel / powertrain. Measured bite: hybrid 11 002 → 10 347 (a Prius-keyword control, so nearly all of them are hybrids — the honest result) and 29 908 → 8 118. [one of: 1, 2, 3, 4, 9]
- `drive` (enum, optional) — Two- or four-wheel drive, using the source's own tokens. Measured bite: 4WD 11 002 → 952 and 29 908 → 4 837. [one of: 4WD0, 4WD1]
- `transmission` (enum, optional) — Gearbox. Measured bite: MT 11 002 → 91 and 29 908 → 1 917 — manuals are genuinely rare in the Japanese used market. [one of: AT, MT]
- `steering` (enum, optional) — Which side the wheel is on. Japan drives on the left so RHD is the default; measured bite for LHD: 11 002 → 12 and 29 908 → 786. [one of: R, L]
- `vehicle_class` (enum, optional) — The source's own vehicle-class shelf. Measured bite: kei 11 002 → 1 464 and 29 908 → 9 112; imported 11 002 → 10 and 29 908 → 5 162. One value only — the source ANDs multiple values, and no car is both kei and imported (measured 0 rows). [one of: D, Y, K, H, F, S, C]
- `warranty` (enum, optional) — Require a warranty, optionally of a particular kind. Measured bite for manufacturer-dealer warranty: 11 002 → 2 231 and 29 908 → 7 040. [one of: 1, 4, 2, 3]
- `inspection_months_min` (enum, optional) — Minimum remaining Japanese roadworthiness certificate (車検 / shaken), which a buyer otherwise has to pay to renew. Measured bite at 2 years: 11 002 → 179 and 29 908 → 2 599. [one of: 6, 12, 24]
- `seats` (integer, optional) — Exact seating capacity, 2-10 (the source's own dropdown). Measured bite at 7: 11 002 → 199 and 29 908 → 3 412.
- `doors` (integer, optional) — Door count, 2-5. Measured bite at 5: 11 002 → 10 889 and 29 908 → 23 569.
- `equipment` (array, optional) — Condition and equipment codes, ANDed. Measured on three: no-accident-history alone 10 254, plus one-owner 2 006, plus sunroof 168. 🔴 A code the source does not know is rejected here because upstream it is SWALLOWED with HTTP 200 and an unchanged total, i.e. it would look applied and not be. Up to 8 per call. [one of: 15W1, 3SH1, ABS1, ACC1, AHB1, AHR1, AIH1, AIS1, ALH1, APA1, APS1, ARC1, ARJ1, ARS1, ARU1, BMF1, BSH1, BSM1, CLD1, CRS1, CRT1, CUP1, DAA1, DDR1, DTD1, ECO1, ESC1, ESH1, ETC1, FEF1, FFL1, FRM1, FSH1, HDC1, HID1, HKS1, IDL1, KRS1, LAS1, LED1, LFT1, MLT1, NSF1, OBS1, OTM1, PCS1, POW1, PRK1, PWS1, PWW1, RCT1, RCU1, REP0, RNU1, ROD1, RRF1, RSM1, SAP1, SDK1, SHA1, SHH1, SMK1, SRF1, STL1, TTK1, TUB1, WAR1, WOF1, WTR1]
- `certified_only` (boolean, optional, default false) — Only manufacturer-certified used cars (認定中古車) — the dealer-backed shelf with an inspection certificate and a factory warranty. Measured bite: 11 002 → 2 483 and 29 908 → 7 442. 🔴 There is no certified LANDING PAGE to scrape: `/usedcar/nintei/index.html` answers HTTP 200 and serves the full 519 200-car national list, so this filter is the only honest way to reach that shelf.
- `new_arrivals` (boolean, optional, default false) — Only cars the source flags as newly listed. Measured bite: 11 002 → 1 179 and 29 908 → 3 168.
- `with_photos` (boolean, optional, default false) — Only listings with more than one photo. Measured bite: 11 002 → 10 868 and 29 908 → 29 622 — nearly everything has photos, so this mostly removes stubs.
- `total_price_shown` (boolean, optional, default false) — Only listings that publish a total payable (支払総額) and not just a body price. Measured bite: 11 002 → 10 974 and 29 908 → 29 337.
- `maker_dealer_only` (boolean, optional, default false) — Only franchised manufacturer dealers, excluding independent lots. Measured bite: 11 002 → 2 363 and 29 908 → 7 621.
- `quality_report` (boolean, optional, default false) — Only cars with a third-party vehicle condition report (車両品質評価書). Measured bite: 11 002 → 4 190 and 29 908 → 11 151.
- `unregistered` (boolean, optional, default false) — Only never-registered cars — Japan's 未登録車 / 登録済未使用車 class, effectively new. Measured bite: 11 002 → 14 and 29 908 → 218.
- `online_consultation` (boolean, optional, default false) — Only dealers offering a remote video consultation. Measured bite: 11 002 → 4 689 and 29 908 → 12 489.
- `with_360_view` (boolean, optional, default false) — Only listings with a 360-degree interior/exterior view. Measured bite: 11 002 → 4 120 and 29 908 → 12 447.
- `carsensor_warranty` (boolean, optional, default false) — Only cars eligible for CarSensor's own after-sales warranty product. Measured bite: 11 002 → 4 446 and 29 908 → 10 909.
- `exclude_kei` (boolean, optional, default false) — Drop kei cars (the 660 cc class). 🔴 Measured on TWO controls because one gives the wrong verdict: on a Prius keyword it changed nothing (11 002 → 11 002) since no Prius is a kei car, but on a prefecture control it bit hard (29 908 → 20 796). It works.
- `exclude_van` (boolean, optional, default false) — Drop commercial vans and panel vans.
- `sort` (enum, optional) — Row order. Omit for the source's own default, which is REPRODUCIBLE — two consecutive sort-less calls returned the same first five ids in the same order. All five values tried reordered the result. 🔴 Note the site sorts on total payable and on body price SEPARATELY, and they are different numbers (fees sit between them). A value the source does not know answers HTTP 404 upstream, so it is validated here. [one of: newest, oldest, total_price_asc, total_price_desc, body_price_asc, body_price_desc, year_desc, year_asc, mileage_desc, mileage_asc, engine_cc_desc, engine_cc_asc, inspection_first, no_inspection_first, no_repair_history_first, repair_history_first]
- `page` (integer, optional, default 1) — 1-based page number. Page size is fixed by the source at 30 (measured on pages 1, 2, 100 and 1000; the final page of a set returns the remainder). 🔴 The source does NOT error past the end — pages 17308 and 20000 of a 17 307-page set both returned page 17307's rows, byte for byte. So `last_page` is computed from the source's own total, `page_clamped` tells you when the source silently repeated the last page, and `has_more` is false on the last page so a paging loop never walks into it.

**Returns:** total_results (the source's own live counter), page, page_size (30), returned, last_page, page_clamped (true when the page asked for is past the end and the source repeated the last page), has_more, dropped_non_listing_tiles, query, geography, filters (the query string actually sent to the source), sort, and listings[] with listing_id (the CarSensor BKKN id), url, photo_key (the SECOND id the source uses in image paths — a different string from listing_id), maker, title (model, grade and the dealer's own highlight line), new_arrival, tags[] (the source's own badges: dealer warranty, quality report, purchase plan, online consultation, 360-degree images), price_total_jpy and price_total_display (支払総額 — total payable including tax, registration and fees), price_total_is_rounded (true: the source publishes this one only to 1 000-yen resolution), price_body_jpy and price_body_display (本体価格 — the vehicle alone), price_currency (JPY), price_kind (total_and_body | body_only | total_only | on_application | not_priced — `on_application` is the source's own 応談 answer, not a parse failure), year, mileage_km (converted from the source's 万km, so 1.7万km is returned as 17000) and mileage_display (the source's own string, so the scale is checkable), inspection_until (remaining shaken), repair_history, warranty, maintenance, location (prefecture and city), card_specs[] (every label/value pair the card prints, verbatim), images[], image, image_count, and dealer{shop_code, name, address, image}.

**Example request body:**
```json
{
  "query": "prius",
  "max_results": 20
}
```

### POST https://api.reefapi.com/carsensor/v1/listing — 3 credits
Full detail of one car by id or URL: the complete spec sheet as the source's own tables print it (body style, colour, gearbox, displacement, engine type, seats, doors, drivetrain, steering side, chassis-number tail, plus the new-car dimensions, wheelbase, kerb weight and fuel grade), Japan's own condition fields (修復歴 accident-repair history, 車検 inspection expiry, 法定整備 statutory servicing, リサイクル料 recycling fee, one-owner, service-record book, non-smoker), the full photo set for THAT car, the dealer's own pitch line, the optional purchase plans each with their own total payable and fees, and the selling dealer with its resolvable dealer page. 🔴 Three independent price witnesses are returned, not one: the printed 万円 figure, the exact yen the page carries as an HTML attribute, and the yen in the page's own structured data — plus `price_body_witnesses_agree`, so a silent scale error is visible instead of invisible. A withdrawn or non-existent listing returns NOT_FOUND: the source answers 404 on a page that says 掲載終了 ("listing ended"), which is an answer about the car, so it is never retried.

**Parameters:**
- `listing_id` (string, optional) — The CarSensor listing id (`BKKN`) — two capital letters and ten digits, returned by `search` on every row. Give this or `url`. 🔴 A listing also carries a second, DIFFERENT id used in its image paths (`UT0054285157`); that one is returned as `photo_key` and is not accepted here.
- `url` (string, optional) — Full listing URL exactly as `search` returns it; the id is read from its `/usedcar/detail/<id>/` segment.

**Returns:** listing_id, photo_key, url, title, maker, model, grade_code, colour, dealer_pitch, price_currency, price_body_jpy, price_body_display, price_body_jpy_attr, price_body_jpy_ldjson, price_body_witnesses_agree, price_total_jpy, price_total_display, price_total_is_rounded, price_fees_jpy, price_fees_display, price_total_matches_body_plus_fees, purchase_plans[] (plan_slot, plan_name, and that plan's own total / fees / body price in yen and as printed), year, year_display (the source prints the Japanese era too, e.g. 2011(H23)), mileage_km, mileage_display, repair_history, inspection_until, statutory_maintenance, warranty, recycling_fee, one_owner, service_book, non_smoker, body_type, drive, colour_detail, steering, transmission, engine_cc, engine_cc_display, engine_kind, seats, doors, chassis_number_tail, specs[] (every label/value pair of every spec table, verbatim, so nothing the source adds is lost), equipment[], images[] (scoped to this car's own photo key — the page also carries other cars' photos in its recommendation rail and those are excluded), image, image_count, dealer{name, shop_id, prefecture, page_url, stocklist_url} and breadcrumb[] (the source's own maker → model → prefecture → city trail, which is where city codes come from).

**Example request body:**
```json
{
  "url": "https://www.carsensor.net/usedcar/detail/AU7364522703/index.html"
}
```

### POST https://api.reefapi.com/carsensor/v1/dealer — 2 credits
One used-car dealer's profile page: trading name, registered company name, postal address, enquiry line, opening hours and closing days, and the review scores the source publishes, plus every label/value row of its own profile tables. With `include_stock` it also returns that dealer's whole advertised stock in the same row shape `search` uses. 🔴 `shop_id` and `prefecture` are required TOGETHER: the source keys the page on the pair and a real dealer id requested under the wrong prefecture answers 404 (measured). `listing` returns both for every car, and `dealer.page_url` can be passed as `url` instead. An unknown id answers 404 → NOT_FOUND.

**Parameters:**
- `shop_id` (string, optional) — The dealer's numeric CarSensor id, returned by `listing` as `dealer.shop_id`. 🔴 Must be given together with `prefecture`: the source keys the dealer page on the pair and a real id under the wrong prefecture answers 404 (measured on an Osaka dealer requested under tokyo).
- `prefecture` (enum, optional) — The prefecture the dealer sits in, as `listing` returns it in `dealer.prefecture`. Required together with `shop_id`. [one of: aichi, akita, aomori, chiba, ehime, fukui, fukuoka, fukushima, gifu, gunma, hiroshima, hokkaido, hyogo, ibaraki, ishikawa, iwate, kagawa, kagoshima, kanagawa, kouchi, kumamoto, kyoto, mie, miyagi, miyazaki, nagano, nagasaki, nara, niigata, okayama, okinawa, ooita, osaka, saga, saitama, shiga, shimane, shizuoka, tochigi, tokushima, tokyo, tottori, toyama, wakayama, yamagata, yamaguchi, yamanashi]
- `url` (string, optional) — Full dealer page URL as `listing` returns it in `dealer.page_url`. Use instead of `shop_id` + `prefecture`.
- `include_stock` (boolean, optional, default false) — Also fetch the dealer's own stock list — every car that dealer currently advertises, in the same row shape `search` returns. Costs one extra upstream request (measured 208 KB for a seven-car dealer) and returns the first 30 cars plus the dealer's own total.

**Returns:** shop_id, prefecture, url, stocklist_url, name, address, postal_code, legal_name, address, enquiry_phone (🔴 CarSensor's own free-dial tracking number that forwards to the dealer, NOT the dealer's direct line — it is the only number the page publishes, and enquiry_phone_is_tracking_line says so), opening_hours, closed_on, nearest_station, tagline, badges[], review_score_avg and review_count_on_page (the source publishes no aggregate score on this page, so the average is computed from the review scores it does print and the sample size is published beside it), profile[] (every label/value row of the dealer's own tables) and, with include_stock, stock_total plus stock[] with listing_id (the CarSensor BKKN id), url, photo_key (the SECOND id the source uses in image paths — a different string from listing_id), maker, title (model, grade and the dealer's own highlight line), new_arrival, tags[] (the source's own badges: dealer warranty, quality report, purchase plan, online consultation, 360-degree images), price_total_jpy and price_total_display (支払総額 — total payable including tax, registration and fees), price_total_is_rounded (true: the source publishes this one only to 1 000-yen resolution), price_body_jpy and price_body_display (本体価格 — the vehicle alone), price_currency (JPY), price_kind (total_and_body | body_only | total_only | on_application | not_priced — `on_application` is the source's own 応談 answer, not a parse failure), year, mileage_km (converted from the source's 万km, so 1.7万km is returned as 17000) and mileage_display (the source's own string, so the scale is checkable), inspection_until (remaining shaken), repair_history, warranty, maintenance, location (prefecture and city), card_specs[] (every label/value pair the card prints, verbatim), images[], image, image_count, and dealer{shop_code, name, address, image}.

**Example request body:**
```json
{
  "url": "https://www.carsensor.net/shop/osaka/100644033/"
}
```

### POST https://api.reefapi.com/carsensor/v1/makers — 1 credit
The maker resolver `search` needs, because its `maker` parameter takes a code. Returns every one of the 119 two-letter maker codes CarSensor publishes, with the maker's Japanese name, the country group the source files it under (Japan, Germany, USA, UK, Sweden, France, Italy, Spain, Russia, China, Korea, Thailand, Malaysia, South Africa, other) and the number of cars it has listed right now — so a brand can be sized before it is searched. Measured 2026-10-02: Toyota 118 750, Honda 74 460, Nissan 55 726, Mazda 20 136, Mercedes-Benz 9 598, Lexus 8 599. One request, 77 880 B, cached six hours. Use the `models` action for one maker's model table.

**Parameters:** none

**Returns:** level (always "makers"), count, and makers[] with maker_code, name, live_listings, country_group and search_url.

### POST https://api.reefapi.com/carsensor/v1/models — 3 credits
One maker's model table — the resolver for `search`'s `model` parameter. Each row carries the `model_code` that parameter takes, the model's Japanese name and the live count the source prints beside it. 🔴 `live_listings` comes back null, never 0, for the models the source lists without a count: it publishes the maker's whole model history including cars nobody is selling today (measured 86 Mazda models, of which 55 carry a count; 235 rows for Toyota). Much heavier than `makers` — measured 1 655 747 B for Toyota and 692 682 B for Mazda against 77 880 B for the entire maker table — which is why it is a separate action rather than a parameter. Cached six hours.

**Parameters:**
- `maker` (string, required) — The two-letter maker code whose models you want, from the `makers` action (119 codes). TO Toyota, NI Nissan, HO Honda, MA Mazda, SB Subaru, SZ Suzuki, MI Mitsubishi, DA Daihatsu, LE Lexus, ME Mercedes-Benz, BM BMW, AD Audi, VW Volkswagen, MN MINI, PO Porsche.

**Returns:** level (always "models"), maker, count, and models[] with model_code, name, live_listings (null where the source printed none) and search_url.

**Example request body:**
```json
{
  "maker": "TO"
}
```

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