che168 API & Scraper
che168 API returns live che168 data as clean JSON for che168 The primary endpoint, search, returns matching records including listing id, title, price cny, price wan cny and new car price cny.
🤖 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 read a retailer's own catalogue with full product detail, variants, price and stock without maintaining one-off scraping code or separate API contracts. If you were about to build or fix a che168 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: search, car_detail, car_summary, car_photos. 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.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/che168/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"city": "beijing",
"limit": 20
}
}{
"ok": true,
"meta": {
"api": "che168",
"endpoint": "search",
"mode": "live",
"latency_ms": 18116.3,
"record_count": 20,
"bytes": 495738,
"cache_hit": false,
"stop_reason": "complete",
"upstream_requests": 2,
"filters": {
"city": "beijing",
"sort": "default",
"page": 1
},
"source_url": "https://www.che168.com/beijing/a0_0msdgscncgpi1ltocsp1exx0/",
"city_ids": [
110100
],
"city_resolved": "beijing",
"charged_credits": 2,
"version": "1.0.0",
"request_id": "0f230c402b874e5b",
"queue_ms": 2.1,
"fetched_at": "2026-10-11T12:01:41.097Z"
},
"data": {
"results": [
{
"listing_id": 59776000,
"url": "https://www.che168.com/dealer/201407/59776000.html",
"title": "奔驰G级 2022款 G 500",
"price_cny": 1518000,
"price_wan_cny": 151.8,
"new_car_price_cny": 2053700,
"mileage_km": 13000,
"mileage_wan_km": 1.3,
"first_registration": "2022-08",
"year": 2022,
"city": "北京",
"city_id": 110100,
"province_id": 110000,
"brand_id": 36,
"series_id": 60,
"spec_id": 54727,
"dealer_id": 201407,
"dealer_note": "12年黑金会员",
"image": "https://2sc2.autoimg.cn/escimg/g33/M03/2F/AE/440x330_q87_c42_autohomecar__ChxpVWqlLAaADDHhAAm6FzFid0s612.jpg",
"listed_at": "2026-10-10T13:06:26Z",
"tags": [
"90天回购保障"
],
"is_new_car": false,
"is_certified": false,
"has_extended_warranty": false,
"is_factory_certified": false
},
{
"listing_id": 60094644,
"url": "https://www.che168.com/dealer/201407/60094644.html",
"title": "揽胜 2023款 3.0 L6 360PS 盛世版",
"price_cny": 958000,
"price_wan_cny": 95.8,
"new_car_price_cny": 1550100,
"mileage_km": 27000,
"mileage_wan_km": 2.7,
"first_registration": "2023-01",
"year": 2023,
"city": "北京",
"city_id": 110100,
"province_id": 110000,
"brand_id": 49,
"series_id": 69,
"spec_id": 57781,
"dealer_id": 201407,
"dealer_note": "12年黑金会员",
"image": "https://2sc2.autoimg.cn/escimg/g34/M08/7E/C2/440x330_q87_c42_autohomecar__ChxpWGrJxh-ANSrnAAk29_inxXs953.jpg",
"listed_at": "2026-10-10T12:59:43Z",
"tags": [
"90天回购保障"
],
"is_new_car": false,
"is_certified": false,
"has_extended_warranty": false,
"is_factory_certified": false
},
{
"listing_id": 59269937,
"url": "https://www.che168.com/dealer/201407/59269937.html",
"title": "Cayenne 2022款 Cayenne 3.0T 铂金版",
"price_cny": 538000,
"price_wan_cny": 53.8,
"new_car_price_cny": 1105000,
"mileage_km": 19000,
"mileage_wan_km": 1.9,
"first_registration": "2022-01",
"year": 2022,
"city": "北京",
"city_id": 110100,
"province_id": 110000,
"brand_id": 40,
"series_id": 172,
"spec_id": 55408,
"dealer_id": 201407,
"dealer_note": "12年黑金会员",
"image": "https://2sc2.autoimg.cn/escimg/g34/M0B/EA/A5/440x330_q87_c42_autohomecar__ChxpV2p1bT6AI7UyAAr57h2FW5E781.jpg",
"listed_at": "2026-10-04T10:25:21Z",
"tags": [
"90天回购保障"
],
"is_new_car": false,
"is_certified": false,
"has_extended_warranty": false,
"is_factory_certified": false
}
],
"total_reported": null,
"total_note": "che168 does not publish a result count. `pages_available` is the highest page its own pager links to; it saturates at 100 for broad filters, and page 101+ silently repeats page 100.",
"pagination": {
"page": 1,
"per_page": 56,
"returned": 20,
"pages_available": 100,
"has_more": true,
"max_page": 100
},
"filters_applied": {
"city": "beijing",
"sort": "default",
"page": 1
},
"city_ids_in_results": [
110100
],
"year_filter": null,
"city_padding": false,
"source_url": "https://www.che168.com/beijing/a0_0msdgscncgpi1ltocsp1exx0/"
}
}What the che168 API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search che168's live used-car inventory. Filter by city, brand/series (pinyin from `suggest`), vehicle class, price band, registration age, mileage, gearbox, displacement, seller type (private / dealer / certified dealer), body structure, colour, fuel, seats, emission standard, drivetrain, induction and dealer, then sort and page through. Returns a normalized card per car (price in CNY, mileage in km, first-registration month, city, ids, photo, tags). che168 publishes no result total, so `pagination.pages_available` is the page count its own pager offers; it serves at most 100 pages (56 cars each) per filter. `keyword` does a free-text search instead — Chinese text works best, and che168 ignores the other filters in keyword mode. | Pricing and assortment teams call search to search che168's live used-car inventory. | city, brand, series, vehicle_class, keyword, ... |
| car_detail | Everything che168 publishes about one listing, merged from its page and three of its JSON endpoints: price (CNY and 万), mileage in km, first-registration month, brand/series/trim ids, dealer name + rating + seller type, owner-transfer count, inspection / insurance / warranty expiry, engine, vehicle class, colour, fuel grade, drivetrain, emission standard, every photo, and che168's own condition grade. The 17-character VIN is NOT published by che168 — `vin` is null and `vehicle_token` carries che168's opaque identifier instead. | Brand-protection teams call car_detail to get everything che168 publishes about one listing, merged from its page and three of its JSON end…. | listing_id, include_report, include_photos |
| car_summary | The cheap one-listing lookup: che168's own ~1 KB JSON record for a listing id — title, brand, series, trim id, price, mileage, registration date, city, dealer name + rating + seller type, finance terms, main photo, watch count. Use this instead of `car_detail` when you are enriching thousands of ids and do not need the archive table, photo list or condition report. Returns NOT_FOUND with che168's own wording when a listing has been sold or delisted. | Retail analysts call car_summary to get the cheap one-listing lookup. | listing_id |
| car_photos | Every photo URL che168 holds for a listing, from its own photo JSON (~3 KB) rather than the 350 KB page. Cheapest way to pull imagery in bulk. | Catalog enrichment teams call car_photos to get every photo URL che168 holds for a listing, from its own photo JSON (~3 KB) rather than the 3…. | listing_id |
| car_options | The comfort/safety equipment che168 lists for one car (lane keeping, adaptive cruise, 360 camera, heated steering, head-up display, …) as a normalized list with che168's option ids. | Pricing and assortment teams call car_options to get the comfort/safety equipment che168 lists for one car (lane keeping, adaptive cruise, 360 cam…. | listing_id, spec_id |
| condition_report | che168's third-party condition and accident report for one listing: overall grade, per-item inspection results (structural damage, flood, fire, major accident), the claim type, report photos and the link to the full report, plus che168's own condition wording and demand indices. Honest-empty: cars che168 has not had inspected return `report_published: false` instead of an invented clean bill of health — measured on 9 listings across three che168 surfaces, all 9 said false, so treat the report as a bonus and the demand block as the reliable part. Pass `vehicle_token` (from `car_detail`) to keep this cheap: che168 validates that token and will not answer without it, so if you omit it we have to load the ~350 KB listing page to read it off. | Brand-protection teams call condition_report to get che168's third-party condition and accident report for one listing. | listing_id, dealer_id, vehicle_token |
| model_specs | The full factory specification sheet for one trim (`spec_id`) straight from Autohome's model database: trim name, manufacturer, MSRP when new, body structure, class, engine, gearbox, fuel, seats and ~15 grouped sections of named parameters. This is the `trim` dimension — pair it with `search`/`car_detail`, which both return `spec_id`. | Retail analysts call model_specs to get the full factory specification sheet for one trim (`spec_id`) straight from Autohome's model…. | spec_id |
| suggest | Resolve a keyword to che168's own brand/series entries, each with the LIVE number of cars on sale and the real minimum and maximum asking price — a market-size probe in one call ('how many BMW 3-series are for sale in China right now, and in what price band'). It returns che168's numeric `series_id`/`brand_id`, NOT the pinyin slugs `search` filters on: use `brands` for those. | Catalog enrichment teams call suggest to resolve a keyword to che168's own brand/series entries, each with the LIVE number of cars on…. | query |
| dealer_cars | One dealer's whole live inventory on che168, paged. Same normalized card shape as `search`. Use `dealer_id` from any search result or listing detail. | Pricing and assortment teams call dealer_cars to get one dealer's whole live inventory on che168, paged. | dealer_id, city, sort, page, limit |
| brands | che168's brand catalogue: all 618 brand slugs with their Chinese names. These slugs are what `search`'s `brand` filter takes, and `suggest` does not provide them. Pass `brand` to get that brand's model-series slugs instead (94 for BMW), which `search`'s `series` filter takes. | Brand-protection teams call brands to get che168's brand catalogue. | brand |
| cities | che168's complete market list — every city and province it sells in, with the area id, the pinyin slug `search` takes and the Chinese name. Read live off the site, so it cannot drift from what `search` accepts. | Retail analysts call cities to get che168's complete market list. | near_city_id |
Call search from your stack
curl -X POST https://api.reefapi.com/che168/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"city":"beijing","limit":20}'import requests
r = requests.post(
"https://api.reefapi.com/che168/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"city": "beijing",
"limit": 20
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/che168/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"city": "beijing",
"limit": 20
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.che168.search with {"city":"beijing","limit":20}.Who uses this API and why
- Pricing and assortment teams use che168 to search che168's live used-car inventory.
- Brand-protection teams use che168 to get everything che168 publishes about one listing, merged from its page and three of its JSON end….
- Retail analysts use che168 to get the cheap one-listing lookup.
- Catalog enrichment teams use che168 to get every photo URL che168 holds for a listing, from its own photo JSON (~3 KB) rather than the 3….
- Pricing and assortment teams use che168 to get the comfort/safety equipment che168 lists for one car (lane keeping, adaptive cruise, 360 cam….
Questions developers ask before integrating
What is the che168 API?
che168 API is a ReefAPI endpoint group for che168 It returns live JSON through POST requests under /che168/v1.
Is the che168 API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. che168 calls use the same shared credit balance as every other ReefAPI engine.
Do I need a che168 login or account?
No login to che168 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 che168 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 che168 API use?
che168 actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call che168 from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call che168 actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the che168 API a che168 scraper?
It is the managed alternative to a DIY che168 scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same che168 back as clean JSON.
Why does my che168 scraper keep getting blocked?
Most che168 scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked calls are free.