API (v1)
Versioned, read-only JSON endpoints for everything you see on the site. Free for fair use; rate-limited at the edge.
Endpoints
GET https://carstats.pages.dev/api/v1/index.json โ top-level rollup: every model with KPIs, comparative spreads, sold/movers globals.
GET https://carstats.pages.dev/api/v1/{slug}.json โ per-model bundle: market_state, pricing_compass, active listings with buy signal + cut probability, mileage tiers, color rollup, spec premium, recent movers, BaT summary.
GET https://carstats.pages.dev/api/v1/dealers.json โ 312-dealer leaderboard with archetypes + trust score + flags.
GET https://carstats.pages.dev/api/v1/bat.json โ BaT cross-reference: resurfaced VINs, repeat-VIN history, seller scorecard, bid log analytics.
Example
{
"state": "Stable",
"liquidity_score": 44,
"median_ask": 319998,
"confidence_adjusted_price": 319900,
"bat": {
"bat_model_query": "ferrari-296",
"median_sold_6mo": 297000,
"rnm_rate": 0.49
}
} Schema notes
Update cadence โ bundles refresh nightly via the carstats launchd job. generated_at ISO-8601 timestamp at the root of each bundle.
Schema versioning โ this is v1. Breaking changes will publish under /api/v2/. Additive fields will land in v1 without version bump.
Caching โ Cloudflare edge cache, ~1h TTL. If you need real-time, you're looking at the wrong endpoint anyway (this is a daily-batch dataset).
VIN data caveat โ VINs surface in relisted_vins and bat.resurfaced only. These are scraped from public BaT auction pages where VINs are always public.
List of model slugs
| Slug | Label | Brand | Active |
|---|---|---|---|
ferrari-296-gtb | Ferrari 296 GTB | Ferrari | 124 |
ferrari-296-gts | Ferrari 296 GTS | Ferrari | 109 |
ferrari-sf90-spider | Ferrari SF90 Spider | Ferrari | 76 |
ferrari-sf90-stradale | Ferrari SF90 Stradale | Ferrari | 82 |
lambo-aventador-sv-coupe | Aventador SV Coupe | Lamborghini | 4 |
lambo-aventador-svj-coupe | Aventador SVJ Coupe | Lamborghini | 11 |
lambo-huracan-evo-awd | Huracan EVO AWD | Lamborghini | 15 |
lambo-huracan-evo-rwd | Huracan EVO RWD | Lamborghini | 25 |
lambo-huracan-performante | Huracan Performante | Lamborghini | 7 |
lambo-huracan-sterrato | Huracan Sterrato | Lamborghini | 14 |
lambo-huracan-sto | Huracan STO | Lamborghini | 9 |
lambo-huracan-tecnica | Huracan Tecnica | Lamborghini | 34 |
mclaren-675lt | McLaren 675LT | McLaren | 3 |
mclaren-750s-coupe | McLaren 750S Coupe | McLaren | 8 |
mclaren-750s-spider | McLaren 750S Spider | McLaren | 8 |
mclaren-765lt-coupe | McLaren 765LT Coupe | McLaren | 13 |
mclaren-765lt-spider | McLaren 765LT Spider | McLaren | 7 |
nissan-gtr-2017plus-non-nismo | Nissan GT-R 2017+ (non-Nismo) | Nissan | 43 |
nissan-gtr-nismo | Nissan GT-R Nismo | Nissan | 4 |
porsche-911-gt3-992-1-coupe | 911 GT3 Coupe (992.1, wing) | Porsche | 53 |
porsche-911-gt3-992-2-coupe | 911 GT3 Coupe (992.2, wing) | Porsche | 115 |
porsche-911-gt3-rs-2024 | 911 GT3 RS (2024+) | Porsche | 20 |
porsche-911-st-2024 | 911 S/T (2024) | Porsche | 16 |
porsche-gt3-touring-992-1 | 911 GT3 Touring (992.1, 2022โ2024) | Porsche | 34 |
porsche-gt3-touring-992-2 | 911 GT3 Touring (992.2, 2025+) | Porsche | 23 |
Fair use
Read-only access is free. If you're building a product on top of this data, ping us (GitHub issues) so we know about you and can give a heads-up before schema changes.
Respect the edge cache โ there's no upside to bursting requests. The data only changes once a day.