Catalog / ToolMint NHTSA Vehicle
ToolMint NHTSA Vehicle
vPIC VIN decode + the NHTSA recall campaigns and complaint summary for that make/model/year in one call — normalized, deduped, risk flags. Not a per-VIN open-recall check. Errors and no-match return 4xx/5xx and are not charged.
Routes and prices
| Route | Price | What it does | Parameters (* required) |
|---|---|---|---|
GET /vehicle | $0.02 | Decode VIN (or make/model/year) and return NHTSA recall campaigns + complaint summary for that make/model/year | vin, make, model, modelYear, recallLimit |
GET /vehicle/lookup | $0.02 | Alias of /vehicle | vin, make, model, modelYear, recallLimit |
Free routes: /, /health, /openapi.json, /.well-known/x402.
Try it
402 with the terms in the price table.curl -i "https://toolmint-nhtsa-vehicle.toolmint.workers.dev/vehicle?vin=1HGCM82633A004352"
When to use it
- You have a VIN (17 chars) or a make, model and year, and want one JSON object with the decoded vehicle, recall campaigns and a complaint summary.
- You want a quick "are there park-it recalls or fire/crash complaints for this model year" flag set (
summary.riskFlags).
Not for: confirming a repair, per-VIN open recall status, or insurance/legal decisions.
Example
curl -i "https://toolmint-nhtsa-vehicle.toolmint.workers.dev/vehicle?vin=1HGCM82633A004352"
That hostname is the planned Worker name. The tool is not deployed yet.
Trimmed response (values illustrative, not real NHTSA output):
{
"tool": "nhtsa-vehicle-json",
"version": "0.1.0",
"vehicle": {
"vin": "1HGCM82633A004352",
"make": "HONDA", "model": "Accord", "modelYear": "2003",
"bodyClass": "...", "vehicleType": "...", "manufacturer": "...",
"plantCountry": "...", "displacementL": "...", "fuelTypePrimary": "...",
"driveType": "...", "errorCode": "0", "errorText": "..."
},
"recalls": {
"count": 2, "totalFromNhtsa": 2, "parkItCount": 0,
"campaigns": [
{ "campaignNumber": "...", "component": "...", "summary": "...", "consequence": "...",
"remedy": "...", "reportReceivedDate": "...", "manufacturer": "...",
"parkIt": false, "parkOutSide": false, "overTheAirUpdate": false,
"make": "HONDA", "model": "ACCORD", "modelYear": "2003" }
]
},
"complaints": {
"total": 100, "sampleSize": 100, "crashCount": 0, "fireCount": 0,
"injuryReports": 0, "deathReports": 0,
"topComponents": [ { "component": "...", "count": 10 } ]
},
"summary": {
"headline": "HONDA Accord 2003: 2 recall campaign(s), 100 complaint(s).",
"riskFlags": { "hasParkItRecall": false, "hasCrashComplaints": false,
"hasFireComplaints": false, "hasDeathReports": false },
"note": "Recall campaigns and complaints NHTSA lists for this make/model/year. Not a per-VIN open/unrepaired recall check; ..."
},
"query": { "vin": "1HGCM82633A004352", "make": "HONDA", "model": "Accord", "modelYear": "2003", "recallLimit": 25 },
"provenance": {
"source": "NHTSA vPIC + api.nhtsa.gov",
"sourceUrl": "https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVinValues/...",
"sourceUrls": ["..."],
"fetchedAt": "2026-10-31T12:00:00.000Z",
"license": "US Government work (NHTSA), public domain (17 U.S.C. 105)",
"licenseUrl": "https://www.usa.gov/government-works"
},
"cached": false,
"upstream": { "recallsHttp": 200, "complaintsHttp": 200 }
}
Recalls are de-duplicated by campaign number and sorted with "park it" recalls first, then newest.
Data source and licence
NHTSA vPIC and NHTSA recalls/complaints APIs. US Government work, public domain; no API key. Every 200 carries provenance with source URLs and fetchedAt.
Freshness and caching
Successful results can be served from a 30 minute in-memory cache (cached: true). Errors are never cached.
Limits
- Per make/model/year, not per VIN.
- Name matching is NHTSA's; a misspelled model looks like "no records" (404).
- Complaint figures cover the returned sample only.
- Summary text is cut (1000 chars; consequence and remedy 600).
Errors are not charged
Payment settles only on a successful answer. These responses are never settled:
| Status | Meaning (from the OpenAPI) | Charged? |
|---|---|---|
400 | Invalid input (not charged) | No |
404 | No NHTSA records for make/model/year (not charged) | No |
422 | VIN could not be decoded (not charged) | No |
502 | Upstream NHTSA error (not charged) | No |