ToolMint

Catalog / ToolMint NHTSA Vehicle

Coming soon Safety, hazards & recalls

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

RoutePriceWhat it doesParameters (* required)
GET /vehicle$0.02Decode VIN (or make/model/year) and return NHTSA recall campaigns + complaint summary for that make/model/yearvin, make, model, modelYear, recallLimit
GET /vehicle/lookup$0.02Alias of /vehiclevin, make, model, modelYear, recallLimit

Free routes: /, /health, /openapi.json, /.well-known/x402.

Try it

Not deployed yet. The URL below is the planned address. After launch, an unpaid call returns 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:

StatusMeaning (from the OpenAPI)Charged?
400Invalid input (not charged)No
404No NHTSA records for make/model/year (not charged)No
422VIN could not be decoded (not charged)No
502Upstream NHTSA error (not charged)No