Every vehicle advert in Ukraine, with the odometer in the right unit
The AUTO.RIA API turns auto.ria.com, Ukraine's largest vehicle marketplace, into clean JSON in eight actions.
8 active endpoints, on 1, 2 and 3 credit tiers.
- POST/autoria/v1/search
- POST/autoria/v1/search_ids
- POST/autoria/v1/listing
- POST/autoria/v1/listings
- POST/autoria/v1/makes
- POST/autoria/v1/models
- POST/autoria/v1/regions
- +1 more
What AUTO.RIA endpoints does ReefAPI ship?
8 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
AUTO.RIA API
8 of 8 endpoints, ready to run
Up to 40 full Ukrainian vehicle adverts a call across eight catalogues and three surfaces: advert id, URL, make, model, year, price in USD, UAH and EUR with the seller's own currency named, odometer in kilometres, fuel and engine size, gearbox, body style, trim, colour, region and city, VIN and plate where published, every photo, AUTO.RIA's own condition flags, and the dealer or private seller.
// 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 AUTO.RIA API works
AUTO.RIA 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 market size to one advert's VIN, plate and photos
Three calls: how big the slice is, which adverts are in it, and the full record of the ones you want.
{"category": "cars", "make": "Audi", "model": "Q7", "year_from": 2018, "max_results": 100}One upstream read gives AUTO.RIA's own exact count for the slice plus up to 100 advert ids. 3,172 Audi Q7 adverts were live on 2026-10-02 before the year filter.
{"listing_ids": "<first 25 ids, comma-separated>"}Up to 25 full adverts in one call: price in USD, UAH and EUR, odometer in kilometres, trim, generation, colour, region, every photo URL and the seller. Ids AUTO.RIA does not know come back in not_found rather than failing the call.
{"listing_id": "38876558"}One advert on its own, same shape. A sold advert answers with is_sold, sold_at_utc and from_archive; only an id AUTO.RIA never issued returns NOT_FOUND.
Four credits for the three calls: search_ids 1, listings 2, listing 1. search_ids is the cheapest way to size a filter because it answers with the count and up to 100 ids in one call.
curl -X POST https://api.reefapi.com/autoria/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"category":"cars","max_results":5}'{
"ok": true,
"data": { … },
"meta": {
"api": "autoria",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}AUTO.RIA prints the same fact twice in places, and the units are not the obvious ones
Two of the most important numbers on an advert — the price and the odometer — each appear twice in AUTO.RIA's own data, in different units or different words. The API publishes both halves and tells you when they disagree, instead of picking one behind your back.
| What AUTO.RIA publishes | What the API returns | Why it matters |
|---|---|---|
| An odometer of 83 next to the words "83 тис. км" | mileage_km 83000 · mileage_text "83 тыс. км" | The number is in THOUSANDS of kilometres. Taken at face value every mileage in the catalogue would be a thousand times too low. Checked against the advert's own public page on six adverts: six of six matched after the conversion. |
| "без пробега" (no mileage) with an odometer of 0 | mileage_km 0 · mileage_text "без пробега" | Zero is an answer, not a gap — a new car and an unregistered trailer both read zero. mileage_km is filled on 60 of 60 sampled adverts. |
| "без пробега" with an odometer of 10 | mileage_km 10000 · mileage_conflict true | The source contradicts itself on roughly 1 advert in 60. The number is published and the disagreement is flagged, with a per-call count in meta. |
| 36000 and "36 000" in the same advert | price_usd 36000 · price_display_usd "36 000" · price_conflict false | Two copies of the price, compared on every row. Zero disagreements across 120 sampled adverts in two runs; and against the price box on the advert's own page, six of six matched. |
| $36,000 and ₴1,615,680 and €31,494, with the seller's currency marked USD | price_usd · price_uah · price_eur · price_currency "USD" | All three are published as AUTO.RIA publishes them; the other two are its own conversion. None is computed from another here, so nothing drifts with an exchange rate we invented. |
| "Бензин, 3 л." in a single field | fuel "Бензин" · engine_capacity_l 3.0 · fuel_text "Бензин, 3 л." | Fuel type and engine size share one field upstream. Both halves are returned separately and the raw string is kept. "Електро" has no displacement and "Не вказано" (not specified) becomes null rather than the literal words. |
| A new-car advert numbered 2085460 and a used-car advert numbered 2085460 | listing_type "new" vs "used" on listing; search routes each id by itself | New and second-hand adverts are numbered in separate, overlapping ranges, so the same id is two different vehicles. search handles it per row; for an id you bring yourself, say which range it came from. |
Timestamps arrive with no timezone marker. AUTO.RIA prints Kyiv local time — measured, by comparing the newest advert's stamp against the clock at the moment of the call — so each one is returned twice: added_at_local exactly as AUTO.RIA prints it, added_at_utc converted, and source_timezone naming the assumption.
What the AUTO.RIA API covers, measured on 2026-10-02
Every figure on this page was read off the live source in the run recorded for it, not estimated.
cars 317,666 · motorbikes and scooters 18,587 · trucks and vans 11,278 · trailers 9,205 · buses 3,981 · special machinery 2,914 · boats and watercraft 1,285 · agricultural machinery 189. One call shape for all eight, and each one has its own acceptance case because a parser that works on cars can silently return nothing on buses.
Second-hand stock already in Ukraine 317,666 · new vehicles from dealers and importers 7,301 · offered to order or in transit 4,330 · all three at once 324,968. New adverts are numbered in their own id range, which overlaps the used one, so each id is routed by the label the source itself puts on it.
Every filter was measured against the unfiltered total of 317,671 in the same run AND against the rows it returned. make 22,598 · make+model 3,172 · year from 64,773 · year to 64,537 · price from 25,895 · price to 49,086 · mileage from 158,999 · mileage to 6,897 · engine from 6,987 · engine to 46,579 · diesel 94,494 · electric 15,775 · automatic 147,876 · SUV body 103,858 · region 61,736 · city 47,374 · dealer 20,830 · private 296,845 · no accidents 233,006 · accident history 84,669 · video 8,255 · photo 316,269 · VIN-verified 275,881 · open to bidding 198,128. Filters AUTO.RIA accepts and then ignores are deliberately not offered, and neither are two that move the total but whose meaning could not be established.
price_usd, price_uah and price_eur are all filled on 60 of 60 sampled adverts, with price_currency naming the one the seller actually set. The advert's own second copy of the price is compared on every row: zero disagreements across 120 sampled adverts in two runs, and six of six matched the price box on the advert's own public page.
AUTO.RIA publishes the reading in thousands of kilometres; the API returns kilometres and keeps AUTO.RIA's own wording alongside. Verified against the advert's own public page on six adverts, six of six. Where the source's two copies disagree — about one advert in 60 — mileage_conflict says so instead of a silent pick.
Counted on 60 distinct adverts across eleven surfaces, identically in both runs. Always: advert id, URL, title, make, model, year, all three prices, seller currency, odometer, city, region, photo count, photo URLs, added/updated/expiry timestamps, seller. Sometimes: description 57 of 60 · body style 54 · fuel 45 · colour 43 · VIN 40 · gearbox 37 · engine size 33 · drive type 30 · generation 26 · technical condition 22 · modification 20 · trim 17 · plate 14.
20 of the 60 sampled adverts were from dealers, with the business name, AUTO.RIA dealer page, logo, dealer type and verification flags; 40 were private, carrying AUTO.RIA's own numeric user id. The phone is passed through exactly as AUTO.RIA prints it on the public advert, partly masked, and is never completed.
100 rows is AUTO.RIA's own page ceiling — 101, 150, 200 and 500 all returned exactly 100 — and page 500 still returned fresh ids. Two identical unsorted calls shared 100 of 100 ids and three unsorted pages of 100 gave 300 unique rows, so the default order is safe to page. newest drifts by about one row in 400.
No unmasked seller phone. No feature or options list — trim and modification names are what the source gives. No bid, bid count or auction price; auction_possible only means the seller is open to bidding. No price history, view count or seller rating. No drive-type filter: drive type is returned but every filter name for it was accepted and then ignored. Two fuel ids in AUTO.RIA's own numbering return zero rows and are therefore not offered.
On 2026-10-02: 88 cases, 100 % in each run. 13 surface cases, 25 filter-bite cases, 9 sort and paging cases, 6 round-trips where a search id resolved to the same advert AND the same price, a 25-id batch, 10 reference-list cases, 4 sold/archived adverts and 17 negative cases each landing on the right error code. Zero markup leaks across every string in all 120 sampled rows.
What people build with AUTO.RIA
The jobs this data is most often used for.
endpoints
credits per call
Price a car against the live Ukrainian market: search with make, model, year band and odometer band, read total_available for the size of the comparable set and the rows for the actual asking prices in USD. The odometer filter is in kilometres on our side and rounds to the nearest thousand, because that is the granularity AUTO.RIA's own filter has.
Watch a dealer's inventory: search with seller_type=dealer and a region, sorted by newest, then read seller.dealer_id off the rows to group by dealership. 20,830 dealer adverts live on 2026-10-02 against 296,845 private ones, so the dealer slice is the one worth polling.
Build an EV or hybrid dataset for Ukraine: fuel takes ten values, including the ones most catalogues flatten into one: electric 15,775 adverts, hybrid HEV, plug-in PHEV 2,208, mild MHEV 815 and range-extender REEV 39. engine_from_l and engine_to_l narrow by displacement where there is one.
Size a market before you build on it: search_ids answers any filter combination with AUTO.RIA's own exact count and up to 100 ids in a single upstream read. Twenty-four filter combinations cost twenty-four cheap calls, which is how the coverage numbers on this page were produced.
What AUTO.RIA 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/autoria/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"category":"cars","max_results":5}'import requests
r = requests.post(
"https://api.reefapi.com/autoria/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"category": "cars",
"max_results": 5
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up AUTO.RIA.
Get a free key →What does search cover, and how many adverts are in each catalogue?▾
Eight catalogues in one call shape via the category parameter. Measured 2026-10-02: cars 317,666 · motorbikes and scooters 18,587 · trucks and vans 11,278 · trailers 9,205 · buses 3,981 · special machinery 2,914 · boats and watercraft 1,285 · agricultural machinery 189. Within cars you also choose the surface with listing_type: used 317,666, new 7,301, order 4,330, or all 324,968. Each of the eight categories and each of the surfaces has its own case in the acceptance suite, and all thirteen returned full rows in both runs — because a parser that works on cars can silently return nothing on buses.
How deep can one search go?▾
100 rows a page on search_ids and 40 a page on search, and paging is genuinely deep: page 500 still returned fresh ids. The 100-row page is AUTO.RIA's own ceiling — asking for 101, 150, 200 or 500 all returned exactly 100 — and total_available always reports the real size of your result set, which is AUTO.RIA's own exact count, not an estimate. search is capped lower at 40 because each row is a separate full advert read; use search_ids to walk a large result set and listings to pull the adverts you want in batches of 25.
Is paging reliable if I do not set a sort?▾
Yes, and it was measured rather than assumed. Two identical unsorted calls returned the same 100 ids, 100 of 100, and three consecutive unsorted pages of 100 gave 300 rows with 300 unique ids. So sort defaults to relevance, which is AUTO.RIA's own ranking. newest drifts very slightly while you page — four pages of 100 gave 400 rows and 399 unique, because adverts keep arriving — and that is reported rather than hidden. price_asc and price_desc share none of their first 100 rows, so they are genuinely opposite orders.
Which filters actually work?▾
The twenty-four on the page, each of which passed two tests: it moved AUTO.RIA's own total, and the rows it returned carried the value. For example seller_type=dealer returns 20,830 adverts and every sampled row has a named dealer, while seller_type=private returns 296,845 and no sampled row has one — and 20,830 + 296,845 accounts for the whole 317,671 catalogue. Drive type is a deliberate gap: it is returned on every advert that publishes it, but every way of filtering on it was accepted with HTTP 200 and then ignored, so there is no drive-type filter here rather than one that quietly does nothing.
What does a sold advert do?▾
It comes back as a successful row, carrying is_sold true, sold_at_local and sold_at_utc, is_active false and from_archive. Sold and archived adverts are an answer about the market, not an error — three of the four historical ids we audited were sold, with sale dates in 2019, 2021 and 2023. Only an id AUTO.RIA has never issued returns NOT_FOUND. An empty filtered result is also an answer: a search with no matches returns ok, zero rows, a total of zero, and a note in meta saying which filters produced it.
Do I get the seller?▾
Yes, as AUTO.RIA publishes it. For a dealer: the business name, its AUTO.RIA dealer page, logo, dealer type and the verification flags AUTO.RIA shows. For a private seller: AUTO.RIA's own numeric user id. The phone number is published exactly as AUTO.RIA itself prints it, which is partly masked on the public advert — we pass that string through and make no attempt to complete it. In a 60-advert sample across eleven surfaces, 20 adverts were from dealers and 40 from private sellers.
Do I get the VIN and the registration plate?▾
Where the seller publishes them. In the 60-advert sample the VIN was present on 40 and the plate on 14; both are null on the rest, never invented. vin_shown_by_seller tells you whether the seller agreed to show the VIN, and vin_verified as a filter narrows the catalogue to the 275,881 adverts whose VIN AUTO.RIA has checked. There is no vehicle-history report here: AUTO.RIA sells those separately and does not publish their contents.
How complete is a row?▾
Counted on 60 distinct adverts across eleven surfaces, identically in both runs. Always present: advert id, URL, title, make, model, year, all three prices, the seller's currency, odometer in kilometres and in AUTO.RIA's own words, city, region, photo count, every photo URL, the added, updated and expiry timestamps, and the seller block. Often present: description 57, body style 54, fuel 45, colour 43, VIN 40, gearbox 37, engine size 33, drive type 30, generation 26, technical condition 22, modification 20, trim 17, plate 14. Those are the numbers, not a promise: a field AUTO.RIA leaves blank comes back null.
What language is the text in?▾
AUTO.RIA's own, which is a Ukrainian and Russian mix — body styles and colours in Ukrainian, some info-bar text in Russian — and we return it as published rather than translating it. We checked whether the source has a language switch on this surface: four different language settings returned the same payload within four bytes, so there is nothing to switch. Every slug field (make_slug, model_slug, body_type_slug, colour_slug, region_slug) is AUTO.RIA's own Latin-script value, so you have a stable key as well as the display name.
How do I find the right make, model, region or body-style id?▾
Four free actions return AUTO.RIA's own lists: makes (397 for cars, 181 for trucks), models for one make (99 for Audi), regions (23 oblasts, or the 134 cities of a region), and reference for body styles, gearboxes, drive types and the category list. You can also just pass a name — make: "Audi", region: "Київська" — and an unknown name is rejected with the nearest matches named instead of silently returning the whole catalogue.
What is the AUTO.RIA API?▾
AUTO.RIA API is a ReefAPI endpoint group for ukraine's largest vehicle marketplace: 325,000 live adverts across cars, motorbikes, trucks, buses, trailers, machinery and boats, with price in three currencies, vin, plate and the dealer or private seller. It returns live JSON through POST requests under /autoria/v1.
Is the AUTO.RIA API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. AUTO.RIA calls use the same shared credit balance as every other ReefAPI engine.
Do I need an AUTO.RIA login or account?▾
No login to AUTO.RIA 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 AUTO.RIA data?▾
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
99 Classifieds & Second-hand APIs on the same key
One key, one credit pool, one response envelope. If you are pulling AUTO.RIA, 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.