Top offers
Live auctions our pipeline judged to be priced below their market reference. Same deals as /api/search?sort=top_offers, but each card additionally carries the reference the verdict was made against.
Feed of auctions priced below their market reference, newest comparison first.
Requires the top-offers scope.
Parameters
sitestring · query stringComma-separated source slugs. An unknown value returns 400.
Example ecarstrade·Where the value comes from /api/sites -> sites[].name
site_excludestring · query stringComma-separated source slugs to leave out. Same rules as on /api/search.
Example copart·Where the value comes from /api/sites -> sites[].name
steeringenum · query stringLeft- or right-hand drive.
Example left·Where the value comes from left | lhd | right | rhd — any other value is a 400.
brandstring · query stringExact clean_make, case-insensitive.
Example BMW·Where the value comes from /api/search -> results[].clean_make
modelstring · query stringExact clean_model, case-insensitive.
Example 3 Series·Where the value comes from /api/search -> results[].clean_model
countrystring · query stringVehicle country code, case-insensitive.
Example DE·Where the value comes from /api/countries -> country_details[].code
year_from / year_tointeger · query stringFirst-registration year bounds.
Example 2018 / 2024·Where the value comes from Year bounds chosen by your user.
kilometers_from / kilometers_tointeger · query stringMileage bounds.
Example 0 / 150000·Where the value comes from Mileage bounds chosen by your user.
price_from / price_tointeger · query stringPublic EUR price bounds.
Example 5000 / 25000·Where the value comes from EUR budget chosen by your user.
min_savings_pctinteger · query stringOnly offers saving at least this percentage.
Example 20·Where the value comes from Threshold chosen by your application.
sortenum · query stringDefault savings_pct.
Example savings_pct·Where the value comes from Choose savings_pct, savings, price_low, price_high, or newest.
limit / offsetinteger · query stringOr page_size / page. limit caps at 100.
Example 24 / 0·Where the value comes from Pagination state in your application.
Example requests
GET https://api.thecarapi.com/api/top-offers?site=openlane&min_savings_pct=20&limit=24GET https://api.thecarapi.com/api/top-offers?brand=BMW&country=DE&sort=savings&page=2&page_size=20Example response
{
"success": true,
"results": [
{
"auction_id": 8842711,
"site_name": "openlane",
"car_name_en": "BMW 320d Touring",
"clean_make": "BMW",
"clean_model": "3 Series",
"public_price_eur": 9000,
"is_top_offer": true,
"top_offer_savings": 2500,
"top_offer_savings_pct": 21.7,
"market_reference": {
"price_eur": 11500,
"mileage": 165000,
"km_difference": -15000,
"explanation": "Rule: this car must save at least 1,800 EUR — ..."
}
}
],
"total": 318,
"limit": 24,
"offset": 0,
"total_pages": 14
}What you get back
results[]object[]A standard search result card — every field documented in the data dictionary — plus the top-offer fields below.
is_top_offerbooleanAlways true on this feed. Also present on /api/search cards.
top_offer_savingsnumberAbsolute EUR saving against the market reference.
top_offer_savings_pctnumberSaving as a percentage of the reference price. Default sort key.
market_reference.price_eurnumberThe reference price this car was measured against.
market_reference.mileageintegerThe reference mileage, so you can judge whether the comparison is like-for-like.
market_reference.km_differenceintegerThis car’s mileage minus the reference. Negative means this car has done fewer kilometres.
market_reference.explanationstringThe rule that admitted this car to the feed, in words — e.g. the minimum EUR saving it had to clear.