Cars24 API & Scraper
The Cars24 API turns cars24.com, India's largest used-car recommerce platform, into clean JSON in eight actions.
🤖 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.
Cars24 is two marketplaces in one and this API keeps them apart: 6,746 cars are Cars24's own refurbished stock sold from its hubs, and 23,424 are owner-direct listings Cars24 badges Verified Direct Seller — 30,170 cars in total on 2026-10-02, across 184 cities. search narrows that catalogue by city, make across 32 brands, model, seller kind, fuel, body type, transmission and the exact gearbox technology, colour, seat count, owner count, sixteen equipment flags, price band in rupees, model-year band, odometer band, minimum discount, state and city RTO code, and the individual Cars24 branch the car stands at — every one of those filters measured against the count Cars24 itself publishes for that value in the same run. Each row carries the car id and canonical cars24.com URL, the title, make, model and variant, the model year and registration date, the drive-away price in whole rupees with Cars24's own lakh string beside it, the odometer both as a number and as printed, fuel, transmission, body type, colour, seat count, how many owners it has had, the masked RTO plate, the locality and coordinates where it physically stands, the photo count, when it was first listed, the seller kind, the assurance plan and Cars24's own finance estimate with its interest rate and tenure. detail adds what makes Cars24 different from a classifieds site: its own inspection report, area by area, with the number of cosmetic imperfections found, Cars24's own OK, WARN or ERROR verdict, the inspector's written note and the defect photographs; the complete 71-row spec and feature table; the remaining tread life of each of the five tyres; the service-history summary; insurance type and fitness-certificate expiry; and the hub with street address, pincode and opening hours. price_breakdown explains the headline price line by line — base price, RC transfer, government-mandated insurance — so you can see why a car listed at 1.91 lakh has a 1.79 lakh base. batch_detail refreshes up to ten cars in one call. filters returns all eighteen filter groups with a live car count on every value, including the whole make-to-model tree, which is the only honest way past Cars24's own 10,000 cap on reported totals. cities lists all 184 served cities with their ids and car counts, and hubs lists Cars24's physical branches in one city. similar returns the comparables Cars24 itself recommends against a listing. No Cars24 account, one ReefAPI key and the standard { ok, data, meta, error } envelope.
The money fields, and the two that look like prices but are not
A Cars24 record carries four price-shaped numbers and only one is the price. This API names each of them for what it is and refuses to publish the one that contradicts itself. Fill rates below are over 160 distinct live cars, 80 per run across two runs in two different cities, sampled across body types and across both seller kinds.
| field | what it is | measured |
|---|---|---|
| price_inr | The drive-away asking price in whole Indian rupees — the number the car's own page prints as its headline and publishes in its structured data. Not paise, not lakh. | 160 of 160 filled. Checked against the price the car's own page publishes in its schema.org offer on 13 cars: 13 matched, 0 mismatched, 1 page unreachable |
| price_display | Cars24's own lakh string for the same number, e.g. 1.91 lakh for 191,102 rupees, so the scale is visible without arithmetic. | 160 of 160 filled, and agreed with price_inr on 13 of 13 checked |
| price_ex_charges_inr | Cars24's own pre-charges figure. It is LOWER than price_inr on every car measured, because the headline includes RC transfer and mandated insurance. Published under its own name so nobody mistakes it for the price. | Lower than price_inr on 8 of 8 cars measured; absent on owner-direct cars |
| price breakdown | The price_breakdown action returns the lines behind the headline. On car 13421894115: base 178,583 plus RC transfer 10,000 plus third-party insurance, summing to the published 191,102. | 5 charge lines on the car measured, 4 on another |
| emi | Cars24's own monthly finance ESTIMATE, with the interest rate and tenure it is calculated at. It is not a price and is never returned as one. | 160 of 160 filled; 12 % per annum over 48 months on the car measured |
| originalPrice | NOT PUBLISHED, deliberately. Cars24 ships this field but it contradicts its own prices: on 88 cars whose discount is zero — so it should equal the price — it differed on 68. On one 5.83 lakh car it reads 57,456, which would publish a tenfold error. | 68 of 88 disagreed; dropped rather than shipped |
| discount_pct | Cars24's own discount percentage where it flags one. Genuinely rare, and this API says so rather than defaulting it to zero. | 4 of 80 cars in one city, 11 of 80 in another |
| odometer_km / odometer_text | Kilometres as a number plus the string Cars24 printed. A zero reading is returned as null, because a used car with no odometer reading has no odometer reading. | 160 of 160 filled |
Two numbers in this API are the source's own and are reported as such rather than smoothed: a total of exactly 10,000 means Cars24 stopped counting, not that there are 10,000 cars — the response says so with total_is_capped, and the filters action reports the real population. And a city total is exact: Cars24's own page headline said 2941 Used Cars in New Delhi in the same minute this API returned 2,941.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/cars24/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"city_id": 2,
"max_results": 3
}
}{
"ok": true,
"meta": {
"api": "cars24",
"endpoint": "search",
"mode": "live",
"latency_ms": 1008.2,
"record_count": 3,
"bytes": 43272,
"cache_hit": false,
"completeness_pct": 100,
"stop_reason": "limit_reached",
"upstream_requests": 1,
"charged_credits": 1,
"version": "1.0.0",
"request_id": "21e94e3d311f418d",
"queue_ms": 1.5
},
"data": {
"results": [
{
"car_id": "13477179195",
"url": "https://www.cars24.com/buy-used-nissan-magnite-2023-cars-new-delhi-13477179195/",
"title": "Nissan MAGNITE",
"make": "Nissan",
"model": "MAGNITE",
"model_group": "MAGNITE",
"variant": "XV MT",
"year": 2023,
"price_inr": 521055,
"price_display": "₹5.21 lakh",
"on_road_price_inr": null,
"discount_pct": null,
"odometer_km": 21930,
"odometer_text": "21,930 km",
"fuel": "Petrol",
"transmission": "Manual",
"body_type": "SUV",
"colour": "Black",
"seats": 5,
"owners": 1,
"rto_code": "UK07",
"plate_masked": "UK07**9947",
"registered_on": "2023-06-01",
"listed_on": "2026-08-18T16:50:10Z",
"city_id": 2,
"locality": "Metro Walk, Rohini, New Delhi",
"latitude": 28.72401184,
"longitude": 77.11154607,
"hub_id": 101,
"hub_code": "LC_101",
"photo_count": 49,
"seller_kind": "cars24",
"seller_label": "Cars24 Owned Stock",
"assurance": "Zero Worry Max",
"availability": "AVAILABLE",
"fitness_age_years": 15,
"test_drive_label": "Today",
"badges": [
"AS_GOOD_AS_NEW"
],
"emi": {
"monthly_from_inr": 9198,
"monthly_to_inr": 9198,
"tenure_months": 84,
"interest_rate_pct_from": 12,
"interest_rate_pct_to": 12,
"down_payment_inr": null,
"note": "Cars24's own finance estimate at the rate card its page ships — not a price."
},
"image_url": "https://media.cars24.com/hello-ar/dev/transformed/uploads/m/41d8ffd2-6cc8-4d97-bf66-f4c052cf1a69/7bbd3963-fa83-4c11-aac7-41c3bb6d05b4/4928e177-8027-4e55-9946-d4560ce5d45f/slot/2.jpg",
"service_history_available": null
},
{
"car_id": "11068090142",
"url": "https://www.cars24.com/buy-used-ford-ecosport-2018-cars-new-delhi-11068090142/",
"title": "Ford Ecosport",
"make": "Ford",
"model": "Ecosport",
"model_group": "Ecosport",
"variant": "TITANIUM + 1.5L PETROL AT",
"year": 2018,
"price_inr": 519434,
"price_display": "₹5.19 lakh",
"on_road_price_inr": null,
"discount_pct": null,
"odometer_km": 57513,
"odometer_text": "57,513 km",
"fuel": "Petrol",
"transmission": "Auto",
"body_type": "SUV",
"colour": "White",
"seats": 5,
"owners": 1,
"rto_code": "DL1C",
"plate_masked": "DL1C*4583",
"registered_on": "2018-05-01",
"listed_on": "2026-06-26T16:48:00Z",
"city_id": 2,
"locality": "Metro Walk, Rohini, New Delhi",
"latitude": 28.72401184,
"longitude": 77.11154607,
"hub_id": 101,
"hub_code": "LC_101",
"photo_count": 55,
"seller_kind": "cars24",
"seller_label": "Cars24 Owned Stock",
"assurance": "Zero Worry Max",
"availability": "AVAILABLE",
"fitness_age_years": 15,
"test_drive_label": "Today",
"badges": [
"TOP_MODEL"
],
"emi": {
"monthly_from_inr": 9169,
"monthly_to_inr": 9169,
"tenure_months": 84,
"interest_rate_pct_from": 12,
"interest_rate_pct_to": 12,
"down_payment_inr": null,
"note": "Cars24's own finance estimate at the rate card its page ships — not a price."
},
"image_url": "https://media.cars24.com/hello-ar/dev/transformed/uploads/m/c5ca7d47-bc60-4dde-9fd3-bd78b63c4b3b/eadb642e-5546-4a64-8b7a-6a97426a4ce6/bc18c997-ebfa-4996-a044-920ceee3f37e/slot/2.jpg",
"service_history_available": null
},
{
"car_id": "10133378117",
"url": "https://www.cars24.com/buy-used-hyundai-creta-2020-cars-new-delhi-10133378117/",
"title": "Hyundai Creta",
"make": "Hyundai",
"model": "Creta",
"model_group": "Creta",
"variant": "SX 1.4 TURBO DCT",
"year": 2020,
"price_inr": 907196,
"price_display": "₹9.07 lakh",
"on_road_price_inr": null,
"discount_pct": null,
"odometer_km": 62986,
"odometer_text": "62,986 km",
"fuel": "Petrol",
"transmission": "Auto",
"body_type": "SUV",
"colour": "White",
"seats": 5,
"owners": 2,
"rto_code": "DL2C",
"plate_masked": "DL2C**7601",
"registered_on": "2020-08-01",
"listed_on": "2026-09-26T15:24:35Z",
"city_id": 2,
"locality": "Radisson Blu, Sector 13, Dwarka, New Delhi",
"latitude": 28.59606484,
"longitude": 77.03599862,
"hub_id": 3250,
"hub_code": "IN_CAR_CC_2_FC_7",
"photo_count": 49,
"seller_kind": "cars24",
"seller_label": "Cars24 Owned Stock",
"assurance": "Zero Worry Max",
"availability": "AVAILABLE",
"fitness_age_years": 15,
"test_drive_label": "Today",
"badges": [
"TOP_MODEL"
],
"emi": {
"monthly_from_inr": 15533,
"monthly_to_inr": 15533,
"tenure_months": 84,
"interest_rate_pct_from": 11,
"interest_rate_pct_to": 11,
"down_payment_inr": null,
"note": "Cars24's own finance estimate at the rate card its page ships — not a price."
},
"image_url": "https://media.cars24.com/hello-ar/dev/transformed/uploads/m/68c98ff8-1f49-42a0-a6af-a59105a3e213/6ab7aa15c32ab73c6055ec4b/dfb6ccf7-1ec0-4a04-9cc4-8ff34a1905c3/slot/Right_Front_Diagonal_Image.jpeg",
"service_history_available": null
}
],
"total_available": 2941,
"total_is_capped": false,
"returned": 3,
"page_ceiling": 30,
"next_cursor": "[5000001.99969995, \"10133378117\"]",
"sort": "best_match",
"city": {
"city_id": 2,
"city_code": "CC_2"
},
"segment_counts": {
"standard": 2917,
"luxe": 24
},
"headline": "2941 Used Cars in New Delhi - Second Hand Cars for Sale",
"filters_applied": []
}
}What the Cars24 API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Cars24's Indian used-car catalogue — both its own refurbished stock and the owner-direct cars on the same platform. 30,170 cars across 184 cities on 2026-10-01, counted from the source's own facet endpoint. Returns the car, its price in rupees, odometer, year, variant, colour, seats, owner count, masked RTO plate, body/fuel/gearbox, where it physically stands (locality + coordinates), the canonical cars24.com URL, the photo count, when it was first listed, the seller kind and Cars24's own finance estimate. Every filter below was measured against the count the source itself published for that value in the same run. 🔴 Two honesty notes you should plan for: the source caps `total_available` at 10,000 (so an all-India query returns `total_is_capped: true` and you should read the real population from `filters`), and one page is at most 30 rows — walk further with `cursor`, which was measured to have zero overlap and to reach 100 % of a city's published total. | Price-intelligence teams call search to search Cars24's Indian used-car catalogue. | city_id, make, model, seller_kind, fuel, ... |
| detail | One car in full, from Cars24's own car-detail endpoint — 79 keys on the car measured. Everything a `search` row carries plus: Cars24's INSPECTION REPORT (`condition`: per-area imperfection count, the source's own OK/WARN/ERROR status, its written note and, where published, the inspector's engine clip) with the defect photographs; the complete spec and feature table as Cars24 groups it (71 rows on the car measured); tyre tread life per wheel; the service-history summary; insurance type and fitness-certificate expiry; the hub it stands at with street address and opening hours; the photo gallery grouped exterior / interior / tyres / defects; Cars24's own buying highlights and promises; and how many people have wishlisted it. 🔴 Measured and published honestly: an OWNER-DIRECT car has no inspection report and no service history — those come back null with a warning naming them, never faked. A dead id returns NOT_FOUND, not an empty success. | Classifieds aggregators call detail to get one car in full, from Cars24's own car-detail endpoint. | car_id |
| batch_detail | Search-grade rows for up to 10 car ids in ONE upstream request — the cheapest way to refresh a watchlist. Measured: 5 ids → 5 rows in 63 KB (~12.6 KB per car) against 85 KB for one `detail`. Ids the source no longer publishes are returned in `missing` instead of silently disappearing; if none of the ids resolve you get NOT_FOUND. This is NOT the full detail record — no inspection report, no spec table; use `detail` for those. | Resale and arbitrage tools call batch_detail to get search-grade rows for up to 10 car ids in ONE upstream request. | car_ids |
| price_breakdown | Cars24's own line-by-line breakdown of the drive-away price for one car: base price, RC-transfer price, government-mandated third-party insurance and any further charges, each with the source's own title, explanation and amount in rupees. Measured on car 13421894115: base ₹178,583 + RC transfer ₹10,000 + insurance, summing to the ₹191,102 the listing headline prints. A tiny call — 1.9 KB. A dead id returns NOT_FOUND. | Lead-generation teams call price_breakdown to get cars24's own line-by-line breakdown of the drive-away price for one car. | car_id |
| filters | The live filter vocabulary WITH a car count on every value — the honest way to size a market before searching it, and the only way to see past the 10,000 cap the search surface puts on its own total. 18 filter groups: the whole make → model tree (32 makes, 35 Maruti models), fuel, body, transmission with its sub-types, colour, seats, owner count, 16 equipment flags, state and city RTO codes, the Cars24 hubs in the city, discount bands and paid add-ons, plus the price / year / odometer sliders' own break points. Pass `city_id` for one city's counts, omit it for all of India (30,170 cars on 2026-10-01). | Price-intelligence teams call filters to get the live filter vocabulary WITH a car count on every value. | city_id, facet |
| cities | Every Indian city Cars24 serves — 184 on 2026-10-01 — with its city id, its cars24.com URL, whether Cars24 features it, a live total car count and, per city, the makes on sale with a count each. This is the lookup you need before `search`, because `city_id` is Cars24's own numeric key. Measured: Delhi NCR id 1, 7,040 cars, Maruti 2,140 of them. | Classifieds aggregators call cities to get every Indian city Cars24 serves. | query, featured_only, with_brands |
| hubs | Cars24's physical branches in one city, as Cars24 publishes them: street address, locality, pincode, coordinates, Google-maps link, opening hours, working days and weekly off, how many cars stand there, whether it is an elite hub, the branch's own page URL and the sales manager's name the site prints. Measured: city 2 (New Delhi) → 4 hubs in 9.6 KB; city 1 (Delhi NCR) → more, 23.9 KB. A city id with no hubs answers with an empty body upstream and is returned as NOT_FOUND rather than a crash. | Resale and arbitrage tools call hubs to get cars24's physical branches in one city, as Cars24 publishes them. | city_id |
| similar | The cars Cars24 itself recommends against one listing — its own similar-cars surface, returned as full `search`-grade rows. Useful for comparables and for pricing a car against its live alternatives. Measured: one id → 20 rows in 132 KB. 🔴 A dead id answers HTTP 200 with an empty `content` array upstream; that is reported as NOT_FOUND, never as an empty success. | Lead-generation teams call similar to get the cars Cars24 itself recommends against one listing. | car_id |
Call search from your stack
curl -X POST https://api.reefapi.com/cars24/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"city_id":2,"max_results":3}'import requests
r = requests.post(
"https://api.reefapi.com/cars24/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"city_id": 2,
"max_results": 3
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/cars24/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"city_id": 2,
"max_results": 3
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.cars24.search with {"city_id":2,"max_results":3}.Who uses this API and why
- Price a specific used car against live Indian supply: search by make, model, year band and odometer band in one city, read total_available and the price spread, then pull price_breakdown to see how much of each headline is RC transfer and insurance rather than the car.
- Build an inspected-only feed: filter seller_kind=cars24 for the 6,746 refurbished cars, then use detail to read Cars24's own per-area imperfection counts, OK/WARN/ERROR verdicts, defect photographs and tyre tread, which no classifieds site publishes.
- Size a market before committing to it: one filters call returns 18 filter groups with a live count on every value — 32 makes with their models, fuel split, body split, gearbox technologies, colours, seat counts, owner counts and sixteen equipment flags — for all of India or for one of 184 cities.
- Track a watchlist cheaply: batch_detail refreshes up to ten car ids in a single call and returns the ones that have been sold in a missing list, so a price drop or a disappearance is one request away instead of ten.
- Map physical supply: hubs returns Cars24's branches in a city with address, pincode, coordinates, opening hours and the number of cars standing at each, and every search row carries the hub id and coordinates for the car itself.
Questions developers ask before integrating
How many cars are there, and why does an all-India search say 10,000?
30,170 on 2026-10-02, measured from Cars24's own filter counts, across 184 cities. Cars24's listing surface caps the total it reports at exactly 10,000: an all-India search, an all-India petrol search and an all-India SUV search all report 10,000, while the filter counts for the same queries in the same minute were 30,170, 18,671 and 12,470. This API does not hide that. It returns total_is_capped: true whenever the number is 10,000, and the filters action gives you the real population. Any city-scoped search is below the cap and exact.
What does Cars24's inspection report actually contain?
For Cars24's own refurbished stock, detail returns a condition block with one entry per inspected area — exteriors, engine and transmission, air-conditioning, electricals and interior, steering, suspension and brakes, and tyres — each with the number of cosmetic imperfections Cars24 found, its own OK, WARN or ERROR verdict, the written note explaining it, and in some cases an engine clip the inspector recorded. Alongside it you get the defect photographs, the remaining tread life of each of the five tyres in kilometres, and the service-history summary. Owner-direct cars have no inspection report at all; see the next question.
Does every car have an inspection report?
No, and this is the single most important limit on the dataset. Cars24 inspects and refurbishes its own stock — 6,746 cars — and those carry the condition block and the service history. The other 23,424 cars are owner-direct listings and Cars24 publishes no inspection report, no service history and no pre-charges price for them. This API returns null for those fields and a warning naming exactly which blocks the source does not publish for that seller kind. It never fabricates a condition score. Filter on seller_kind=cars24 if you only want inspected cars.
Can I search by free text, like a make and model in one string?
No, because Cars24 publishes no text-search surface — its autocomplete rejects a bare search term and nothing else in the product offers one. This API does not pretend otherwise: discovery runs on structured filters instead, which in practice is stronger. make takes 32 brands, model takes the model key, and the filters action returns the whole make-to-model tree with a live count on every node, so you never have to guess a spelling. Maruti has 35 models and 7,996 cars, Hyundai 29 models and 6,050, Tata 37 models and 3,454.
How many rows per call, and can I page through a whole city?
30 rows per call. That is Cars24's own hard ceiling and not a choice: asking for 50, 100, 200, 500 or 1000 all return exactly 30. Paging uses a cursor you pass straight back as next_cursor, and it was measured properly: six consecutive pages gave 120 rows and 120 distinct cars, overlap zero, and a small city was walked to exhaustion — Vijayawada, 69 published cars, 69 collected, 69 distinct, 100 % of the catalogue reachable. Repeat the same first call and you get the same 30 cars in the same order, so a sync is stable.
Is the seller a person I can contact?
No, and no API can give you that from Cars24 because Cars24 does not publish it. There is no phone number on a car row — 0 of 90 rows measured — and an owner-direct listing publishes a locality and nothing else about the person. For Cars24's own stock the seller is Cars24 itself, and the published contact point is the branch: the hubs action returns each hub's street address, pincode, coordinates, map link, opening hours, working days, how many cars stand there and the branch sales manager's name, all as Cars24 prints them. Plates come to you masked — DL8C**8470 — because that is how the source publishes them.
Which filters actually work, and how do you know?
Every filter this API exposes was measured against the count Cars24's own filter surface published for that value in the same run, in two different cities. In New Delhi, against an unfiltered 2,941: maruti 906, petrol 1,911, petrol plus diesel 2,229 which is 1,911 plus 318 exactly, hatchback 1,282, automatic 625, AMT gearbox 149, white 1,156, five-seat 2,570, first-owner 1,968, sunroof 432, Delhi-8C plates 405, one named hub 196, Cars24 stock 436 and owner-direct 2,505 — and 436 plus 2,505 is 2,941, the whole city. Price, year and odometer bands bit too. Filters Cars24 accepts and then ignores were found during testing and are deliberately not offered.
How fast is it, and how reliable was it when you measured?
Two independent runs on two different cities, the same fixed 68-case list each time: 51 of 51 live calls succeeded in both runs, and all 17 intended failures landed on the correct error code in both. Median response 1.27 seconds in one run and 1.07 in the other; every action costs exactly one upstream request. One car-detail call in the first run took 4.9 seconds after a network hiccup and the API retried it rather than failing; every other call in both runs was under 1.6 seconds. A dead car id returns a clean not-found rather than an empty success, and a filter combination with genuinely no matches returns ok:true with zero rows and a note saying so, because an empty answer is an answer.
What is the Cars24 API?
Cars24 API is a ReefAPI endpoint group for india's used-car recommerce platform: 30,170 live cars across 184 cities, price in rupees, odometer, 71-row spec table, cars24's own inspection report and the hub the car stands at. It returns live JSON through POST requests under /cars24/v1.
Is the Cars24 API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Cars24 calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Cars24 login or account?
No login to Cars24 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 Cars24 data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Cars24 API use?
Cars24 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 Cars24 from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call cars24 actions with the same key, credit pool and JSON envelope used by normal REST requests.