Pakistan's vehicle market, as JSON
PakWheels is where vehicles are bought and sold in Pakistan, and this API turns its three marketplaces into JSON.
7 active endpoints, on 1, 2 and 3 credit tiers.
- POST/pakwheels/v1/car_search
- POST/pakwheels/v1/car_listing
- POST/pakwheels/v1/bike_search
- POST/pakwheels/v1/bike_listing
- POST/pakwheels/v1/part_search
- POST/pakwheels/v1/part_listing
- POST/pakwheels/v1/filter_options
What PakWheels endpoints does ReefAPI ship?
7 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
PakWheels API
1 of 7 endpoints, ready to run
Page the live Pakistani used-car market 25 ads at a time, with twenty filters that were each measured to move the result count. Every row carries the exact rupee price next to the site's own 'crore' string, the make, model and trim, the model year, the odometer in kilometres, fuel, engine size, gearbox, the city, the photo and whether the seller paid to feature the ad. 9,993 Toyota Corollas were live across Pakistan when this page was measured; adding Lahore and 2018+ narrows it from there.
// 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 PakWheels API works
PakWheels 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 search row to the whole ad
Four calls: car_search, then car_listing, then bike_listing, then filter_options.
Call car_search with the filters you want, for example make=toyota, city=karachi, price_max=3000000. Read total_results and pages before you start paging; they come from PakWheels' own counter, not from a guess.
Keep each row's ad_id. Prices are already exact integers in rupees, so you can compare them directly; price_display is kept alongside if you want to show the figure the way PakWheels writes it.
Call car_listing with that ad_id for the full page: the seller's comments, the feature list, every photo, colour, registration city, assembly and the seller's public profile. On ten ids we tested, ten resolved to the same ad with the same price.
For motorcycles use bike_search and bike_listing, and for accessories and spare parts use part_search and part_listing. They are separate endpoints because the three marketplaces publish genuinely different fields.
If you are building a filter UI, call filter_options once. It needs no upstream request and returns every enum with the label PakWheels itself prints next to it.
Eleven credits for the 5 calls: car_search 3, car_search 3, car_listing 3, bike_listing 2, filter_options 0. Failed calls are free: a timeout, a block or a capacity error costs nothing.
curl -X POST https://api.reefapi.com/pakwheels/v1/car_search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"make":"toyota","city":"lahore","max_results":20}'{
"ok": true,
"data": { … },
"meta": {
"api": "pakwheels",
"endpoint": "car_search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}What a PakWheels search row carries
Measured on 2026-10-02 over 250 car rows from ten different queries, 75 bike rows and 50 parts rows. The three columns that are not 100 % are real gaps in the source, not parser misses.
| Field | What it is | Filled |
|---|---|---|
| ad_id | Numeric PakWheels ad id; feed it straight back to the detail endpoint | 100 % |
| price_pkr | Asking price as an exact whole-rupee integer | 242/250 cars, 75/75 bikes, 50/50 parts |
| price_display | The price string PakWheels itself prints ('PKR 2.07 crore') | 100 % |
| price_before_discount_pkr | The struck-through old price, when the ad shows one | only on discounted ads |
| brand / model / variant | Make, model and trim as the site tags them | 100 % / 100 % / 237/250 |
| year / mileage_km | Model year and odometer in kilometres | 100 % / 100 % |
| fuel / engine_cc / transmission | Petrol, diesel, hybrid, electric, PHEV; engine size; gearbox (cars) | 100 % / 247/250 / 100 % |
| engine_type | Bikes only: '4 Stroke', '2 Stroke' or 'Electric' | 75/75 bikes |
| city | The city the ad is posted in | 100 % cars and bikes |
| category / sub_category | Parts only: the site's own two-level category path | 50/50 parts |
| featured | Whether the seller paid to feature this ad | always present |
| image_url / images_count | Lead photo and how many photos the ad has | 100 % |
| updated_text | When the ad was last bumped, as the site words it | 100 % cars and bikes |
Eight of 250 car ads carry no price at all; those come back with price_pkr: null and price_on_request: true rather than a zero. A page holds 25 rows on the car and bike surfaces and 24 on the parts surface, and every response repeats page_size, pages and the window the site says it served, so you never have to assume.
What PakWheels covers, and the numbers behind it
All of pakwheels.com's three public classifieds marketplaces: used cars, used motorcycles and scooters, and accessories and spare parts. Pakistan-wide, with city and province filters.
83,787 live ads, 3,352 reachable pages at 25 rows a page
21,573 live ads
58,934 live listings, 24 rows a page
PKR, returned as exact whole rupees (the site prints lacs and crore)
20 of 20 on the car surface
375 rows checked against the site's own printed price: 375 matched, 0 mismatched
10 ids tested, 10 resolved to the same ad at the same price
Seller phone numbers (masked on the public page); dealer directory; new-car price lists
What people build with PakWheels
The jobs this data is most often used for.
endpoints
credits per call
Price a car against the live Pakistani market: filter by make, model, year band and city, read the exact PKR figures and build your own distribution instead of trusting a dealer's quote.
Watch a model for arrivals: poll Toyota Corolla in Lahore sorted by newest, keep the ad ids you have seen and alert on the ones you have not.
Separate dealer stock from private sellers: seller_kind splits the 83,787-ad market into 73,130 private and 10,658 dealer ads, which is the difference between a retail benchmark and a trade one.
Build an import-vs-local view: the assembly filter splits 60,912 locally assembled cars from 22,872 imports, and the origin filter groups them by Japanese, German, Korean, Chinese and more.
What PakWheels 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 →- 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/pakwheels/v1/car_search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"make":"toyota","city":"lahore","max_results":20}'import requests
r = requests.post(
"https://api.reefapi.com/pakwheels/v1/car_search",
headers={"x-api-key": REEF_KEY},
json={
"make": "toyota",
"city": "lahore",
"max_results": 20
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up PakWheels.
Get a free key →How many listings can I actually reach?▾
All of them. The unfiltered car market measured 83,787 ads over 3,352 pages, and page 3,352 really does serve the last 10 ads (3,351 x 25 + 10 = 83,785 on the run we checked). Asking for a page past the end gets you a clear NOT_FOUND with the page count, not the last page dressed up as page 4,800. Every response states reachable_results alongside total_results.
Prices on PakWheels are written in lacs and crore. What do I get?▾
An exact integer in rupees, plus the site's own string. A car listed as 'PKR 2.07 crore' comes back as price_pkr: 20700000 and price_display: 'PKR 2.07 crore'. We check the two against each other on every row and report the tally: 375 rows checked on 2026-10-02, 375 agreed, 0 disagreed. If an ad shows a discount we also return the struck-through old price in its own field, so the live price and the old price never get mixed up.
Can I filter to dealers only, or to private sellers only?▾
Yes, with seller_kind. On 2026-10-02 the market split 73,130 ads from individuals and 10,658 from dealers. Every detail response also carries the seller block: display name, the date they joined PakWheels and their profile image.
Does the API return seller phone numbers?▾
No, and that is deliberate. The public ad page prints a masked number and the real one only appears after a click, so there is no phone number on the surface we read. We would rather return no field than a field that is the same fake string on every ad. The seller's display name and member-since date are returned.
Do the filters really narrow the results, or are some ignored?▾
All twenty filters we expose were measured against the unfiltered total in the same run: city 83,787 -> 11,441 for Lahore, make 83,787 -> 22,879 for Toyota, make+model -> 9,993 for Toyota Corolla, automatic -> 48,228, imported -> 22,872, PakWheels-inspected -> 2,688, with video -> 186. The one filter that does not narrow anything is not offered: the city filter is accepted on the parts marketplace and silently ignored there (58,934 before, 58,934 after), so part_search takes keyword, sort and page only.
Are bikes and spare parts the same endpoint as cars?▾
No, they are separate endpoints because they are genuinely different pages. The bike marketplace publishes no engine size, no gearbox and no stock status on its search rows, so those fields are absent from a bike row instead of returned empty; what it does publish is the engine class, and that is filled on 75 of 75 rows we measured. The parts marketplace publishes no city, no make and no bump time on its rows, and holds 24 rows a page instead of 25.
What happens with a dead or deleted ad id?▾
NOT_FOUND, not an empty success. PakWheels answers a real 404 for an id that does not exist, and we pass that through. A detail page also shows five similar ads with their own prices, so we match the schema block to the id you asked for and refuse rather than hand you a neighbour's car.
Which filter values are valid?▾
Call filter_options. It costs nothing and no request, and returns every enum we accept with the label PakWheels itself prints next to it: 20 body types, 7 fuels, 23 colours, 9 origin groups, 8 provinces, 8 sort orders. Make, model and city are open text in the site's own url spelling ('toyota', 'corolla', 'lahore'), so they are listed as open fields rather than invented into a closed list.
What is the PakWheels API?▾
PakWheels API is a ReefAPI endpoint group for pakistan's car, bike and auto-parts marketplace It returns live JSON through POST requests under /pakwheels/v1.
Is the PakWheels API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. PakWheels calls use the same shared credit balance as every other ReefAPI engine.
Do I need a PakWheels login or account?▾
No login to PakWheels 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 PakWheels data?▾
The page example is captured from a live car_search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the PakWheels API use?▾
PakWheels 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 PakWheels from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call pakwheels actions with the same key, credit pool and JSON envelope used by normal REST requests.
99 Classifieds & Second-hand APIs on the same key
One key, one credit pool, one response envelope. If you are pulling PakWheels, 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-02.