NHTSA VIN Decoder & Vehicle Recalls
Pricing
from $0.06 / 1,000 nhtsa vehicle records
NHTSA VIN Decoder & Vehicle Recalls
US NHTSA vehicle data (public open data, no key): decode a VIN into 69 structured fields - make, model, year, body, engine, plant, safety equipment - and pull the safety recalls for a vehicle or by campaign number, with the remedy and the recall date.
Pricing
from $0.06 / 1,000 nhtsa vehicle records
Rating
0.0
(0)
Developer
Wenhao Yang
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Share
NHTSA Vehicles - VIN Decode & Safety Recalls
Decode any VIN into its full factory specification, and pull NHTSA safety recalls for a vehicle or a campaign - from two free US government services, in one actor.
Low cost
From $0.0001 per record. Pay-per-event: you are charged per record delivered, and nothing for the query.
What you get
| Corpus | One record is | Depth |
|---|---|---|
vin | one decoded VIN | 69 flattened vehicle fields, plus the complete 140-variable decode |
recalls | one recall campaign for one vehicle | campaign number, component, summary, consequence, remedy, units affected, date |
The two are different grains on purpose. A VIN decode is one row per VIN. A recall is one row per campaign - a vehicle has many, and a campaign that covers several models comes back as several rows sharing one campaign number.
VIN decode
NHTSA's decoder answers with 140 Variable/Value pairs for a single VIN. That is more than a flat row can hold usefully, so 69 are flattened onto the record - identity, plant, dimensions and weight, engine and electrification, transmission, seating and the safety-equipment block - and the complete 140-pair answer is kept verbatim in allVariablesJson. Nothing is lost to the curation.
A real decode, 1HGCM82633A004352:
vin 1HGCM82633A004352vehicleDescriptor 1HGCM826*3Amake HONDAmanufacturerName AMERICAN HONDA MOTOR CO., INC.model AccordmodelYear 2003trim EX-V6vehicleType PASSENGER CARbodyClass Coupedoors 2plantCity MARYSVILLEplantState OHIOplantCountry UNITED STATES (USA)engineCylinders 6displacementL 2.998832712engineModel J30A4engineConfiguration V-ShapedengineBrakeHpFrom 240fuelTypePrimary GasolinevalveTrainDesign Single Overhead Cam (SOHC)transmissionStyle AutomatictransmissionSpeeds 5gvwrFrom Class 1C: 4,001 - 5,000 lb (1,814 - 2,268 kg)seatBeltType ManualfrontAirBagLocations 1st Row (Driver and Passenger)curtainAirBagLocations 1st and 2nd RowsdecodeErrorCode 0 # 0 = VIN decoded clean
Values arrive as strings even when numeric (2.998832712, 240, 5), and a variable NHTSA holds no data for is '' - which is not the same as "the vehicle lacks it", and is not claimed to be.
Safety recalls
- By vehicle - give
make,modelandmodelYear(all three; the source rejects any subset).honda/accord/2003returns 24 recalls. - By campaign - give a campaign number.
19V182and19V182000both resolve to campaign19V182000, which covers 93 vehicle rows (Acura CL, MDX, TL and more), each carrying the same campaign number and its own model.
campaignNumber 19V182000manufacturer Honda (American Honda Motor Co.)reportReceivedDate 2019-03-06component AIR BAGS:FRONTAL:DRIVER SIDE:INFLATOR MODULEsummary Honda (American Honda Motor Co.) is recalling specific 2003 Acura 3.2CL, ...consequence ...in the event of a crash necessitating deployment of the driver's frontal air bag...remedy ...dealers will replace the driver's frontal air bag inflator...potentialUnitsAffected 1101534recallModelYear 2003recallMake ACURA
Decode -> recalls in one run. Set includeRecalls=true with corpus=vin and each VIN's decoded make/model/year is used to fetch its recalls, emitted next to the decode record. One caveat, stated on every record as recallScope: "make-model-year": NHTSA publishes recalls by make/model/year, not by VIN. Some campaigns cover a model-year range, so a VIN's recall set is its make/model/year's recalls - a superset of that exact VIN's campaigns. It is honest about what it is, not silently presented as VIN-exact.
Modes
rows(default) - one record per VIN, or per recall campaign.aggregate-corpus=recallsonly: one count row per group, bycomponent,manufacturer,modelYearorrecallMake. Counted over the recall set NHTSA returned for the query (a make/model/year's recall set is small - the largest measured was 27 rows).
Examples
Decode a batch of VINs - corpus=vin, vins=["1HGCM82633A004352","WBA3A5C55DF357074"].
A VIN and everything recalled on it - corpus=vin, vins=["1HGCM82633A004352"], includeRecalls=true.
Takata inflator campaigns - corpus=recalls, campaignNumber=19V182.
What gets recalled on a 2003 Accord - corpus=recalls, make=honda, model=accord, modelYear=2003, mode=aggregate, groupBy=component:
EXTERIOR LIGHTING:HEADLIGHTS 6AIR BAGS:FRONTAL:PASSENGER SIDE:INFLATOR MODULE 4EXTERIOR LIGHTING 4AIR BAGS:FRONTAL:DRIVER SIDE:INFLATOR MODULE 3AIR BAGS 2VEHICLE SPEED CONTROL:ACCELERATOR PEDAL 1STEERING:HYDRAULIC POWER ASSIST:HOSE, PIPING, AND CONNECTIONS 1ELECTRICAL SYSTEM:IGNITION 1VISIBILITY:WINDSHIELD WIPER/WASHER:MOTOR 1POWER TRAIN:AUTOMATIC TRANSMISSION 1
Notes on the source
ReportReceivedDateisDD/MM/YYYY, notMM/DD/YYYY. Measured across two endpoints: 35 values with the first component greater than 12, and none with the second greater than 12 -27/06/2019,30/03/2017. Read as US dates it would mis-date every recall, and06/03/2019is unreadable without the rule. It is normalised to ISOYYYY-MM-DDon output.Error Codeis a comma-joined set, not one number - a clean VIN is0, a malformed one is1,7,11,400, spelled out indecodeErrorText. An invalid VIN is not an error from the API: NHTSA answers HTTP 200 with an error code, so a bad VIN is a decoded record that says so.- A 400 from the recalls feed means "not in NHTSA's vehicle table", not "this car has no recalls". Those are different statements, so a bad combination is reported back naming the make/model/year rather than served as silence. A vehicle with genuinely no recalls returns 200 with
Count: 0. - Manufacturer casing is inconsistent in the source - the same company appears as both
Honda (American Honda Motor Co.)andHONDA (AMERICAN HONDA MOTOR CO.)across records. Group by it and both appear; that is the source, not a normalisation this actor applies. - Recall counts are verified complete. The feed has no pagination, and every response is checked so that
Countequals the rows returned - if NHTSA ever starts truncating, the run says so instead of serving a short recall history as a whole one.
Source
NHTSA (US National Highway Traffic Safety Administration), two public services: the vPIC VIN decoder at vpic.nhtsa.dot.gov and the recalls API at api.nhtsa.gov. Public US government data, no login, no key.
Both are lookup services, not bulk files: one VIN decode is one request, and there is no endpoint that enumerates vehicles. So the request count is bounded by design - a hard ceiling of 500 VINs per run, an 8-wide worker pool, pacing jitter, and retry with backoff on 429/5xx. Measured from the build box on 2026-09-13: no throttling was observed at 50 concurrent decodes (13 req/s), and none in 100 sequential calls - the ceiling reached was our own concurrency, not NHTSA's. That is not read as "no limit exists": the bounds stay in place because an actor where request count equals user input length is one that can be aimed at the API with a 100,000-VIN list.
A VIN that cannot be fetched after retries is not dropped and not emitted blank - it comes back as a record with decodeErrorCode: FETCH_FAILED and the reason in error, so a short answer is visible as short. If failures look systemic (half of a batch), the run fails instead, because that is the source being down and not a bad VIN.
Output
Every record carries the same key set - all 98 keys - whichever corpus or mode produced it, with '' for absent values, so a dataset column never shifts row to row. The envelope (platform, source, corpus, recordKind, mode, truncated, error, vin, recallScope, groupKey, groupCount, groupBy) is identical across corpora; groupKey/groupCount/groupBy are '' outside aggregate mode.
Related actors
- FMCSA Carrier Safety - the federal motor-carrier register: inspections, violations, operating authority and out-of-service orders for the carriers these vehicles run under.