Catalog / ToolMint NHTSA VIN + Recalls
ToolMint NHTSA VIN + Recalls
Decode a US VIN with NHTSA vPIC and return the NHTSA recall campaigns (and optional complaints) for that make/model/year. Not a per-VIN open/unrepaired status check. US Government data (public domain), no API key. Errors and no-match return 4xx and are not charged.
Routes and prices
| Route | Price | What it does | Parameters (* required) |
|---|---|---|---|
GET /vin/{vin} | $0.02 | VIN decode + recall campaigns for its make/model/year | vin*, includeComplaints, modelYear, recallLimit, complaintLimit |
GET /lookup | $0.02 | VIN decode + recalls via query | vin*, includeComplaints, modelYear, recallLimit, complaintLimit |
GET /recalls | $0.02 | Recalls by make/model/year | make*, model*, modelYear*, limit |
GET /complaints | $0.02 | Complaints by make/model/year | make*, model*, modelYear*, limit |
GET /decode | $0.02 | vPIC decode only | vin*, modelYear |
Free routes: /, /health, /openapi.json, /.well-known/x402.
When to use it
- You have a VIN and want the decoded make, model, year, body class and the recall campaigns listed for that model year.
- You have make/model/year and want recalls (
/recalls) or consumer complaints (/complaints). - You only want the decode (
/decode).
Do not use it to say a car is "recall-free" or that a repair was done.
Example
curl -i "https://toolmint-nhtsa-vin-recalls-json.toolmint.workers.dev/vin/1HGCM82633A004352"
That hostname is the planned worker name. The tool is not deployed yet.
Trimmed response (values are illustrative, not real NHTSA output):
{
"tool": "nhtsa-vin-recalls-json",
"version": "0.1.0",
"fetchedAt": "2026-10-31T12:00:00.000Z",
"vehicle": {
"vin": "1HGCM82633A004352",
"make": "HONDA", "model": "Accord", "modelYear": "2003",
"bodyClass": "...", "vehicleType": "...", "driveType": null,
"fuelTypePrimary": "...", "plantCountry": "...", "manufacturer": "...",
"series": null, "trim": null, "errorCode": "0", "errorText": "..."
},
"recalls": {
"make": "HONDA", "model": "Accord", "modelYear": "2003",
"count": 2, "totalReported": 2,
"recalls": [
{
"nhtsaCampaignNumber": "...", "manufacturer": "...", "component": "...",
"summary": "...", "summaryTruncated": false,
"consequence": "...", "remedy": "...", "reportReceivedDate": "...",
"parkIt": false, "parkOutSide": false, "overTheAirUpdate": false
}
],
"source": "api.nhtsa.gov/recalls/recallsByVehicle", "cached": false
},
"complaints": null,
"recallCampaignCount": 2,
"note": "Recall campaigns NHTSA lists for this make/model/year. This is NOT a per-VIN open/unrepaired status check; confirm a specific VIN at https://www.nhtsa.gov/recalls or with the manufacturer.",
"provenance": {
"sources": ["vpic.nhtsa.dot.gov", "api.nhtsa.gov"],
"fetchedAt": "2026-10-31T12:00:00.000Z",
"license": "US Government work (NHTSA), public domain (17 U.S.C. 105). No API key.",
"licenseUrl": "https://www.usa.gov/government-works",
"endpoints": ["DecodeVinValues", "recallsByVehicle"]
}
}
/recalls and /complaints return tool, version, fetchedAt, make, model, modelYear, count, totalReported, recalls (or complaints), source, cached, provenance. /decode returns tool, version, fetchedAt, vehicle, provenance.
Data source and licence
NHTSA vPIC and the NHTSA recalls and complaints APIs. US Government work, public domain; no API key. Source names, licence and fetchedAt are in every 200 response.
Freshness and caching
Results may come from a short in-memory cache: VIN decode up to 24 h, recalls and complaints up to 6 h. cached on the recalls/complaints object shows when a cached copy was used.
Limits
- Campaigns by make/model/year only; not per-VIN open status.
- Long text is cut (recall summary 1200 chars, consequence and remedy 800, complaint summary 800).
- Name matching is NHTSA's: a misspelled model looks the same as "no recalls" and returns 404.
- Complaints are consumer reports to NHTSA, not verified defects.
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 (not charged) | No |
422 | VIN could not be decoded (not charged) | No |
502 | Upstream NHTSA error (not charged) | No |