Send a GET request to https://vpic.nhtsa.dot.gov/api/vehicles/decodevin/{VIN}?format=json, replacing {VIN} with the 17-character vehicle identification number.
To improve accuracy, append the model year: https://vpic.nhtsa.dot.gov/api/vehicles/decodevin/{VIN}?format=json&modelyear={year}; NHTSA strongly recommends including the model year because some WMI codes were reassigned across years.
Parse the Results array in the JSON response; each element contains a Variable (field name) and a Value (decoded value). Key fields include Make, Model, ModelYear, VehicleType, BodyClass, EngineModel, FuelTypePrimary, DriveType, TransmissionStyle, and GVWR.
Check the ErrorCode and ErrorText fields in the response; an error code of 0 indicates a clean decode, while codes 1-11 indicate partial or failed decodes.
For batch decoding, use POST https://vpic.nhtsa.dot.gov/api/vehicles/decodevinbatch/ with a form body of DATA={VIN1,year1;VIN2,year2}&format=json to decode up to 50 VINs per request.
The API is free and does not require authentication or API keys; rate limits are not publicly documented, so implement polite polling with delays between bulk requests.
Known gotchas
The vPIC database is populated from manufacturer 565 submissions; vehicles from low-volume or specialty manufacturers may return incomplete decodes if the manufacturer did not submit full WMI or VDS data.
Pre-1980 vehicles use a non-standardized VIN format; use the modelyear parameter to trigger the pre-1980 decode path, and expect partial results.
A Result array with values present does not guarantee accuracy for every field; always cross-reference safety-critical fields (such as GVWR for commercial vehicle classification) against a secondary source.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp