Classifieds feed
Retail classifieds aggregated from portals across Europe. Not auction inventory: no bidding, no auction end date, no detail payload and no gallery — a single remote thumbnail per listing. Classifieds are therefore never a valid site value on /api/search and never appear in /api/sites.
Ended and paid-placement ("promoted") rows are excluded from every response. Every multi-value filter is OR within the parameter and AND across parameters. A non-numeric value on a numeric parameter is a 400.
Selecting portals. The vocabulary is ~680 origin portals wide, which is why source_exclude exists — it is the only practical way to say "everything but". Unlike site on the auction side, an unrecognised portal is not an error: the vocabulary is scraped rather than fixed, so an unknown value simply matches nothing (or excludes nothing). A listing with no recorded portal survives an exclusion.
Reading total. The feed holds ~9.7M listings, so counting is bounded rather than exhaustive — see total_capped and total_unavailable. When you do not need a count, include_total=false is always the fastest option.
Request
- Base URL: https://api.thecarapi.com
- URL: https://api.thecarapi.com/api/classifieds/listings
- Auth: one of:
- API key in header X-API-Key
- HTTP bearer
- API key in query parameter api_key
Query parameters
Comma-separated country codes, case-insensitive.
Comma-separated brands, exact as published.
Comma-separated models.
Comma-separated normalized fuels.
Comma-separated normalized gearboxes.
Comma-separated seller types.
Comma-separated origin portals, case-insensitive.
Comma-separated origin portals to leave out, case-insensitive.
Lower bound on the public EUR price.
Upper bound on the public EUR price.
Lower bound on registration year, inclusive.
Upper bound on registration year, inclusive.
Lower bound on mileage in kilometres.
Upper bound on mileage in kilometres.
Substring match on title and description. Has no index behind it, so it is the filter most likely to set total_unavailable.
Only listings that carry a thumbnail.
false returns total: null and skips the count.
Page size. Capped at pagination.max_limit from GET /api/contract (100 by default); larger values are clamped down rather than rejected. Do not combine with page_size — that is a 400.
0-based row offset. Do not combine with page — that is a 400. Bounded by pagination.max_offset (5000 by default) on archive, catalog, top-offers and classifieds; /api/search and /api/listVehicles have no offset cap.
1-based page number; maps to offset = (page - 1) * limit. Do not combine with offset.
Alias for limit. Do not combine with limit.
Headers
Echo back the ETag from your last response for this URL. An unchanged page answers 304 Not Modified with no body. ETags are weak, so the tag stays valid whether or not the body came back compressed.
Response
Matching classifieds.
Example response
{
"success": true,
"contract_version": "2026-09-03",
"listings": [
{
"reference_id": "tp-91744022",
"title": "BMW 320d Touring",
"brand": "BMW",
"model": "3 Series",
"engine": "320d",
"year": 2016,
"price_eur": 12500.5,
"mileage_km": 180000,
"fuel_norm": "diesel",
"gearbox_norm": "automatic",
"colour": "black",
"doors": "5",
"country": "Germany",
"country_code": "de",
"region": "Bayern",
"seller_type": "dealer",
"source_site": "mobile.de",
"photo_count": 12,
"published": "2026-07-30"
}
]
}Changes
No recorded changes to this operation across all 1 revision of this API.