NHTSA API: Get owner complaints
Summarizes 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.
Unofficial. Not affiliated with or endorsed by NHTSA.
Inputs
Values from the run on Oct 27, 2026, shown under Output.
- Make, required
make Vehicle make, for example Ford.
Ford
- Model, required
model Exact vehicle model, for example F-150.
F-150
- Model Year, required
model_year Model year, for example 2018.
2018
Whole number from 1900 to 2100.
- Max Complaints optional
max_complaints Number of newest complaints to show, for example 20.
20
Whole number from 1 to 100. Default
20.
Input as JSON
{ "make": "Ford", "model": "F-150", "model_year": 2018, "max_complaints": 20}Output
{ "deaths_reported": 0, "fire_complaints": 0, "crash_complaints": 0, "total_complaints": 92, "injuries_reported": 0, "recent_complaints": [ { "fire": false, "link": "https://www.nhtsa.gov/?nhtsaId=11773092" , "crash": false, "mileage": null, "injuries": 0, "components": "Power Train", "date_filed": "2026-10-22", "odi_number": 11773092, "description": "I had a recall on my replacement transmission. Recall stated it may be missing a part. I had all the problems listed. It was replace 4 years ago. The dealer said i don't qualify for the recall. Their reason was i had more then 8k miles. That average is 2000 miles a year. My truck rolls back be s…", "incident_date": "2025-10-31" }, { "fire": false, "link": "https://www.nhtsa.gov/?nhtsaId=11772732" , "crash": false, "mileage": null, "injuries": 0, "components": "Power Train", "date_filed": "2026-10-21", "odi_number": 11772732, "description": "Truck has inconsistent, erratic shifting. Transmission seems to get confused or lost for a second or two when accelerating from a stop which has been dangerous a few times due to almost being rear ended. Also has shifted from 10-1-9th gear at 60-70mph at least 10 times now leaving the 10th gear unav…", "incident_date": "2026-10-20" }, { "fire": false, "link": "https://www.nhtsa.gov/?nhtsaId=11772703" , "crash": false, "mileage": null, "injuries": 0, "components": "Service Brakes", "date_filed": "2026-10-21", "odi_number": 11772703, "description": "The brake hydraulic system on my 2018 Ford F-150 failed. The vehicle rapidly lost brake fluid, the brake pedal began sinking, and there was no obvious external brake-fluid leak. An independent repair facility later replaced both the brake master cylinder and the power brake booster. I have the repai…", "incident_date": "2026-10-07" } ], "top_problem_areas": [ { "component": "Power Train", "complaint_count": 66 }, { "component": "Engine", "complaint_count": 17 }, { "component": "Unknown Or Other", "complaint_count": 6 } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"nhtsa.gov/get_owner_complaints","input":{"make":"Ford","model":"F-150","model_year":2018,"max_complaints":20}}' # 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/get_owner_complaints" , "input": { "make": "Ford", "model": "F-150", "model_year": 2018, "max_complaints": 20 }})# 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/get_owner_complaints" , "input": { "make": "Ford", "model": "F-150", "model_year": 2018, "max_complaints": 20 } }), 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/get_owner_complaints# with {"make":"Ford","model":"F-150","model_year":2018,"max_complaints":20}"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": [ "make", "model", "model_year" ], "properties": { "make": { "type": "string", "minLength": 1, "description": "Vehicle make, for example Ford." }, "model": { "type": "string", "minLength": 1, "description": "Exact vehicle model, for example F-150." }, "model_year": { "type": "integer", "maximum": 2100, "minimum": 1900, "description": "Model year, for example 2018." }, "max_complaints": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1, "description": "Number of newest complaints to show, for example 20." } }, "additionalProperties": false}Output schema
{ "type": "object", "required": [ "total_complaints", "crash_complaints", "fire_complaints", "injuries_reported", "deaths_reported", "top_problem_areas", "recent_complaints" ], "properties": { "deaths_reported": { "type": "integer", "description": "Total reported deaths." }, "fire_complaints": { "type": "integer", "description": "Complaints reporting a fire." }, "crash_complaints": { "type": "integer", "description": "Complaints reporting a crash." }, "total_complaints": { "type": "integer", "description": "Total complaints for the exact vehicle." }, "injuries_reported": { "type": "integer", "description": "Total reported injuries." }, "recent_complaints": { "type": "array", "items": { "type": "object", "required": [ "date_filed", "incident_date", "components", "description", "crash", "fire", "injuries", "mileage", "link", "odi_number" ], "properties": { "fire": { "type": "boolean", "description": "Whether a fire was reported." }, "link": { "type": "string", "description": "NHTSA page for the complaint." }, "crash": { "type": "boolean", "description": "Whether a crash was reported." }, "mileage": { "type": [ "integer", "null" ], "description": "Odometer reading, if given as a structured value." }, "injuries": { "type": "integer", "description": "Number of injuries reported." }, "components": { "type": "string", "description": "Affected components in plain words." }, "date_filed": { "type": [ "string", "null" ], "description": "Date filed (YYYY-MM-DD), if known." }, "odi_number": { "type": "integer", "description": "NHTSA complaint number." }, "description": { "type": [ "string", "null" ], "description": "Owner’s description of the problem." }, "incident_date": { "type": [ "string", "null" ], "description": "Date of the incident (YYYY-MM-DD), if known." } }, "additionalProperties": false } }, "top_problem_areas": { "type": "array", "items": { "type": "object", "required": [ "component", "complaint_count" ], "properties": { "component": { "type": "string" }, "complaint_count": { "type": "integer" } }, "additionalProperties": false } } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
nhtsa.gov/get_owner_complaints- Returns
- complaint totals, crashes, fires, injuries, deaths, top problem areas, recent complaints
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/get_owner_complaints with the inputs above.
Ask your agent
- How many safety complaints has NHTSA received for the 2018 Ford F-150?
- Show me owner complaints about crashes and fires for a 2015 Honda Accord on nhtsa.gov
- What are the top problem areas reported by owners of the 2020 Toyota RAV4?
- Pull the 10 most recent owner safety complaints for the 2012 Chevrolet Silverado
- Any injuries or deaths reported in complaints for the 2019 Subaru Outback? Check nhtsa.gov
See more
All NHTSA methodsGets 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 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_recallsLists the passenger car, SUV/minivan and truck models NHTSA has for a make and model year, alphabetically.
nhtsa.gov/list_vehicle_modelsIdentifies a vehicle from its 17-character VIN using NHTSA vehicle data. Missing details are returned as null; decoding errors and warnings are included.
nhtsa.gov/decode_vinFinds U.S. consumer product recalls matching a product type or brand, newest first, with hazards, remedies, incidents, sale details and photos when published.
cpsc.gov/search_recallsReturns 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_economyFinds a business near a city and state or ZIP code on the Better Business Bureau and reads its published complaints, newest first, with the three-year complaint total. The three-year total may exceed the publicly displayed complaint details.
bbb.org/get_business_complaintsCompares 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