Specifications API
Comprehensive vehicle specifications including engine details, features, measurements, and options by VIN
Get detailed vehicle specifications including engine details, features, measurements, colors, options, and complete technical data for any vehicle by VIN. Access comprehensive spec data organized by category for easy integration.
A vehicle we can name but hold no full specifications for answers 207 Multi-Status: the fields a source holds, null for every other documented field, and why. See partial answers.
Endpoint
GET https://api.auto.dev/specs/{vin}View in Browser
https://api.auto.dev/specs/1FTFW3LDXRFB40317Parameters
| Prop | Type | Default |
|---|---|---|
vin | string | - |
ambiguity? | boolean | - |
Example Request
curl -X GET "https://api.auto.dev/specs/1FTFW3LDXRFB40317" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"Response Structure
Example Response
{
"vehicle": {
"vin": "1FTFW3LDXRFB40317",
"year": 2019,
"make": "Porsche",
"model": "911",
"manufacturer": "Dr Ing HCF Porsch Ag"
},
"specs": {
"name": "GT3 RS 2dr Coupe (4.0L 6cyl 7AM)",
"price": {
"baseMsrp": 187500,
"baseInvoice": 168750
},
"totalSeating": 2,
"color": {
"exterior": [
{
"name": "Lizard Green",
"rgb": "87,178,44"
},
{
"name": "Miami Blue",
"rgb": "3,161,192"
},
{
"name": "Racing Yellow",
"rgb": "229,200,38"
},
{
"name": "Guards Red",
"rgb": "175,26,28"
}
],
"interior": [
{
"name": "Black, leather/sueded microfiber",
"rgb": "0,0,0"
},
{
"name": "Black/Lizard Green, leather/sueded microfiber",
"rgb": "0,0,0"
}
]
},
"features": {
"engine": {
"torque": "346 lb-ft @ 6000 rpm",
"baseEngineSize": "4.0 L",
"horsepower": "520 hp @ 8250 rpm",
"valves": "24",
"baseEngineType": "gas",
"directInjection": true,
"valveTiming": "Variable",
"cylinders": "flat 6",
"camType": "Double overhead cam (DOHC)"
},
"fuel": {
"epaCombinedMpg": "16 MPG",
"epaCity/highwayMpg": "15/19 MPG",
"rangeInMiles (city/hwy)": "253.5/321.1 mi.",
"fuelTankCapacity": "16.9 gal.",
"fuelType": "premium unleaded (required)"
},
"measurements": {
"maximumCargoCapacity": "4.4 cu.ft.",
"countryOfFinalAssembly": "Germany",
"wheelbase": "96.6 in.",
"curbWeight": "3153 lbs.",
"grossWeight": "3953 lbs.",
"cargoCapacity,AllSeatsInPlace": "4.4 cu.ft.",
"maximumPayload": "800 lbs.",
"overallWidthWithMirrors": "77.9 in.",
"length": "179.4 in.",
"manufacturer060MphAccelerationTime": "3.0 seconds",
"turningCircle": "36.4 ft.",
"height": "51.1 in.",
"overallWidthWithoutMirrors": "74.0 in."
},
"driveTrain": {
"driveType": "rear wheel drive",
"rearLockingDifferential": true,
"rearLimitedSlipDifferential": true,
"transmission": "7-speed automated manual"
},
"warranty": {
"basic": "4 yr./ 50000 mi.",
"drivetrain": "4 yr./ 50000 mi.",
"freeMaintenance": "1 yr./ 10000 mi.",
"rust": "12 yr./ unlimited mi.",
"roadsideAssistance": "4 yr./ 50000 mi."
},
"safety": {
"4WheelAbs": true,
"daytimeRunningLights": true,
"engineImmobilizer": true,
"postCollisionSafetySystem": true,
"frontHeadAirbags": true,
"dualFrontSideMountedAirbags": true,
"passengerAirbagOccupantSensingDeactivation": true,
"stabilityControl": true,
"tirePressureMonitoring": true,
"tractionControl": true
},
"frontseats": {
"heightAdjustablePassengerSeat": true,
"heightAdjustableDriverSeat": true,
"sportFrontSeats": true,
"2WayPowerPassengerSeat": true,
"leather/suededMicrofiber": true,
"2WayPowerDriverSeat": true
}
},
"orderedFeatures": [
{
"category": "Fuel",
"categoryGroup": "Mechanical",
"features": {
"fuelType": "Premium unleaded (required)",
"epaCity/highwayMpg": "15/19 MPG",
"epaCombinedMpg": "16 MPG",
"rangeInMiles (city/hwy)": "253.5/321.1 mi.",
"fuelTankCapacity": "16.9 gal."
}
},
{
"category": "Engine",
"categoryGroup": "Mechanical",
"features": {
"baseEngineSize": "4.0 L",
"cylinders": "Flat 6",
"baseEngineType": "Gas",
"horsepower": "520 hp @ 8250 rpm",
"torque": "346 lb-ft @ 6000 rpm",
"valves": "24",
"camType": "Double overhead cam (DOHC)",
"valveTiming": "Variable",
"directInjection": true
}
}
],
"typeCategories": {
"performancesports": {
"id": 10,
"name": "Performance/Sports"
},
"coupe": {
"id": 2,
"name": "Coupe"
},
"luxury": {
"id": 8,
"name": "Luxury"
}
},
"styleAttributes": {
"electric": false,
"pluginElectric": false,
"truck": false
}
}
}Feature Categories
The API returns comprehensive feature data organized into the following categories through the orderedFeatures array:
Use Cases
- Vehicle Comparison Tools: Compare detailed specifications across multiple vehicles for purchase decisions with organized feature categories
- Automotive Marketplaces: Display comprehensive vehicle features and specifications in listings with proper categorization
- Configuration Builders: Help customers select vehicle options and packages based on available features and categories
Ambiguous VINs
Changed 2026-10-20: an ambiguous VIN no longer gets a guessed style's specifications. Add ?ambiguity=true to allow
a single best-guess pick while you move to styles.
A VIN does not always say which style a vehicle is: it can match several that differ only in what the maker does not
encode, such as a trim level, a battery pack or a package. When that happens, ambiguous is true, specs is null,
and trims and styles list the possibilities, most likely first, each style as { name, trim, confidence }.
The full specifications of every possible style are in candidates.
{
"vehicle": { "vin": "7G2CEHED3TA100196", "year": 2026, "make": "Tesla", "model": "Cybertruck" },
"ambiguous": true,
"specs": null,
"trims": ["Dual Motor", "Premium", "Base"],
"styles": [
{ "name": "Dual Motor 4dr Crew Cab AWD SB (electric DD)", "trim": "Dual Motor", "confidence": 0.5 },
{ "name": "Premium 4dr Crew Cab AWD SB (electric DD)", "trim": "Premium", "confidence": 0.5 },
{ "name": "4dr Crew Cab AWD SB w/Prod. End 2/26 (electric DD)", "trim": "Base", "confidence": 0 }
]
}Partial Answers (207)
A 200 carries every documented specs field. When the sources hold only some of them for a vehicle we can name, /specs answers 207 Multi-Status: specs with the fields a source holds, null for every other documented field, a missing list naming the null ones, and a reason that is a fact about the vehicle. A full answer stays a 200; a VIN no decoder can name is the 404.
A 2016 Harley-Davidson: vPIC, NHTSA's decoder, names it and gives its engine and fuel, but no catalog holds a motorcycle's price, colors, seating or feature list.
{
"vehicle": {
"vin": "1HD1BWV10GB016330",
"year": 2016,
"make": "HARLEY-DAVIDSON",
"model": "FLSTC103 / Heritage Softail Classic",
"manufacturer": "Harley-Davidson Motor Co"
},
"specs": {
"name": "2016 HARLEY-DAVIDSON Heritage Softail Classic FLSTC103",
"price": null,
"totalSeating": null,
"color": null,
"typeCategories": null,
"styleAttributes": null,
"orderedFeatures": null,
"features": {
"engine": {
"torque": "",
"baseEngineSize": "1.69L",
"horsepower": "",
"valves": "",
"baseEngineType": "Gasoline",
"directInjection": false,
"valveTiming": "",
"cylinders": "2",
"camType": ""
},
"fuel": {
"epaCombinedMpg": "",
"epaCityHighwayMpg": "",
"rangeInMilesCityHwy": "",
"fuelTankCapacity": "",
"fuelType": "Gasoline"
},
"driveTrain": {
"driveType": "",
"centerLimitedSlipDifferential": false,
"transmission": ""
},
"measurements": {
"maximumCargoCapacity": "",
"countryOfFinalAssembly": "UNITED STATES (USA)",
"wheelbase": "",
"curbWeight": "",
"grossWeight": "Class 1A: 3,000 lb or less (1,360 kg or less)",
"cargoCapacityAllSeatsInPlace": "",
"maximumPayload": "",
"length": "",
"maximumTowingCapacity": "",
"turningCircle": "",
"height": "",
"overallWidthWithoutMirrors": ""
},
"frontseats": {
"frontHeadRoom": "",
"premiumCloth": false,
"bucketFrontSeats": false,
"the4WayManualPassengerSeatAdjustment": false,
"heightAdjustableDriverSeat": false,
"frontShoulderRoom": "",
"driverSeatWithPowerAdjustableLumbarSupport": false,
"the8WayPowerDriverSeat": false,
"frontLegRoom": "",
"frontHipRoom": ""
},
"rearseats": {},
"warranty": {
"basic": "",
"drivetrain": "",
"freeMaintenance": "",
"rust": "",
"roadsideAssistance": ""
},
"suspension": {},
"tiresAndWheels": {},
"powerFeature": {},
"mechanicalOptions": {},
"comfortConvenience": {},
"exteriorOptions": {},
"interiorOptions": {},
"instrumentation": {
"clock": false,
"compass": false,
"externalTemperatureDisplay": false,
"tripComputer": false,
"tachometer": false
},
"inCarEntertainment": {},
"packages": {},
"telematics": {},
"safety": {}
}
},
"missing": [
{ "field": "price", "reason": "no_vin_record" },
{ "field": "totalSeating", "reason": "no_vin_record" },
{ "field": "color", "reason": "no_vin_record" },
{ "field": "typeCategories", "reason": "no_vin_record" },
{ "field": "styleAttributes", "reason": "no_vin_record" },
{ "field": "orderedFeatures", "reason": "no_vin_record" }
],
"reason": "class_not_covered",
"retryable": false
}A 207 passes the ok check of most HTTP clients, and the fields in missing are null. Branch on the status, or check missing, before reading specs:
const res = await fetch(`https://api.auto.dev/specs/${vin}`, {
headers: { Authorization: 'Bearer YOUR_API_KEY' },
})
const data = await res.json()
if (res.status === 207) {
// data.specs holds what a source has; every field named in data.missing is null.
// data.reason says why. It will not change: data.retryable is false.
} else if (res.ok) {
console.log(data.specs.price.baseMsrp)
}Response Structure (207)
vehicle is the same as on a 200. specs has every documented top-level field: name, price, totalSeating, color, typeCategories, styleAttributes, orderedFeatures and features, each as on a 200 when a source holds it, null otherwise.
| Prop | Type | Default |
|---|---|---|
missing[].field? | string | - |
missing[].reason? | string | - |
reason? | string | - |
retryable? | boolean | - |
Reason Codes
The reason is about the vehicle when a fact about it says why; otherwise it is no_vin_record.
reason | means | retry |
|---|---|---|
class_not_covered | a motorcycle, trailer, bus or other class the catalogs do not cover (an incomplete vehicle, a chassis cab, is covered) | no |
market_not_covered | a VIN built outside North America that vPIC does not decode | no |
no_vin_record | a covered vehicle no source holds a full record for (a 2026 Ford Mustang today, for one) | no |
The same class_not_covered and market_not_covered codes ride the /vin and /build partial answers. See error responses.
Billing
A 207 is not a billed call and counts toward no quota.
Error Responses
Invalid VIN
{
"status": 400,
"error": "VIN must be 17 characters long",
"code": "INVALID_VIN_FORMAT",
"path": "/specs/123Invalid",
"requestId": "966d9900bef4356c-IAD"
}VIN Not Found
A 404 means no decoder could name the make of the vehicle. A vehicle whose make a decoder names, with specifications only in part, is a 207.
{
"status": 404,
"error": "No vehicle data found for the provided VIN",
"code": "VIN_NOT_FOUND",
"path": "/specs/1FTFW3LDXRFB40317",
"requestId": "f8g7h6i5j4k3l2m1"
}Interactive API Reference
Ready to test this endpoint? Use our interactive API playground to make live requests and see real responses.
Try Vehicle Specifications API
Test this endpoint with your API key and explore live responses
Plan Availability
- Free: ❌ Not available
- Growth: ✅ Available
- Scale: ✅ Available
See pricing for plan details and signup.
Was this API reference helpful?