# 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.

- Status: Coming soon
- Price: $0.02 / call (x402 exact, USDC on Base eip155:8453, payTo 0xfbF7413bcB3a604936775C96FDbe0b0C9c9E37F5)
- Planned URL: https://toolmint-nhtsa-vehicle.toolmint.workers.dev
- OpenAPI: https://toolmint.toolmint.workers.dev/tools/nhtsa-vehicle-json/openapi.json

## Routes

- `GET /vehicle` $0.02: Decode VIN (or make/model/year) and return NHTSA recall campaigns + complaint summary for that make/model/year
- `GET /vehicle/lookup` $0.02: Alias of /vehicle

## 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

```bash
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):

```json
{
  "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).
