# VIN Decoder API – Specs, Recalls & Safety (`sfoln/vin-decoder`)

Decode VINs in bulk: make, model, year, trim, body, engine, fuel, drive, transmission and plant from official NHTSA data. Optional safety report per vehicle: recalls for its model year, complaint statistics, NCAP crash-test stars. $1 per 1,000 decoded VINs; safety report $2 per 1,000.

- Family: Data utilities
- Categories: Developer tools, Automation, Ecommerce
- Store: https://apify.com/sfoln/vin-decoder (Markdown: https://apify.com/sfoln/vin-decoder.md)
- JSON: https://www.sfoln.com/actors/vin-decoder.json
- MCP: https://mcp.apify.com?tools=sfoln/vin-decoder
- REST (sync): POST https://api.apify.com/v2/actors/sfoln~vin-decoder/run-sync-get-dataset-items
- REST (async): POST https://api.apify.com/v2/actors/sfoln~vin-decoder/runs

Decode one VIN or tens of thousands in a single run and get a clean, normalized vehicle record per VIN: make, model, model year, trim, body class, vehicle type, engine (cylinders, displacement, HP), fuel type, drive type, transmission and assembly plant. Data comes from the official NHTSA vPIC database (US government public data), queried in batches of 50 VINs. Turn on the optional vehicle safety report to add, per vehicle, the NHTSA recalls issued for its model year, complaint statistics by component, NCAP crash-test stars and the number of defect investigations. Built for dealer and fleet tools, insurance and lending workflows, marketplaces and AI agents that need a quick, structured answer.

## Price per delivered record

| Event | Price | Per 1,000 | Charged for |
| --- | --- | --- | --- |
| Decoded VIN (`vin-decoded`) | $0.001 | $1 / 1,000 | Charged once per VIN for which NHTSA vPIC returned vehicle data (make, model or model year). |
| Vehicle safety report (`vehicle-safety-report`), paid plans only | $0.002 | $2 / 1,000 | NHTSA recalls issued for the decoded make, model and model year, complaint statistics by component, NCAP crash-test stars and the investigation count. |

Pay-per-event, USD, billed by Apify; no platform usage charge. Only records with status `ok` are charged. Cap a run with `maxTotalChargeUsd`. Apify free plan: up to 10 per run.

## Run

```bash
curl -X POST "https://api.apify.com/v2/actors/sfoln~vin-decoder/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"vins":["1HGCM82633A004352","JH4KA7561PC008269"]}'
```

MCP client configuration:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/vin-decoder"
    }
  }
}
```

Example prompt: Decode the VIN 1HGCM82633A004352 and list the recalls issued for that model year with their remedies.

## Input

Paste 17-character VINs (one per line) or pass an array. Each VIN produces one dataset record with a normalized `status`.

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `vins` (required) | array | — | VINs: Vehicle Identification Numbers (17 characters, 1981+), one per line; several VINs on one line can be separated by spaces, commas or semicolons. Spaces and dashes inside a VIN are removed, duplicates dropped. Objects with a `vin` field are accepted too. Accounts on the Apify free plan can process up to 10 VINs per run. |
| `maxVins` | integer | `10000` | Max VINs: Safety cap on the number of VINs processed in this run. |
| `includeSafetyReport` | boolean | `false` | Include vehicle safety report: Add NHTSA safety data for each decoded vehicle: recalls issued for its make, model and model year, complaint statistics by component, NCAP crash-test star ratings and the number of NHTSA investigations. Charged as `vehicle-safety-report` ($0.002) per VIN with safety data, on paid Apify plans only. |
| `concurrency` | integer | `5` | Concurrency: Parallel workers. VINs are sent to NHTSA in batches of 50 regardless of this value. |
| `includeRaw` | boolean | `false` | Include raw upstream response: Attach all ~150 raw NHTSA vPIC fields to each record (larger output). |

Example input:

```json
{
  "vins": [
    "1HGCM82633A004352",
    "JH4KA7561PC008269"
  ]
}
```

## Output

One record per input item with `status` (`ok` is charged; `not_found`, `error`, `skipped_*` are free) and `charged`. The run stores an `OUTPUT` summary record.

| Field | Type | Meaning |
| --- | --- | --- |
| `input` | string | Input: The VIN as submitted (upper-cased, spaces/dashes removed). |
| `vin` | string | VIN: Normalized 17-character VIN. |
| `decoded` | boolean | Decoded: NHTSA returned make, model or model year. |
| `make` | string | null | Make |
| `manufacturer` | string | null | Manufacturer |
| `model` | string | null | Model |
| `modelYear` | integer | null | Model year |
| `trim` | string | null | Trim |
| `series` | string | null | Series |
| `bodyClass` | string | null | Body class |
| `vehicleType` | string | null | Vehicle type |
| `doors` | integer | null | Doors |
| `engineCylinders` | integer | null | Engine cylinders |
| `displacementL` | number | null | Displacement (L) |
| `engineHp` | number | null | Engine HP |
| `engineModel` | string | null | Engine model |
| `fuelTypePrimary` | string | null | Primary fuel |
| `fuelTypeSecondary` | string | null | Secondary fuel |
| `electrificationLevel` | string | null | Electrification level |
| `driveType` | string | null | Drive type |
| `transmissionStyle` | string | null | Transmission |
| `transmissionSpeeds` | integer | null | Transmission speeds |
| `gvwr` | string | null | GVWR class |
| `plantCity` | string | null | Plant city |
| `plantState` | string | null | Plant state |
| `plantCountry` | string | null | Plant country |
| `checkDigitOk` | boolean | Check digit OK: Position 9 matches the ISO 3779 check digit. |
| `errorCodes` | array | vPIC error codes: "0" = decoded clean; other codes explain partial decodes. |
| `errorText` | string | null | vPIC error text |
| `suggestedVin` | string | null | Suggested VIN |
| `safetyReport` | object | null | Vehicle safety report: Only with includeSafetyReport: NHTSA recalls issued for the make, model and model year (VIN-level repair status is not public), complaint statistics, NCAP ratings of the tested variants and the investigation count. Null when the report was skipped (see warnings). |
| `warnings` | array | Warnings |
| `status` | string | Status: ok \| not_found \| error \| skipped_invalid \| skipped_budget \| skipped_free_plan |
| `charged` | boolean | Charged: Whether this record incurred a pay-per-event charge. |
| `source` | string | Source |
| `fetchedAt` | string | Fetched at |

Example record:

```json
{
  "input": "1HGCM82633A004352",
  "vin": "1HGCM82633A004352",
  "decoded": true,
  "make": "HONDA",
  "manufacturer": "AMERICAN HONDA MOTOR CO., INC.",
  "model": "Accord",
  "modelYear": 2003,
  "trim": "EX-V6",
  "series": null,
  "bodyClass": "Coupe",
  "vehicleType": "PASSENGER CAR",
  "doors": 2,
  "engineCylinders": 6,
  "displacementL": 3,
  "engineHp": 240,
  "engineModel": "J30A4",
  "fuelTypePrimary": "Gasoline",
  "fuelTypeSecondary": null,
  "electrificationLevel": null,
  "driveType": null,
  "transmissionStyle": "Automatic",
  "transmissionSpeeds": 5,
  "gvwr": "Class 1C: 4,001 - 5,000 lb (1,814 - 2,268 kg)",
  "plantCity": "MARYSVILLE",
  "plantState": "OHIO",
  "plantCountry": "UNITED STATES (USA)",
  "checkDigitOk": true,
  "errorCodes": [
    "0"
  ],
  "errorText": "0 - VIN decoded clean. Check Digit (9th position) is correct",
  "suggestedVin": null,
  "status": "ok",
  "charged": true,
  "chargedEvent": "vin-decoded",
  "source": "nhtsa-vpic",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}
```

## FAQ

**Does the safety report tell me whether this exact car still has an open recall?**

No. NHTSA publishes recalls per make, model and model year, so the report lists every recall issued for the vehicle's model year (recallScope "make-model-year"). Whether a recall was already repaired on one specific VIN is only available from the manufacturer or NHTSA's VIN lookup page, not from a public API. Each recall has a link to its NHTSA page.

**What is in the vehicle safety report?**

Recalls (campaign number, date, component, summary, consequence, remedy, park-it and park-outside flags), complaint statistics (total, crashes, fires, injuries, deaths, first and last filing date, the ten components named most often), NCAP crash-test stars of each tested variant with the best match to the decoded VIN marked, and the number of NHTSA defect investigations. Complaint texts are not included.

**Which VINs can be decoded?**

17-character VINs from model year 1981 on. Coverage is best for vehicles sold in the United States; vehicles built for other markets may decode partially or not at all, and NHTSA has no safety data for models not sold in the US.


## Related

- [Currency Exchange Rates API](https://www.sfoln.com/actors/fx-rates.md) (`sfoln/fx-rates`)
- [Geocoding API – Address to Coordinates](https://www.sfoln.com/actors/geocode-address.md) (`sfoln/geocode-address`)
- [Phone Number Validator](https://www.sfoln.com/actors/phone-validator.md) (`sfoln/phone-validator`)

Publisher: SFOLN LLC, contact@sfoln.com. Catalogue: https://www.sfoln.com/catalog.json. Agent guide: https://www.sfoln.com/agents.md.
