India's biggest used-car marketplace as JSON, 677 cities deep
The CarDekho API turns cardekho.com, India's largest car marketplace, into clean JSON in five actions.
5 active endpoints. Every call is 3 credits.
- POST/cardekho/v1/search
- POST/cardekho/v1/detail
- POST/cardekho/v1/dealer_stock
- POST/cardekho/v1/filters
- POST/cardekho/v1/cities
What CarDekho endpoints does ReefAPI ship?
5 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
CarDekho API
5 of 5 endpoints, ready to run
Live Indian used-car listings with id and URL, brand, model, variant and year, the asking price in rupees with CarDekho's own rupee-lakh string beside it, odometer as a number and as printed, fuel, gearbox, body type, how many owners, city and locality, the seller's kind and store ids, the photo count and lead image, CarDekho's own price verdict, and its EMI estimate in its own field.
// Press "Try it" and this pane shows exactly what the // live site returned this second — including an empty // result, if that is the truth. No key, no account.
How the CarDekho API works
CarDekho is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 438 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
From a city's market mix to one seller's forecourt
filters is the cheapest way to see what a city holds before you spend calls on rows; search is the entry point, and every row carries both the listing id and the store id the other actions need.
Every brand with a live count and its models underneath — Maruti Suzuki 1,364 with Baleno 200, Swift 183 and Wagon R 181 — in one call.
Up to 60 rows with the asking price in rupees, odometer, variant, ownership, photos and the seller's kind and store id. total_available is CarDekho's own count for that exact query, so you know whether to page.
The full record for one car: the overview table, the grouped manufacturer spec and feature trees, the gallery, CarDekho's written verdict, and the new model's on-road price in its own field.
Everything that seller is listing, plus their trading name, street address, pincode and coordinates — the same row shape, so one parser handles both.
One vocabulary call, one search, one detail and one seller call give you a city's market mix, the live asking prices for a specific car in it, the full spec behind one of them, and the whole forecourt of the seller holding it.
curl -X POST https://api.reefapi.com/cardekho/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"city":"new-delhi","max_results":20}'{
"ok": true,
"data": { … },
"meta": {
"api": "cardekho",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}The money fields, and why the biggest number on the page is not the price
A CarDekho listing page carries four different rupee figures and they do not mean the same thing, so this API never blends them. Fill rates below are over 294 distinct live listings sampled across 28 surfaces: the national list, three cities, CarDekho-partner stock, enterprise stock, direct-owner stock, a branded reseller, the certified and luxury shelves, electric and CNG cars, and every individual filter.
| Field | What it is | How often it was filled |
|---|---|---|
| price_inr | The asking price today, in rupees. CarDekho writes prices in lakh, so the integer was checked against the rupee string the source itself prints in the same row on every single row parsed: 294 matched, 0 mismatched. On detail it was checked a third time against the structured data the listing page publishes: 8 of 8 matched. A zero is returned as null, never as a price. | 294 of 294 |
| price_display | The price exactly as CarDekho printed it, for example "₹41.50 Lakh" or "₹1.20 Crore". Kept beside the integer so the scale is never a question. Of 294 rows, 292 were printed in lakh and 2 in crore. | 294 of 294 |
| new_model_on_road_price_inr | Not this car's price: the on-road price of the equivalent NEW model, which CarDekho shows for comparison. Measured across 8 listings it ran from 1.33 to 2.24 times the asking price, so it is never interchangeable with it. | 8 of 8 detail records |
| similar_cars_average_price_inr | CarDekho's own average asking price for comparable cars, which is what its price verdict is measured against. | 8 of 8 detail records |
| emi.monthly_inr | Not a price: the monthly instalment CarDekho estimates on the rate card its own pages publish, measured at 14.5 % a year over 48 months. Returned with that rate and term beside it. | 287 of 294 |
| msp_inr | CarDekho's own reference figure, which it does not explain. Measured across 60 rows it equalled the asking price on 47 and differed on 13, so it is returned under its own name and never substituted for the price. | 294 of 294 |
| km_driven / km_text | The odometer as a number, parsed from the string the source prints, with that string kept beside it ("40,056"). | 294 of 294 |
| price_saving | Only printed on cars whose asking price CarDekho has cut. The low fill rate is the source's, not a parsing gap. | 34 of 294 |
Every figure above is the source's own. Two of them — the EMI instalment and the new model's on-road price — are numbers CarDekho computes or borrows rather than the price of the car in front of you, which is exactly why they are named for what they are and kept out of the price field. A listing's seller block carries no trading name on a search row (0 of 294); CarDekho publishes the name, street address and pincode on the dealer_stock surface instead.
What CarDekho publishes, and where it stops
Measured on 2026-10-01 over two consecutive runs of the same fixed 65-case list, 100 % of the 49 live cases passing and all 16 intended negatives landing on the right error code in both. The limits below are the source's, not the API's.
India only. 62,599 live used-car listings nationally across 677 city surfaces; New Delhi 7,003, Mumbai 4,887, Bangalore 3,701
Used cars only. CarDekho's new-car catalogue and two-wheelers are not covered and are not claimed
Up to 100. The source serves exactly 20 per page and ignores every page-size parameter, so each extra 20 rows costs one more page: 20 rows in a median 1.3 s, 60 rows in 6.8 s, 100 rows in 9.7 s
None, and it is the source's limit: six ways of sending its own sort dropdown were measured and not one of them ordered the results, so no sort parameter is offered
The default relevance order rotates. Three identical calls shared 13 of 20 then 20 of 20 rows; every response says order_is_stable: false
None within a sweep. Pages 1 to 4 gave 80 rows and 80 distinct ids, and a multi-page request de-duplicates before returning
Refused honestly: the source answers successfully with filler rows there, so a page beyond the real count returns 0 rows and says how many pages exist
The source's own, not ours. Seller type, fuel and gearbox each partition the city total exactly: 3,606 + 1,514 + 1,883 = 7,003
16 single filters plus three combinations, each against the unfiltered total in the same run; 16 of them reproduced CarDekho's own facet count to the unit. Nine more that the source accepts and silently ignores were tested and left out
At most two of model, body type, gearbox, ownership, seats, branded reseller and shelf per call — the source drops all of them when given a third (measured 1,668 with two, 7,003 with three), so the third is refused
The source answers a misspelled brand, model or city with a successful unfiltered page. Every response is checked against its own list of applied filters, and a dropped filter becomes an explicit error
The asking price was checked against the rupee string the source prints in the same row on every row parsed: 294 matched, 0 mismatched, 292 printed in lakh and 2 in crore. On detail it was checked a third time against the listing page's structured data: 8 of 8
id, URL, title, brand, model, variant, year, price, price as printed, odometer, fuel, gearbox, body type, city, ownership and CarDekho's price verdict: 294 of 294. Locality and maps link 291 of 294. Lead image and photo count 293 of 294. EMI estimate 287 of 294
Store and dealer id 256 of 294 — the rest are direct-owner listings with no store. Price-drop saving 34 of 294, printed only where CarDekho cut the price. trust_tags 0 of 294: present in the response, never populated on this surface
Kind and inventory type 294 of 294, maps link 291 of 294, store ids 256 of 294. No trading name on a search row, 0 of 294 — it is published on the dealer_stock surface with the street address, pincode and coordinates
id, URL, title, price, odometer, overview table, gallery, written summary, registration year, insurance, RTO code, the new model's on-road price, the similar-cars average and the seller block 8 of 8; the grouped spec and feature trees 7 of 8 — the eighth car's model has no manufacturer spec sheet on CarDekho
VIN or chassis number, registration or plate number (only a flag and the RTO code), listed-at date or days-on-market, a view count above zero, a working sort, more than 20 rows per page, and any trading name on a search row
Two consecutive runs of 65 cases: 49 live calls across five actions and 16 intended negatives landing on the right error codes, both times. Median response 1.4 s and 1.4 s; 0 markup or entity leaks in any returned string
What people build with CarDekho
The jobs this data is most often used for.
endpoints
credits per call
Indian used-car pricing and residual-value work: pull one brand and model with a model-year and odometer band and read the asking-price distribution, then repeat per city to see how the same Hyundai i20 is priced in Delhi against Mumbai and Bangalore — 7,003, 4,887 and 3,701 live listings respectively on 2026-10-01.
Dealer versus private supply tracking: the three seller surfaces are separate measured filters and they partition the market exactly — CarDekho-partner 3,606 plus enterprise 1,514 plus direct-owner 1,883 equals the New Delhi total of 7,003 to the unit — so you can size organised retail against private supply city by city.
Organised-resale competitor monitoring: Cars24 and Spinny stock are separately filterable on CarDekho's own surface (1,093 and 420 listings in New Delhi), and dealer_stock returns one named store's entire inventory with its address and coordinates.
Market mix in one cheap call: filters returns a live listing count on every brand, model, body type, fuel, gearbox, ownership, seat count, colour, RTO state and price band in a city — SUVs 3,205 against hatchbacks 1,805 and sedans 1,484, petrol 5,161 against diesel 1,311, CNG 430 and electric 98 — with the whole brand to model tree underneath.
What CarDekho data costs
The cheapest call here is 3 credits, so $15/mo (Pro) buys 3,333 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 438 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/cardekho/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"city":"new-delhi","max_results":20}'import requests
r = requests.post(
"https://api.reefapi.com/cardekho/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"city": "new-delhi",
"max_results": 20
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up CarDekho.
Get a free key →How many listings are there, and does the count come from you or from CarDekho?▾
From CarDekho. Every search returns total_available, which is the source's own count for your exact query. On 2026-10-01 the unfiltered national figure was 62,599 and New Delhi was 7,003, both identical to the numbers cardekho.com printed in its own page title in the same minute. Three independent splits of New Delhi add up exactly: seller type (partner 3,606 plus enterprise 1,514 plus direct-owner 1,883), fuel (petrol 5,161 plus diesel 1,311 plus CNG 430 plus electric 98 plus LPG 1) and gearbox (manual 4,033 plus automatic 2,968) each equal the unfiltered total to the unit.
How many rows can one call return, and how fast?▾
Up to 100, and this is the honest part: CarDekho serves exactly 20 rows per page and ignores every page-size parameter, so a bigger request costs one more upstream page per extra 20 rows. Measured: 20 rows in a median 1.3 seconds, 60 rows in 6.8 seconds over 4 pages, 100 rows in 9.7 seconds over 6 pages. The response reports how many pages it spent. 100 is the deliberate ceiling — 200 rows measured 18 seconds, which is too slow to offer.
Can I sort the results?▾
No, and that is a limitation of the source rather than a gap in this API. CarDekho's website shows a seven-option sort dropdown, but six different ways of sending it were measured and none of them actually ordered the results — the list came back in the same unsorted order with the unfiltered count intact. A handle that silently does nothing is worse than no handle, so no sort parameter exists. The dropdown's own options are returned by the filters action, marked as unsupported, so you can see exactly what was tested.
If I call the same search twice, do I get the same rows?▾
Not exactly, and you should know this before you build a cursor on it. CarDekho's default relevance order rotates: three identical calls one minute apart shared 13 of 20 rows with the first on one run and 20 of 20 on the next, and the three runs together returned 27 distinct cars out of 60 rows. Every response therefore carries order_is_stable: false. Paging within one sweep is clean, though — pages 1 to 4 returned 80 rows and 80 distinct listing ids — and a multi-page request de-duplicates by listing id before returning, so a 60-row request gives 60 different cars.
Do the filters actually narrow the result, or are some of them decoration?▾
Every filter in this API was measured against the unfiltered total in the same run, and only the ones that moved it are exposed. Measured in New Delhi against 7,003: brand Hyundai 1,115, model Hyundai i20 167, SUV 3,206, diesel 1,312, automatic 2,968, first owner 5,579, five seats 5,687, white 1,915, Delhi RTO 4,506, Cars24 1,094, certified 466, luxury 1,306, 3 to 5 lakh 1,477, 10,000 to 45,000 km 2,520, 2023 to 2026 1,949, a price drop up to 50,000 rupees 248. Sixteen of those reproduced CarDekho's own published facet count to the unit. Nine more parameters that CarDekho accepts with a 200 and then ignores were tested and left out, because a filter that does not bite is worse than no filter at all.
Why can I only combine two of some filters?▾
Because of a real limit in the source that is worth saying out loud. Seven of the filters — model, body type, gearbox, ownership, seats, branded reseller and the certified or luxury shelf — only work on CarDekho when they are part of the page address, and it accepts at most two of them at a time. Measured: two together returned 1,668 results and the source confirmed both; adding a third returned the full unfiltered 7,003 with no filter applied at all. Rather than hand back that wrong answer, the API refuses the third and names the ones you asked for, so you can drop one or run a second call. The other nine filters stack freely — price, year and odometer together were measured working as one query.
What happens if my filter value is misspelled or does not exist?▾
You get an error, not a wrong answer — which takes work, because CarDekho does not reject a value it does not recognise. An unknown brand or model returns a successful page with the whole city's stock in it. Every response is checked against the source's own list of the filters it actually applied, and a filter that was quietly dropped becomes an explicit invalid-parameter error naming it. The same applies to cities: an unknown city slug makes CarDekho answer with the national list, so this API compares the city the page says it is showing with the city you asked for and rejects the mismatch. Call cities for the 677 slugs it serves.
What happens if nothing matches my filters?▾
You get a successful response with an empty results array and the source's own total of 0. An LPG SUV in New Delhi was tested for exactly this and CarDekho's own count agreed. The opposite case is also handled: if CarDekho reports listings and none of them can be read, you get an explicit schema error rather than a quiet empty success.
Does a listing id from search always resolve to the same car in detail?▾
Yes, measured 8 of 8 in both acceptance runs, and this is checked rather than assumed, because a dead listing on CarDekho answers successfully with its index page instead of a not-found. The API verifies the id came back in the record and returns a clean not-found when it did not, so you never receive the index page dressed up as a car.
Is the seller included, and does it include a name or a phone number?▾
Partly, and here is exactly where the source stops. Every search row carries the seller's kind — dealer or individual — and the inventory type, 294 of 294, with a maps link on 291 of 294 and CarDekho's store and dealer ids on 256 of 294 (the rest are direct-owner listings, which have no store). What a search row does not carry is a trading name: 0 of 294. The name arrives on the dealer_stock surface, where CarDekho publishes its own store block with the trading name, full street address, pincode and coordinates — pass the store id from a search row. A detail record adds the store's address, coordinates and the published WhatsApp route. A private seller publishes no personal name and no personal phone number anywhere, and none is invented.
What does CarDekho not publish?▾
No VIN or chassis number, and no registration or plate number — the detail record publishes only whether a registration number exists and the RTO code such as DL10. No listed-at date or days-on-market figure, and the view counter reads zero on every row. No two-wheelers: CarDekho's car site does not list them and this API does not claim them. And no new-car catalogue: this API covers the used-car marketplace only. One field, trust_tags, is present in the response but was an empty list on all 294 sampled rows, which is documented rather than hidden.
Does detail always include the full manufacturer spec sheet?▾
Almost always, and the exception is the source's. Over 8 detail records the overview table, photo gallery, written summary, registration year, insurance status, RTO code and seller block were filled 8 of 8, and the grouped spec tree and feature tree 7 of 8. The eighth car's model has no manufacturer spec sheet on CarDekho at all, so those two arrive as empty lists rather than as invented values.
What is the CarDekho API?▾
CarDekho API is a ReefAPI endpoint group for india's largest used-car marketplace: 62,599 live listings across 677 cities, with the asking price in rupees, odometer, variant, ownership count, the full manufacturer spec tree, and dealer, cardekho-partner and direct-owner stock as separate measured surfaces. It returns live JSON through POST requests under /cardekho/v1.
Is the CarDekho API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. CarDekho calls use the same shared credit balance as every other ReefAPI engine.
99 Classifieds & Second-hand APIs on the same key
One key, one credit pool, one response envelope. If you are pulling CarDekho, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 437 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-10-01.