NHTSA API: Decode a vehicle VIN
Identifies a vehicle from its 17-character VIN using NHTSA vehicle data. Missing details are returned as null; decoding errors and warnings are included.
Unofficial. Not affiliated with or endorsed by NHTSA.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- VIN, required
vin The 17-character vehicle identification number from the dashboard, door frame, or registration. Spaces and lowercase letters are accepted.
1hgcm82633 a004352
- Model Year optional
model_year Optional known model year for more precise decoding of older vehicles; 0 lets NHTSA determine it.
2003
Whole number from 0 to 9999. Default
0.
Input as JSON
{ "vin": " 1hgcm82633 a004352 ", "model_year": 2003}Output
{ "vin": "1HGCM82633A004352", "make": "HONDA", "trim": "EX-V6", "doors": 2, "model": "Accord", "engine": { "cylinders": 6, "horsepower": 240, "displacement_liters": 2.998832712 }, "page_url": "https://vpic.nhtsa.dot.gov/decoder/VinDecoder?VIN=1HGCM82633A004352&ModelYear=2003" , "warnings": [], "fuel_type": "Gasoline", "body_style": "Coupe", "drive_type": null, "model_year": 2003, "plant_city": "MARYSVILLE", "manufacturer": "AMERICAN HONDA MOTOR CO., INC.", "transmission": "Automatic", "vehicle_type": "PASSENGER CAR", "plant_country": "UNITED STATES (USA)", "decoded_variables": [ { "value": null, "value_id": null, "variable": "Suggested VIN", "variable_id": 142 }, { "value": "0", "value_id": "0", "variable": "Error Code", "variable_id": 143 }, { "value": null, "value_id": null, "variable": "Possible Values", "variable_id": 144 } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"nhtsa.gov/decode_vin","input":{"vin":" 1hgcm82633 a004352 ","model_year":2003}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "nhtsa.gov/decode_vin" , "input": { "vin": " 1hgcm82633 a004352 ", "model_year": 2003 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "nhtsa.gov/decode_vin" , "input": { "vin": " 1hgcm82633 a004352 ", "model_year": 2003 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run nhtsa.gov/decode_vin# with {"vin":" 1hgcm82633 a004352 ","model_year":2003}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "vin" ], "properties": { "vin": { "type": "string", "examples": [ "1HGCM82633A004352" ], "description": "The 17-character vehicle identification number from the dashboard, door frame, or registration. Spaces and lowercase letters are accepted." }, "model_year": { "type": "integer", "default": 0, "maximum": 9999, "minimum": 0, "examples": [ 2003 ], "description": "Optional known model year for more precise decoding of older vehicles; 0 lets NHTSA determine it." } }, "additionalProperties": false}Output schema
{ "type": "object", "required": [ "vin", "make", "model", "model_year", "trim", "body_style", "vehicle_type", "doors", "engine", "fuel_type", "transmission", "drive_type", "manufacturer", "plant_city", "plant_country", "warnings", "page_url", "decoded_variables" ], "properties": { "vin": { "type": "string", "description": "The normalized 17-character VIN." }, "make": { "type": [ "string", "null" ], "description": "Vehicle make." }, "trim": { "type": [ "string", "null" ], "description": "Trim or equipment grade." }, "doors": { "type": [ "integer", "null" ], "description": "Number of doors." }, "model": { "type": [ "string", "null" ], "description": "Vehicle model." }, "engine": { "type": "object", "required": [ "cylinders", "displacement_liters", "horsepower" ], "properties": { "cylinders": { "type": [ "integer", "null" ], "description": "Number of engine cylinders." }, "horsepower": { "type": [ "number", "null" ], "description": "Engine power in horsepower, when listed." }, "displacement_liters": { "type": [ "number", "null" ], "description": "Engine displacement in liters." } }, "description": "Engine details when NHTSA reports them.", "additionalProperties": false }, "page_url": { "type": "string", "description": "Link to this VIN's NHTSA decoder result page." }, "warnings": { "type": "array", "items": { "type": "string" }, "description": "NHTSA decoding errors or warnings in plain words; empty if none are reported." }, "fuel_type": { "type": [ "string", "null" ], "description": "Primary fuel type." }, "body_style": { "type": [ "string", "null" ], "description": "Vehicle body style." }, "drive_type": { "type": [ "string", "null" ], "description": "Drive type written in words." }, "model_year": { "type": [ "integer", "null" ], "description": "Vehicle model year." }, "plant_city": { "type": [ "string", "null" ], "description": "City of manufacture." }, "manufacturer": { "type": [ "string", "null" ], "description": "Name of the manufacturer." }, "transmission": { "type": [ "string", "null" ], "description": "Transmission style." }, "vehicle_type": { "type": [ "string", "null" ], "description": "Type of vehicle." }, "plant_country": { "type": [ "string", "null" ], "description": "Country of manufacture." }, "decoded_variables": { "type": "array", "items": { "type": "object", "required": [ "variable", "value", "variable_id", "value_id" ], "properties": { "value": { "type": [ "string", "null" ], "description": "Decoded value, or null when missing." }, "value_id": { "type": [ "string", "null" ], "description": "NHTSA coded value identifier.", "x-fous-developer": true }, "variable": { "type": "string" }, "variable_id": { "type": [ "integer", "null" ], "description": "NHTSA variable identifier.", "x-fous-developer": true } }, "additionalProperties": false }, "description": "Every decoded variable returned by NHTSA, including ones with missing values.", "x-fous-developer": true } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
nhtsa.gov/decode_vin- Returns
- make, model, model year, trim, body style, engine, fuel and drive type, plant, warnings, decoded variables
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method nhtsa.gov/decode_vin with the inputs above.
Ask your agent
- What make and model is the car with VIN 1HGCM82633A004352?
- Can you decode this 17-character VIN I found on my door frame: 2T1BURHE0JC034567 and tell me the engine and body style?
- I'm buying a used truck, the VIN is 1FTFW1ET5DFC10312. What plant built it and what drive type does it have?
- Look up the trim and fuel type for VIN 5YJSA1E26JF254178 on nhtsa.gov, it's a 2018 model.
- My registration lists VIN wa1bnafy8j2014456 but the dealer says it's a different year. Can you check what model year the decoder gives and flag any warnings?
See more
All NHTSA methodsLists NHTSA safety recalls for a vehicle model, given a model year, make and model or a 17-character VIN. Results cover the model, not whether a specific car has been repaired.
nhtsa.gov/check_recallsGets NHTSA 5-Star Safety Ratings for a car by make, model and model year. Returns each matching version; unrated versions have no stars.
nhtsa.gov/get_safety_ratingsLists the passenger car, SUV/minivan and truck models NHTSA has for a make and model year, alphabetically.
nhtsa.gov/list_vehicle_modelsSummarizes NHTSA owner safety complaints for an exact vehicle model year, make, and model. Body-style variants are not combined; mileage is null when not given as a structured value.
nhtsa.gov/get_owner_complaintsReturns official MPG or MPGe, range, annual fuel cost, five-year savings and emissions for every matching version of a vehicle. Costs use current fuel prices and 15,000 miles per year; plug-in hybrid costs include gasoline and electricity.
fueleconomy.gov/get_fuel_economySearches Carvana's used-car inventory by make and model, with optional price, year, mileage and ZIP filters, and returns each car's price, estimated monthly payment, mileage and delivery or pickup estimate for the ZIP.
carvana.com/search_carsFinds AutoZone parts listed for a vehicle (year, make, model, optional engine), with prices, warranties and fit notes. Listings are filtered by year, make and model; engine fit often needs further confirmation.
autozone.com/search_partsCompares the official fuel economy and estimated annual fuel cost of two to four cars by year, make and model, using FuelEconomy.gov. Selects a base version when no trim is given.
fueleconomy.gov/compare_cars