# CarDekho — Indian used-car listings, full listing detail, seller stock and filters

> Search CarDekho's live Indian used-car stock — 62,595 listings nationally and 7,001 in New Delhi on 2026-10-01, the same numbers the site prints in its own page title in the same minute — across 677 city surfaces. Every row carries the listing id, the canonical URL, the asking price in rupees WITH the source's own ₹-lakh string beside it, the odometer, year, variant, fuel, gearbox, body type, ownership count, the city and locality, the seller kind and store/dealer id, the photo count and lead image, CarDekho's own AI price verdict, and its EMI estimate kept separate from the price. `total_available` is CarDekho's own count for your exact query, so you can see what each filter did. 🔴 Measured limits you should plan around: one upstream page is 20 rows and no page-size parameter works, so `max_results` above 20 costs one request per extra 20; the default relevance ORDER ROTATES between identical calls (three identical calls shared 11/20 then 19/20 rows), so treat a page as a sample, not a cursor — paging itself does not overlap (80 rows, 80 unique ids over four pages); and CarDekho offers NO working sort, so none is exposed. At most two of `model`, `body_type`, `transmission`, `owner`, `seats`, `premium_seller`, `badge` may be combined, because a third makes the source silently drop all of them — ask for three and you get INVALID_PARAM naming them, not a wrong answer. Every filter the source does not echo back is reported in `meta.warnings`. A genuinely empty result is `ok:true` with 0 rows, never an error.
> ReefAPI engine `cardekho` · 5 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/cardekho/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/cardekho/v1/search — 3 credits
Search CarDekho's live Indian used-car stock — 62,595 listings nationally and 7,001 in New Delhi on 2026-10-01, the same numbers the site prints in its own page title in the same minute — across 677 city surfaces. Every row carries the listing id, the canonical URL, the asking price in rupees WITH the source's own ₹-lakh string beside it, the odometer, year, variant, fuel, gearbox, body type, ownership count, the city and locality, the seller kind and store/dealer id, the photo count and lead image, CarDekho's own AI price verdict, and its EMI estimate kept separate from the price. `total_available` is CarDekho's own count for your exact query, so you can see what each filter did. 🔴 Measured limits you should plan around: one upstream page is 20 rows and no page-size parameter works, so `max_results` above 20 costs one request per extra 20; the default relevance ORDER ROTATES between identical calls (three identical calls shared 11/20 then 19/20 rows), so treat a page as a sample, not a cursor — paging itself does not overlap (80 rows, 80 unique ids over four pages); and CarDekho offers NO working sort, so none is exposed. At most two of `model`, `body_type`, `transmission`, `owner`, `seats`, `premium_seller`, `badge` may be combined, because a third makes the source silently drop all of them — ask for three and you get INVALID_PARAM naming them, not a wrong answer. Every filter the source does not echo back is reported in `meta.warnings`. A genuinely empty result is `ok:true` with 0 rows, never an error.

**Parameters:**
- `city` (string, optional, default "india") — CarDekho city slug, exactly as the site spells it in its own URLs: `new-delhi`, `mumbai`, `bangalore`, `delhi-ncr`, `gautam-buddha-nagar`. `india` (the default) searches the whole country. Call the `cities` action for the site's complete index. Measured in one run: india 62,595, new-delhi 7,001, mumbai 4,887. 🔴 An unknown slug is NOT an error upstream — CarDekho answers HTTP 200 with the national list — so this engine detects that silent fallback and returns INVALID_PARAM instead.
- `make` (string, optional) — Brand slug as CarDekho spells it (`maruti`, `hyundai`, `tata`, `mahindra`, `honda`, `toyota`, `kia`, `bmw`, `mercedes-benz`). Sent as the query form that was measured to bite. Measured in New Delhi: `maruti` → 1,364 of 7,001, `hyundai` → 1,114. `filters` with `facet=brand` returns every brand with its live count and its models underneath.
- `model` (string, optional) — Model slug, which CarDekho writes brand-first: `hyundai-i20`, `maruti-swift`, `maruti-baleno`, `tata-nexon`. Measured: `hyundai-i20` in New Delhi → 167, and with `transmission=automatic` → 31. 🔴 This is one of the SEVEN path-form filters: at most two of {model, body_type, transmission, owner, seats, premium_seller, badge} may be combined in one call, because a third makes CarDekho drop all of them (measured).
- `body_type` (enum, optional) — Body style. Measured in New Delhi: SUV 3,205, hatchback 1,805, sedan 1,484, MUV 423, coupe 32 — each exactly the count CarDekho's own facet prints. 🔴 A path-form filter (see `model`). [one of: suv, hatchback, sedan, muv, coupe, minivan, convertible, pickup, wagon]
- `fuel_type` (enum, optional) — Fuel. Measured in New Delhi: petrol 5,161, diesel 1,311, CNG 430, electric 98, LPG 1 — and 5,161+1,311+430+98+1 = 7,001, exactly the unfiltered total, so the buckets are complete and disjoint. [one of: petrol, diesel, cng, electric, lpg]
- `transmission` (enum, optional) — Gearbox. Measured in New Delhi: manual 4,033 + automatic 2,968 = 7,001, the unfiltered total exactly. 🔴 A path-form filter (see `model`). [one of: manual, automatic]
- `owner` (enum, optional) — How many previous owners the car has had. Measured in New Delhi: first 5,577, second 1,205, third-or-more 184, unregistered 35 = 7,001. 🔴 A path-form filter (see `model`). [one of: first-owner, second-owner, third-owner-or-more, unregistered]
- `seller_type` (enum, optional) — Who is selling. Measured in New Delhi in one run: partner 3,606 + enterprise 1,513 + direct-owner 1,882 = 7,001, exactly the unfiltered total, so dealer and private stock together account for everything and nothing is double-counted. `direct-owner` is the private-seller surface. [one of: partner, enterprise, direct-owner]
- `premium_seller` (enum, optional) — Restrict to one of the branded resellers CarDekho lists separately. Measured in New Delhi: Cars24 1,093, Spinny 420. 🔴 A path-form filter (see `model`). [one of: c24, spinny]
- `badge` (enum, optional) — One of CarDekho's own curated shelves. Measured in New Delhi: certified 466, luxury 1,306. 🔴 A path-form filter (see `model`). [one of: certified, luxury]
- `seats` (enum, optional) — Seating capacity. Measured in New Delhi: 5-seater 5,686, 7-seater 921, 4-seater 199, 6-seater 149, 8-seater 24, 2-seater 10. 🔴 A path-form filter (see `model`). [one of: 2-seater, 4-seater, 5-seater, 6-seater, 7-seater, 8-seater]
- `colour` (enum, optional) — Exterior colour. Measured in New Delhi: white 1,915, grey 827, silver 712, black 700, blue 481, red 322. [one of: white, grey, silver, black, blue, red, brown, green, orange, yellow, maroon, purple, gold]
- `rto_state` (string, optional) — Two-letter Indian state code of the car's RTO registration, as CarDekho writes it: `dl`, `hr`, `up`, `mh`, `ka`, `tn`, `gj`, `pb`. Measured in New Delhi: dl 4,505, hr 1,335, up 811, ch 104. `filters` with `facet=rto` returns the states present in a city with live counts.
- `price_min_lakh` (number, optional) — Lowest asking price in LAKH of rupees (1 lakh = ₹100,000). Sent as the source's own band grammar. Measured in New Delhi: 3–5 lakh → 1,476 (exactly the count the site's own band prints), 4–7 → 1,849, 6–9 → 1,198. Arbitrary bounds work, not only the site's published bands — that was measured.
- `price_max_lakh` (number, optional) — Highest asking price in LAKH of rupees. Omit for no upper bound (the source's own ceiling of 500 lakh = ₹5 crore is used).
- `km_min` (integer, optional) — Lowest odometer reading in kilometres. Measured in New Delhi: 10,000–45,000 → 2,519; 0–45,000 → 2,853; 0–20,000 → 1,023.
- `km_max` (integer, optional) — Highest odometer reading in kilometres. Omit for no upper bound (the source's own slider ceiling of 200,000 km is used).
- `year_min` (integer, optional) — Earliest manufacturing year. Sent as the source's own age band. Measured in New Delhi: 2023–2026 → 1,948 (the site's own "less than 3 years old" count), 2019–2022 → 2,634, 2021–2026 → 3,476. The source's own slider spans 2002–2026.
- `year_max` (integer, optional) — Latest manufacturing year. Omit for no upper bound (the source's own ceiling of 2026 is used).
- `price_drop` (enum, optional) — Only cars whose asking price CarDekho has cut. Measured in New Delhi: any drop 409, up to ₹20,000 106, up to ₹50,000 258, up to ₹1,00,000 339, above ₹1,00,000 70. [one of: discount-upto-20000, discount-upto-50000, discount-upto-100000, discount-above-100000, discount-all]
- `max_results` (integer, optional, default 20) — How many listings to return, 1–100. 🔴 CarDekho serves exactly 20 rows per page and ignores every page-size parameter probed (`size`, `pageSize`, `from`), so each extra 20 rows is one more upstream request; `meta.extra.upstream_requests` reports how many were spent.
- `page` (integer, optional, default 1) — 1-based page of 20 to start from. Measured: pages 1–4 of the national surface returned 80 rows and 80 unique ids, overlap 0. Paging past the last page the source's own total allows is refused here rather than returning the filler rows CarDekho answers with (measured on page 3200 of 3130).

**Returns:** {results[], total_available, returned, page, page_rows, pages_available, city, applied_filters[], order_is_stable, currency} — each result: listing_id, listing_number, url, title, make, model, model_name, variant, year, price_inr, price_display, msp_inr, price_saving, km_driven, km_text, fuel_type, transmission, body_type, owner_number, owner_text, city, city_id, locality, seller{kind, inventory_type, store_id, dealer_id, name, map_link}, image, image_count, is_certified, is_promoted, has_360_view, price_verdict, price_notes[], trust_tags[], emi{monthly_inr, interest_rate_pct, months}.

**Example request body:**
```json
{
  "city": "new-delhi",
  "max_results": 20
}
```

### POST https://api.reefapi.com/cardekho/v1/detail — 3 credits
One used-car listing in full, from CarDekho's own listing page state: the asking price in rupees, the overview table as the site groups it (registration year, insurance, seats, kms, RTO, ownership, engine displacement, transmission, year of manufacture), the complete manufacturer spec tree in the source's own four groups (engine & transmission, fuel & performance, suspension/steering/brakes, dimensions & capacity), the feature tree in its five groups, the whole photo gallery, CarDekho's own written summary and price verdict, its reasons-to-buy badges, the store's address and coordinates, and the published WhatsApp route. 🔴 Three further prices are returned under their own names and never as the asking price: the equivalent NEW model's on-road price (measured 2.2× the used price on the same page), the new model's floor price, and CarDekho's average for similar cars. 🔴 A dead id is a soft-404 upstream — HTTP 200 after a redirect to the index — so this action verifies the id came back and returns NOT_FOUND when it did not. CarDekho publishes no VIN and no registration number on this surface; those fields are null, not invented.

**Parameters:**
- `listing_id` (string, required) — The listing's `listing_id` from `search` — CarDekho's own `usedCarSkuId`, a UUID. The slug in the site's URL is decoration: a wrong slug with the right UUID returns the same car (measured). A full detail URL is accepted too; the UUID is taken out of it.

**Returns:** One listing object: every search field plus overview[], specs[] (grouped label/value), features[] (grouped), images[], image_count, summary, price_verdict, price_notes[], reasons_to_buy[], registration_year, insurance, rto_code, new_model_on_road_price_inr, new_model_price_from_inr, similar_cars_average_price_inr, seller{store_id, dealer_id, locality, address, latitude, longitude, whatsapp_url, kind, inventory_type}, is_inactive, is_booked.

**Example request body:**
```json
{
  "listing_id": "1cd8c03c-1082-4a89-9819-59326e1fb2b3"
}
```

### POST https://api.reefapi.com/cardekho/v1/dealer_stock — 3 credits
Every used car one CarDekho seller currently lists, by the `store_id` that `search` and `detail` return. Measured: one New Delhi store → 27 cars out of the city's 7,001, with the same row shape as `search`, PLUS the seller's own trading name, street address, pincode and coordinates, which CarDekho publishes on this surface and nowhere else. 🔴 CarDekho swallows an unknown store id and answers with the whole city instead, so this action refuses a result whose total equals the unfiltered city total and returns NOT_FOUND — you will never be handed a city's worth of cars as if they were one seller's.

**Parameters:**
- `dealer_id` (string, required) — A seller's `seller.store_id` from `search` or `detail` — CarDekho's own 32-character store id. Measured: one store → 27 cars of the city's 7,001. 🔴 An unknown id is swallowed upstream (it returns the whole city), so this action refuses that answer and returns NOT_FOUND.
- `city` (string, optional, default "india") — CarDekho city slug, exactly as the site spells it in its own URLs: `new-delhi`, `mumbai`, `bangalore`, `delhi-ncr`, `gautam-buddha-nagar`. `india` (the default) searches the whole country. Call the `cities` action for the site's complete index. Measured in one run: india 62,595, new-delhi 7,001, mumbai 4,887. 🔴 An unknown slug is NOT an error upstream — CarDekho answers HTTP 200 with the national list — so this engine detects that silent fallback and returns INVALID_PARAM instead.
- `max_results` (integer, optional, default 20) — How many listings to return, 1–100. 🔴 CarDekho serves exactly 20 rows per page and ignores every page-size parameter probed (`size`, `pageSize`, `from`), so each extra 20 rows is one more upstream request; `meta.extra.upstream_requests` reports how many were spent.
- `page` (integer, optional, default 1) — 1-based page of 20 to start from. Measured: pages 1–4 of the national surface returned 80 rows and 80 unique ids, overlap 0. Paging past the last page the source's own total allows is refused here rather than returning the filler rows CarDekho answers with (measured on page 3200 of 3130).

**Returns:** {results[], total_available, returned, page, dealer_id, city, seller{store_id, name, address, pincode, latitude, longitude}} — rows identical in shape to `search`. 🔴 This is the ONE surface where CarDekho publishes the seller's TRADING NAME and street address (it ships them in its own `storeDetails` block); a search row carries only the store id.

**Example request body:**
```json
{
  "dealer_id": "D2F08B71AD004A4C82C7E5B7EC1E2529"
}
```

### POST https://api.reefapi.com/cardekho/v1/filters — 3 credits
CarDekho's live filter vocabulary for one city, straight off the search page's own state — 15 facets, every value with the number of live listings behind it, including the whole brand → model tree (`facet=brand` returned Maruti Suzuki 1,364 with Baleno 200, Swift 183, Wagon R 181 underneath in New Delhi). This is the action to call before a `search`: it tells you the exact slugs this engine's enums accept, which brands and models actually have stock in that city, and how big a result each value will give. One upstream request.

**Parameters:**
- `city` (string, optional, default "india") — CarDekho city slug, exactly as the site spells it in its own URLs: `new-delhi`, `mumbai`, `bangalore`, `delhi-ncr`, `gautam-buddha-nagar`. `india` (the default) searches the whole country. Call the `cities` action for the site's complete index. Measured in one run: india 62,595, new-delhi 7,001, mumbai 4,887. 🔴 An unknown slug is NOT an error upstream — CarDekho answers HTTP 200 with the national list — so this engine detects that silent fallback and returns INVALID_PARAM instead.
- `facet` (enum, optional) — Which filter vocabulary to return. Omit for all 15. Every value comes back with the number of live listings behind it in that city, so a query can be sized before it is run. `facet=brand` returns the whole brand → model tree. [one of: brand, bt, fuel, tt, ot, color, rto, seatingCapacity, inventoryType, premiumSellers, price, km, makeYear, discount, recommended]

**Returns:** {city, total_available, facets{<name>: {label, values:[{label, value, count, models[]}]}}, price_bands[], sort_options[]} — sort_options is what the site's own dropdown offers; none of it is accepted as a parameter, because none of it was measured to work.

**Example request body:**
```json
{
  "city": "new-delhi",
  "facet": "brand"
}
```

### POST https://api.reefapi.com/cardekho/v1/cities — 3 credits
CarDekho's own index of the cities that have a used-car surface — 677 English city slugs read from the site's own used-car city sitemap on 2026-10-01. Each entry is the slug to pass as `city` plus the canonical URL. Call this once and cache it: it is the list that keeps you out of the silent wrong door, because an unknown slug makes CarDekho answer with the national list instead of an error.

**Parameters:** none

**Returns:** {cities[{slug, url}], returned}

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