Otomoto
Otomoto
/otomoto/v1/search1 creditSearch otomoto.pl the way its own visitors do: pick a section (cars, vans, motorcycles), narrow by make and model, by voivodeship or by city with a radius, and apply otomoto's own price, year, mileage, engine power, engine capacity, fuel, gearbox, body, condition, damage and seller-type filters. Every ad comes back with the price in PLN cross-checked against otomoto's own price string, the published model year, the odometer reading with the site's own formatted string beside it, fuel and gearbox in both otomoto's code and its Polish label, engine power and capacity, the city and voivodeship, whether a private person or a dealer is selling (otomoto's own flag, never inferred), otomoto's below/at/above-market price indicator, the CEPiK history-check flag, and whether the ad is a paid promoted placement. Promoted ads are returned in the position otomoto gives them and flagged, never dropped. Sort by price, mileage, engine power or posting date, and page through the whole result set. The answer repeats every filter otomoto actually applied, with the canonical slug it resolved to, and lists every model otomoto publishes for the chosen make with its live ad count — so the next call can drill down without guessing a slug.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| category = osobowe | optional | osobowe · dostawcze · motocykle-i-quady | Which otomoto section to search. These are otomoto's own URL sections; the category id each one resolves to is returned in filters_applied. |
| make | optional | — | A make exactly as otomoto spells it in its own URLs: bmw, audi, volkswagen, mercedes-benz, skoda. Case and spaces are normalised. If otomoto does not recognise the make the call is refused — it is NOT quietly widened to every car, which is what the site itself does. |
| model | optional | — | A model slug as otomoto spells it (x3, seria-3, golf, a4). Requires make. Every model otomoto publishes for a make, with its live ad count, comes back in related_links.models of any search for that make. |
| location | optional | — | A Polish voivodeship or city slug as otomoto spells it (mazowieckie, warszawa, krakow, slaskie, wroclaw). otomoto resolves it itself to a region or a city and echoes which; the answer is in filters_applied. A city search also carries a radius (see distance_km). An unrecognised location is refused. |
| distance_km | optional | 0–500 | Search radius in kilometres around a city given in location. otomoto's own default for a city is 50 km. Ignored for a voivodeship, which has no radius. |
| page = 1 | optional | 1–500 | Result page, from 1. otomoto serves 32 ads per page and the page size is fixed by the site, not by this API. |
| sort = relevance | optional | relevance · featured · newest · price_asc · price_desc · mileage_asc · mileage_desc · power_asc · power_desc | Result order, using otomoto's own published sort ids. |
| seller_type | optional | private · business | Whether the ad is posted by a private seller or a business. This is otomoto's own filter, and every row also carries the seller type the site publishes for it, so the two can be checked against each other (measured: 32/32 rows agreed on each side). |
| condition | optional | new · used | New or used, as otomoto's own new/used filter defines it. |
| fuel_type | optional | — | otomoto's fuel value: petrol, diesel, petrol-lpg, petrol-cng, hybrid, plugin-hybrid, electric, hydrogen, ethanol. Every row returns the value and otomoto's own Polish label, so the vocabulary can be read back from any result. |
| gearbox | optional | — | otomoto's gearbox value: manual or automatic. Rows return the value and otomoto's Polish label. |
| body_type | optional | — | otomoto's body value: suv, sedan, kombi, compact, city-cars, minivan, coupe, cabrio, small-cars. |
| damaged | optional | — | true returns only damaged vehicles, false only undamaged ones. Omit to include both, which is otomoto's default. |
| price_from | optional | 0– | Lowest price in PLN, inclusive, as otomoto's own price filter applies it. |
| price_to | optional | 0– | Highest price in PLN, inclusive. |
| year_from | optional | 1900–2100 | Earliest model year, inclusive. |
| year_to | optional | 1900–2100 | Latest model year, inclusive. |
| mileage_from | optional | 0– | Lowest odometer reading in kilometres, inclusive. |
| mileage_to | optional | 0– | Highest odometer reading in kilometres, inclusive. |
| engine_power_from | optional | 0– | Lowest engine power in metric horsepower (KM), inclusive. |
| engine_power_to | optional | 0– | Highest engine power in metric horsepower (KM), inclusive. |
| engine_capacity_from | optional | 0– | Smallest engine capacity in cm3, inclusive. |
| engine_capacity_to | optional | 0– | Largest engine capacity in cm3, inclusive. |
/otomoto/v1/listing/detail1 creditThe full otomoto offer record from an offer URL or its ID token: title, the price in PLN with otomoto's own VAT and invoice labels, the seller's type (private person or dealer), the dealer's trading name, page and how many ads it currently has, the city, voivodeship and country, the whole published specification grouped exactly as otomoto groups it (basic information, technical specification, condition and history, financing), every equipment item by category, every photo at full size, the seller's own description with its HTML stripped, the CEPiK history-check flag, the posting and last-update timestamps, the ad status, and whether the ad carries a paid promotion. Numbers otomoto publishes twice — mileage, year, engine power, engine capacity — are returned only when the site's own formatted string agrees with its raw value. Seller phone numbers and street addresses are deliberately not read and not returned. A withdrawn or unknown offer answers NOT_FOUND.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| listing | required | — | An otomoto offer URL, or the listing_id at the end of it (…-ID6IgtYL.html → ID6IgtYL; an ad cross-posted from OLX ends …-OLX_ID6IguOF.html → OLX_ID6IguOF, and the OLX_ part is required). Search rows carry both `url` and `listing_id`. The numeric `ad_id` is otomoto's internal id and does NOT address an offer page; passing it is refused rather than reported as missing. |
/otomoto/v1/makes1 creditThe makes otomoto itself lists on a section's landing page, ranked by how many live ads each one carries, with the exact slug a search needs. This is otomoto's own published shortlist, not its full make register — it is as long as otomoto makes it (20 entries on the cars section, measured), and `count` says how many came back. Use it to get a slug right before searching, because otomoto silently ignores a make it does not recognise and answers with the whole section instead. Passing a make returns that make's model shortlist instead, each model with its slug and live ad count.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| category = osobowe | optional | osobowe · dostawcze · motocykle-i-quady | Which otomoto section to search. These are otomoto's own URL sections; the category id each one resolves to is returned in filters_applied. |
| make | optional | — | A make exactly as otomoto spells it in its own URLs: bmw, audi, volkswagen, mercedes-benz, skoda. Case and spaces are normalised. If otomoto does not recognise the make the call is refused — it is NOT quietly widened to every car, which is what the site itself does. |
curl -X POST https://api.reefapi.com/otomoto/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"make":"bmw"}'{
"ok": true,
"data": { /* the result */ },
"meta": {
"latency_ms": 240,
"record_count": 12,
"completeness_pct": 100
},
"error": null
}Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.
Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.
Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.
No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.
Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.