Structured vehicle data for Germany: brands, models, trims (powertrain variants), technical details, prices, EV fields and comparison. JSON · snake_case · REST
Get your first response in three steps:
curl "https://leasingfriday.de/api/v1/trims?brand=tesla&has_ev_data=true&limit=3" \
-H "X-API-Key: YOUR_KEY"{
"data": [
{
"id": 1333,
"name": "Model 3 Performance AWD",
"year": 2025,
"brand": { "name": "Tesla", "slug": "tesla" },
"model": { "name": "Model 3", "slug": "model-3" },
"fuel_type": "Elektro",
"horsepower": 460,
"torque_nm": 660,
"acceleration_0_100": 3.1,
"top_speed_kmh": 262,
"ev_data": {
"battery_capacity_kwh": 78.1,
"electric_range_km": 528,
"charging_ac_kw": 11.0,
"charging_dc_kw": 250.0
},
"dimensions": {
"length_mm": 4720,
"width_mm": 1849,
"height_mm": 1441,
"trunk_volume_l": 594,
"tank_volume_l": null
},
"towing": { "payload_kg": null, "max_towing_weight_kg": 1000 },
"quality": { "score": 92, "source": "spec_db", "is_generated": false }
}
],
"pagination": { "page": 1, "limit": 3, "total": 12, "total_pages": 4 }
}The REST API lives at /api/v1/*. The website only shows a demo excerpt; full depth (all trims, EV data, dimensions, quality, bulk filters) is available only via the API.
Updated daily – Our vehicle data (prices, leasing availability, technical specs and EV fields) is refreshed automatically every day. Use the updated_since filter to fetch only changed records.
EU / EEA market data (not US)Data reflects the European (EU/EEA) market, not US vehicle specifications. Horsepower/kW, trim variants, range figures (e.g. WLTP vs. EPA) and other fields may differ from US manufacturer data.
https://leasingfriday.de/api/v1Local: http://localhost:3000/api/v1
| Method | Path | Description |
|---|---|---|
| GET | /brands | All brands |
| GET | /models | Models (filters, pagination, sorting) |
| GET | /models/{id} | Single model including all trims |
| GET | /trims | Trims (filters, pagination, sorting) |
| GET | /trims/{id} | Single trim |
| GET | /compare?trims=… | Compare up to 5 trims |
In production a valid API key is required. The key is provided via RapidAPI. In local development (VEHICLE_DATA_API_KEYS not set) requests without a key are accepted.
You can send the key using either header (pick one):
X-API-Key: sk_live_abc123…Authorization: Bearer sk_live_abc123…curl "https://leasingfriday.de/api/v1/brands" \
-H "X-API-Key: sk_live_abc123"{
"error": "unauthorized",
"message": "Missing or invalid API key"
}When using RapidAPI, authentication and billing are fully handled there – you follow the standard RapidAPI flow. For direct access outside RapidAPI, send the key via X-API-Key or Authorization: Bearer.
| Attribute | Value |
|---|---|
| Window | 1 minute (rolling) |
| Default limit | 120 requests / minute / key or IP |
| Identification | API key (first 16 chars) or IP address |
| Header when exceeded | Retry-After (seconds) |
| HTTP status | 429 Too Many Requests |
Limits may differ per RapidAPI plan. When exceeded you receive:
HTTP/1.1 429 Too Many Requests
Retry-After: 42
{
"error": "rate_limit_exceeded",
"message": "Too many requests",
"retry_after": 42
}List endpoints (/models, /trims) return a pagination object:
"pagination": {
"page": 1, // current page (1-based)
"limit": 20, // items per page
"total": 87, // total matches
"total_pages": 5
}| Parameter | Default | Min | Max |
|---|---|---|---|
| page | 1 | 1 | ∞ |
| limit | 20 | 1 | 100 |
| order | asc | asc | desc | |
| Endpoint | sort values |
|---|---|
| /models | name (Standard), list_price, horsepower_default, leasing_rate |
| /trims | name (Standard), horsepower, torque_nm, acceleration_0_100, top_speed_kmh, electric_range_km |
GET /brandsAll car brands, sorted alphabetically.
| Parameter | Type | Example | Description |
|---|---|---|---|
| country | string | DE | Filter brands by country (ISO 3166-1 alpha-2) |
curl "https://leasingfriday.de/api/v1/brands" -H "X-API-Key: YOUR_KEY"{
"data": [
{
"id": 1,
"name": "Audi",
"slug": "audi",
"country": null,
"logo_url": "https://raw.githubusercontent.com/…/audi.png",
"model_count": 38
},
{
"id": 2,
"name": "BMW",
"slug": "bmw",
"country": null,
"logo_url": "https://raw.githubusercontent.com/…/bmw.png",
"model_count": 45
}
],
"total": 42
}logo_url – direct URL to the brand logo (PNG thumbnail). Vehicle model images are not included in the API at this time.
GET /modelsModel list with rich filters and pagination.
| Parameter | Type | Example | Description |
|---|---|---|---|
| brand | string | bmw | Brand slug |
| fuel_type | string | Elektro | Fuel type (see field reference) |
| vehicle_class | string | Kompakt | Vehicle class |
| body_type | string | SUV | Body type |
| is_active | boolean | true | Currently on the market |
| is_leasing_available | boolean | true | Leasing offer available |
| availability_status | string | aktiv | aktiv | auslaufend | eingestellt | nie_in_de |
| min_price | number | 30000 | List price from (EUR) |
| max_price | number | 60000 | List price up to (EUR) |
| min_hp | integer | 200 | Horsepower from |
| max_hp | integer | 400 | Horsepower up to |
| updated_since | ISO 8601 | 2026-03-01T00:00:00Z | Only models with updated_at ≥ value. UTC recommended. Invalid dates are ignored. |
| page | integer | 1 | Page (from 1) |
| limit | integer | 20 | Results per page (1–100) |
| sort | string | list_price | name | list_price | horsepower_default | leasing_rate |
| order | string | desc | asc | desc |
curl "https://leasingfriday.de/api/v1/models?brand=bmw&fuel_type=Elektro&min_hp=300&sort=list_price&order=desc&limit=2" \
-H "X-API-Key: YOUR_KEY"{
"data": [
{
"id": 142,
"name": "iX M60",
"slug": "ix-m60",
"brand": { "name": "BMW", "slug": "bmw" },
"vehicle_class": "Oberklasse",
"body_type": "SUV",
"fuel_type": "Elektro",
"transmission": "Automatik",
"horsepower": 619,
"consumption": 21.9,
"engine_cc": null,
"co2_g_km": 0,
"list_price": 131900,
"leasing_rate": 1399,
"is_active": true,
"is_leasing_available": true,
"availability_status": "aktiv",
"year_from": 2022,
"year_to": null,
"trim_count": 3
}
],
"pagination": {
"page": 1,
"limit": 2,
"total": 7,
"total_pages": 4
}
}GET /models/{id}Single model including all related trims.
| Parameter | Type | Example | Description |
|---|---|---|---|
| id | integer (path) | 142 | Model ID |
curl "https://leasingfriday.de/api/v1/models/142" -H "X-API-Key: YOUR_KEY"{
"data": {
"id": 142,
"name": "iX M60",
"slug": "ix-m60",
"brand": { "name": "BMW", "slug": "bmw" },
"vehicle_class": "Oberklasse",
"body_type": "SUV",
"fuel_type": "Elektro",
"transmission": "Automatik",
"horsepower": 619,
"consumption": 21.9,
"engine_cc": null,
"co2_g_km": 0,
"list_price": 131900,
"leasing_rate": 1399,
"is_active": true,
"is_leasing_available": true,
"availability_status": "aktiv",
"year_from": 2022,
"year_to": null,
"trim_count": 3,
"trims": [
{
"id": 1501,
"name": "iX M60 AWD",
"year": 2025,
"fuel_type": "Elektro",
"engine_size": null,
"horsepower": 619,
"torque_nm": 795,
"consumption": 21.9,
"co2_emissions": 0,
"transmission": "Automatik",
"drivetrain": "Allradantrieb",
"acceleration_0_100": 3.8,
"top_speed_kmh": 250,
"doors": 5,
"seats": 5,
"weight": 2640,
"dimensions": {
"length_mm": 4953,
"width_mm": 1967,
"height_mm": 1695,
"trunk_volume_l": 500,
"tank_volume_l": null
},
"ev_data": {
"battery_capacity_kwh": 111.5,
"electric_range_km": 502,
"charging_ac_kw": 11.0,
"charging_dc_kw": 195.0
},
"towing": {
"payload_kg": 640,
"max_towing_weight_kg": 2500
},
"quality": {
"score": 95,
"source": "spec_db",
"is_generated": false
}
}
]
}
}404 if the ID does not exist: { "error": "not_found", "message": "Modell nicht gefunden" }
Note: This response includes all trims for the model by default and can be large for popular models. For targeted lists with pagination, /trims?model=<slug> is a better fit.
GET /trimsTrims (powertrain variants) with rich filters. Each trim includes nested objects for dimensions, ev_data, towing and quality.
| Parameter | Type | Example | Description |
|---|---|---|---|
| brand | string | tesla | Brand slug (via model) |
| model | string | model-3 | Model slug |
| fuel_type | string | Elektro | Fuel type |
| transmission | string | Automatik | Transmission |
| drivetrain | string | Allradantrieb | Frontantrieb | Hinterradantrieb | Allradantrieb |
| body_type | string | Limousine | Body type (model level) |
| is_active | boolean | true | Model currently on the market |
| is_leasing_available | boolean | true | Leasing offer available |
| min_horsepower | integer | 300 | Horsepower from |
| max_horsepower | integer | 600 | Horsepower up to |
| min_price | number | 25000 | Model list price from (EUR) |
| max_price | number | 80000 | Model list price up to (EUR) |
| min_range | integer | 400 | Electric range from (km) |
| max_range | integer | 700 | Electric range up to (km) |
| has_ev_data | boolean | true | Only trims with EV fields |
| has_dimensions | boolean | true | Only trims with length/width/height |
| updated_since | ISO 8601 | 2026-03-15T00:00:00Z | Only trims with updated_at ≥ value. UTC recommended. Invalid dates are ignored. |
| page | integer | 1 | Page (from 1) |
| limit | integer | 20 | Results per page (1–100) |
| sort | string | horsepower | name | horsepower | torque_nm | acceleration_0_100 | top_speed_kmh | electric_range_km |
| order | string | desc | asc | desc |
curl "https://leasingfriday.de/api/v1/trims?brand=audi&has_dimensions=true&min_horsepower=200&limit=3" \
-H "X-API-Key: YOUR_KEY"{
"data": [
{
"id": 805,
"name": "A4 45 TFSI quattro",
"year": 2025,
"brand": { "name": "Audi", "slug": "audi" },
"model": { "name": "A4", "slug": "a4" },
"fuel_type": "Benzin",
"engine_size": 2.0,
"horsepower": 265,
"torque_nm": 370,
"consumption": 7.1,
"co2_emissions": 162,
"transmission": "Automatik",
"drivetrain": "Allradantrieb",
"acceleration_0_100": 5.8,
"top_speed_kmh": 250,
"doors": 4,
"seats": 5,
"weight": 1680,
"dimensions": {
"length_mm": 4762,
"width_mm": 1847,
"height_mm": 1428,
"trunk_volume_l": 460,
"tank_volume_l": 54
},
"ev_data": null,
"towing": {
"payload_kg": 530,
"max_towing_weight_kg": 1800
},
"quality": {
"score": 88,
"source": "spec_db",
"is_generated": false
}
}
],
"pagination": { "page": 1, "limit": 3, "total": 22, "total_pages": 8 }
}GET /trims/{id}Single trim by ID. Same shape as an item from /trims, wrapped in { "data": { … } }.
curl "https://leasingfriday.de/api/v1/trims/805" -H "X-API-Key: YOUR_KEY"404 if the ID does not exist: { "error": "not_found", "message": "Trim nicht gefunden" }
GET /compareCompare up to 5 trims side by side. Returns an array in the same format as /trims.
| Parameter | Type | Example | Description |
|---|---|---|---|
| trims | string (required) | 1333,1335,805 | Comma-separated trim IDs (max. 5) |
curl "https://leasingfriday.de/api/v1/compare?trims=1333,1335" -H "X-API-Key: YOUR_KEY"{
"data": [
{
"id": 1333,
"name": "Model 3 Performance AWD",
"brand": { "name": "Tesla", "slug": "tesla" },
"model": { "name": "Model 3", "slug": "model-3" },
"horsepower": 460,
"ev_data": { "electric_range_km": 528, "charging_dc_kw": 250.0, … },
…
},
{
"id": 1335,
"name": "Model 3 Long Range RWD",
"brand": { "name": "Tesla", "slug": "tesla" },
"model": { "name": "Model 3", "slug": "model-3" },
"horsepower": 283,
"ev_data": { "electric_range_km": 702, "charging_dc_kw": 170.0, … },
…
}
]
}trims=1,1,2) are deduplicated automatically.trims=1,abc,3) are ignored; only valid integers count.trims is missing, there are no valid IDs, or there are more than 5 IDs.Error responses are always JSON with two fields: error (machine-readable code) and message (human-readable text).
| HTTP | error | Description |
|---|---|---|
| 400 | bad_request | Missing or invalid parameters |
| 401 | unauthorized | Key missing or invalid |
| 404 | not_found | Resource does not exist |
| 405 | method_not_allowed | Only GET allowed |
| 429 | rate_limit_exceeded | Too many requests (+ Retry-After header) |
| 500 | internal_error | Internal server / DB error |
{
"error": "unauthorized",
"message": "Missing or invalid API key"
}{
"error": "rate_limit_exceeded",
"message": "Too many requests",
"retry_after": 42
}{
"error": "bad_request",
"message": "Maximal 5 Trims können verglichen werden"
}{
"error": "not_found",
"message": "Modell nicht gefunden"
}{
"error": "internal_error",
"message": "Fehler beim Abrufen der Modelle"
}Important enum values and data types. String field values are in German unless noted otherwise (API payloads match the database).
Models: Benzin · Diesel · Elektro · Hybrid
Trims (finer granularity): Benzin · Diesel · Elektro · Hybrid · Plug-in-Hybrid · Erdgas · Wasserstoff
Automatik · Manuell · DCT · DSG · PDK · S tronic · CVT · F1 · Schaltung
Frontantrieb · Hinterradantrieb · Allradantrieb
aktiv (on sale) · auslaufend (still orderable, phasing out) · eingestellt (discontinued) · nie_in_de (never offered in Germany). API values: aktiv | auslaufend | eingestellt | nie_in_de.
Currently: llm (AI-generated, manually reviewed). Possible later: spec_db (verified source) · manual (hand-entered).
Integer 0–100. Higher values = more verified fields. May be null if not calculated yet.
| Field | Unit |
|---|---|
| horsepower | PS (metric hp) |
| torque_nm | Nm |
| engine_size | litres |
| engine_cc | cm³ |
| consumption | l/100km or kWh/100km |
| co2_emissions / co2_g_km | g/km |
| acceleration_0_100 | seconds |
| top_speed_kmh | km/h |
| weight | kg |
| dimensions (length/width/height) | mm |
| trunk_volume_l / tank_volume_l | litres |
| battery_capacity_kwh | kWh |
| electric_range_km | km (WLTP) |
| charging_ac_kw / charging_dc_kw | kW |
| payload_kg / max_towing_weight_kg | kg |
| list_price / leasing_rate | EUR |
Many fields may be null. Meaning of the most important ones:
| Field | If null |
|---|---|
| ev_data | null for non-EV / non-PHEV (fuel_type is neither "Elektro" nor "Plug-in-Hybrid"). When present, nested fields may still be null if unknown. |
| battery_capacity_kwh | Data unavailable or not an EV |
| electric_range_km | Data unavailable or not an EV |
| charging_dc_kw | DC fast charging not supported or value unknown |
| charging_ac_kw | AC charging power unknown |
| engine_size / engine_cc | Not applicable (e.g. BEV) or not recorded |
| year_to | Model still in production |
| list_price | No official list price known |
| leasing_rate | No leasing offer recorded |
| trunk_volume_l | Trunk volume unknown |
| tank_volume_l | Always null for EVs; for ICE: not recorded |
| payload_kg / max_towing_weight_kg | Payload / towing data unavailable |
| data_quality_score | Score not calculated yet |
| length_mm / width_mm / height_mm | Dimensions not recorded |
| is_active / is_leasing_available | Status unknown (rare) |
| co2_emissions / co2_g_km | Usually 0 for EVs; null if missing |
Machine-readable specification (YAML, OpenAPI 3.0.3). Same file as in the repository at docs/vehicle-api-v1.openapi.yaml. Import directly into Swagger UI, Postman or code generators.
Access and billing are handled via RapidAPI. After subscribing you receive your API key there.
Pro
49 €/ month
Production use
Business
99 €/ month
Commercial & B2B
All plans include full access to brands, models, trims, technical data, EV fields, dimensions and the compare endpoint. Data is updated daily.
Need more volume? Contact us for custom enterprise access.