Guazi API

Two Chinese used-car markets, one in yuan and one in dollars

Guazi API returns live Guazi data as clean JSON for guazi The primary endpoint, search, returns cars records including clue id, title, year, city and mileage km.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Guazi endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
G
/guazi/v1

10 active endpoints, on 1, 2 and 3 credit tiers.

  • POST/guazi/v1/search
  • POST/guazi/v1/detail
  • POST/guazi/v1/brands
  • POST/guazi/v1/series
  • POST/guazi/v1/cities
  • POST/guazi/v1/price_bands
  • POST/guazi/v1/listing_ids
  • +3 more

What Guazi endpoints does ReefAPI ship?

10 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

10 endpoints

search

1 cr

Search live guazi listings.

required
—
optional
city, brand, series, price_band, page

detail

1 cr

Everything guazi publishes about one car by id (a c… listing id from search or listing_ids).

required
id
optional
—

brands

1 cr

Every car brand guazi carries, with its guazi slug (value) for search's brand filter, Chinese…

required
—
optional
letter

series

1 cr

Every series (车系) guazi lists for one brand, with the slug for search's series filter.

required
brand
optional
city

cities

1 cr

All 300+ cities guazi operates in, each with the slug search's city takes, the Chinese name,…

required
—
optional
—

price_bands

1 cr

Guazi's 16 price bands with their real CNY ranges and the slug search's price_band takes.

required
—
optional
city

listing_ids

1 cr

Bulk id feed.

required
—
optional
page

export_search

3 cr

Search guazi's China used-car EXPORT & auction marketplace.

required
—
optional
brand, series, body_type

export_detail

3 cr

Everything guazi publishes about one car on its export marketplace.

required
id
optional
—

export_brands

2 cr

Every brand guazi carries on its export marketplace, with the slug export_search's brand take…

required
—
optional
—

Every parameter, every allowed value →

Guazi API

8 of 10 endpoints, ready to run

View docs ↗

Live domestic listings by city market, brand, model series and guazi's own price band. Each row carries the asking price in yuan, the odometer in kilometres, the registration year, the city the car is actually in, the inspection badge and the thumbnail — and the city you pass is a MARKET, not a location filter, which is the one thing to understand before you read the rows.

1 credit0 required · 5 optional
POST/guazi/v1/search
idle
// 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 Guazi API works

Guazi is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 440 engines.

02
Call
POST /guazi/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 or 2 or 3 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Decide whether a Chinese car is worth importing

The two marketplaces answer different questions, and the useful integration uses both: the domestic one for what cars actually cost in China, the export one for what it would cost to land one, with the condition disclosures an importer needs.

01brands
POST/guazi/v1/brands
{}

The brand slugs the search filter accepts, with their Chinese names. Pass one back to the series action for that brand's model-series slugs.

02search
POST/guazi/v1/search
{"city": "bj", "brand": "benz", "series": "benz-e"}

Forty rows a page with the price in yuan, the odometer, the registration year and the city each car is really in. This is the domestic market price, which is the number the export price should be judged against.

03detail
POST/guazi/v1/detail
{"id": "<id from a search row>"}

Insurance-claim count, ownership-transfer count, inspection grade, appearance score, trim and every photo. Spend this on the cars you shortlisted.

04export_search
POST/guazi/v1/export_search
{"brand": "mercedes-benz"}

The same marque on the export side, priced FOB in dollars with a condition grade and a seller type on every row.

05export_detail
POST/guazi/v1/export_detail
{"id": "<id from an export row>"}

The masked VIN, the accident, flood and fire flags, the steering side and the city the car sits in — the disclosures that decide whether a car is importable at all.

A Chinese car priced in both markets, with its claim history, inspection grade and damage disclosures attached, from a marque name and nothing else.

request
curl -X POST https://api.reefapi.com/guazi/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"city":"bj"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "guazi",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

Two marketplaces, two currencies, and the identifier one of them will not give you

Measured against the live source on 2026-10-11 across fourteen domestic facets and eleven export facets. Five of these go against us, and the first two will corrupt data silently rather than erroring.

Against us: the city you search is a MARKET, not a location

Guazi sells nationwide into each city, so a search scoped to Beijing legitimately returns cars sitting in Shenyang, and one scoped to Shanghai returned cars from nine different cities. The filter is not broken and the rows are not wrong — the city you pass is the buyer's market. Every row carries its own city, which is where that car actually is. If you need strictly one location, filter on the row's city, not on the request.

Against us: the detail page's own breadcrumb names the wrong city

On the car we measured, the page's structured data says Shenzhen while the car is in Suzhou — and guazi's own plain-text mirror of the same page agrees with Suzhou. One field is the browsing market, the other is where the car is. We publish the car's real location as city and expose the other as market_city, so the difference is visible instead of quietly wrong in your database.

No VIN on the domestic market, a masked one on the export market

The seventeen-character number appears nowhere on a domestic listing — not under a Chinese label, not under an English one. So vin comes back null with a flag saying the source does not publish it, rather than filled with something that looks like a VIN. On the export side guazi publishes the first three and last four characters; the middle is not on the page at all, so that mask is the honest maximum and it arrives as vin_masked. The identifier you can actually join on domestically is the listing id, which round-trips unchanged between search and detail.

Against us: the price field on the export market means two different things

A fixed-price export row publishes an FOB asking price. An auction row publishes the CURRENT BID in the same field — we measured thirty dollars on a 2023 Hyundai Palisade with 39,900 km, while every other facet's cheapest car that minute was between three and thirty-four thousand. Reading that as a market price would be wrong by three orders of magnitude, so the two are split: price_usd for an asking price, current_bid_usd for a live bid, and price_kind naming which one you are holding.

The condition disclosures are the real product here

A domestic detail record carries the number of insurance claims against the car and the number of times it has changed owner, guazi's condition grade, an appearance score out of a hundred and whether an official two-hundred-point inspection report exists. An export record goes further and states no-accident, no-flood and no-fire explicitly, each as its own flag, next to an A-to-D grade. These are the fields an importer actually buys, and they came back on every car we sampled.

Both prices come with the unit made explicit

China quotes used cars in 万 — units of ten thousand yuan — and distance in 万公里. A listing reading 14.43 and 10.94 is 144,300 yuan with 109,400 km on it. Nothing in this engine returns the source's bare figure: prices arrive as absolute yuan and mileage as absolute kilometres, and the price bands are converted too, so band price12 reports 130,000 to 180,000 rather than 13 to 18. The export side carries the dollar price alongside guazi's own yuan exchange rate, so you can reconcile the two markets yourself.

Against us: paging stops at eight hundred cars per filter

Forty rows a page, pages one to twenty, and page twenty-one returns nothing on every facet we tried — even where the source's own headline count was forty-three thousand. The way deeper is narrower: brand, then model series, then price band. A series-plus-band facet returned seven cars and said so, which is what a real narrow result looks like rather than a padded grid. The export side is tighter still: twenty rows per facet and no second page at all, because its own filter and page links do not work without running its JavaScript. We expose none of those parameters rather than accept one the source would silently ignore.

Every filter that is offered was checked against what came back

Brand returned only that marque; model series only that series; each price band's rows all fell inside the yuan range guazi declares for it, on four separate bands. The filters the source silently ignores — body type, fuel, year, an arbitrary price — are not offered at all, because a filter that is accepted and then dropped is worse than one that does not exist.

A typo gets an error, and a genuinely empty market gets an answer

A city slug that does not exist returns NOT_FOUND. A real city with nothing in stock returns success with an empty list and a reported total of zero. Those are different facts and they are reported differently, so a typo cannot read as 'guazi has no cars there'. A dead listing id likewise returns NOT_FOUND with the source's own refusal behind it, which lets a sync close the row instead of retrying it.

There is a bulk id feed, and it is the cheap way in

Guazi publishes its own crawler index of every live domestic listing: thirteen pages of roughly ten thousand ids, each with the date it was last updated — about 127,000 cars. Pull the ids, diff the dates against what you stored, and spend a detail call only on what moved. It is priced by the rows it returns, so a full page costs five credits rather than the ten thousand a one-by-one walk would.

The data is in Chinese domestically and English on the export side

Domestic titles, cities, colours and engine descriptions come back in Chinese as guazi publishes them; nothing is machine-translated, because a translation we invented is a value we cannot stand behind. The brand and city directories give you both the Latin slug and the Chinese name. The export marketplace is written in English by guazi itself, including the options sheet, which is why it is the easier of the two to put in front of a non-Chinese-speaking team.

What people build with Guazi

The jobs this data is most often used for.

10

endpoints

1/2/3

credits per call

01

Pricing and assortment teams use Guazi to search live guazi listings.

02

Brand-protection teams use Guazi to get everything guazi publishes about one car by `id` (a `c…` listing id from `search` or `listing….

03

Retail analysts use Guazi to get every car brand guazi carries, with its guazi slug (`value`) for `search`'s `brand` filter, C….

04

Catalog enrichment teams use Guazi to get every series (车系) guazi lists for one brand, with the slug for `search`'s `series` filter.

What Guazi data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 440 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
curl -X POST https://api.reefapi.com/guazi/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"city":"bj"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/guazi/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "city": "bj"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Guazi.

Get a free key →
What is the Guazi API?▾

Guazi API is a ReefAPI endpoint group for guazi It returns live JSON through POST requests under /guazi/v1.

Is the Guazi API free to try?▾

Yes. ReefAPI starts with 1,000 free credits, no card required. Guazi calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Guazi login or account?▾

No login to Guazi 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 Guazi 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 Guazi API use?▾

Guazi 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 Guazi from an AI assistant or MCP client?▾

Yes. Connect ReefAPI once through MCP and your assistant can call guazi actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the Guazi API a Guazi scraper?▾

It is the managed alternative to a DIY Guazi 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 guazi back as clean JSON.

Why does my Guazi scraper keep getting blocked?▾

Most Guazi 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.

5 More APIs APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Guazi, 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.

0/4000

No account needed · we reply from [email protected]

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 439 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-11.