VIN Decoder API
Decode a 17-character VIN: validity, check digit, manufacturer and country (13 000 WMIs), model year, plant code, optional full NHTSA vPIC details.
Send vin (or /v1/vin-decode/<VIN>). The API checks the length and alphabet (I, O and Q are never used), computes the check digit of position 9 (mandatory for North American vehicles, a warning elsewhere), splits the WMI / VDS / VIS sections, finds the manufacturer, its country and the vehicle type in the NHTSA list of World Manufacturer Identifiers (13 000 entries, incl. 6-character WMIs of small makers and Vietnamese makers such as VinFast), gives the country of origin from the ISO 3780 ranges of the first two characters, the model year from position 10 (the 30-year cycle is resolved with the position 7 rule for North American light vehicles, other candidates listed), the plant code and serial number.
online=true also asks NHTSA vPIC (public, no key) for make, model, trim, body class, engine, fuel, plant, safety equipment… – detailed mainly for vehicles sold in the USA; answers are cached 30 days. vins decodes up to 50 VINs at once (10 with online).
The offline decode does not tell the model of non-US vehicles: VDS coding is manufacturer-specific. Data: NHTSA vPIC (US government work, public domain), refreshed weekly.
Parameters
| Name | In | Type | Required | Default | |
|---|---|---|---|---|---|
vin | query | string | yes | 17-character VIN (spaces and dashes ignored). Or /v1/vin-decode/<VIN>. | |
online | query | boolean | no | false | Add the NHTSA vPIC decode (vpic object; cached 30 days). |
vins | body|query | array | no | Up to 50 VINs (array or comma-separated) instead of vin. |
Example
curl "https://apibox.io.vn/v1/vin-decode?vin=1HGCM82633A004352" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch('https://apibox.io.vn/v1/vin-decode?vin=1HGCM82633A004352', {
method: 'GET',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
},
});
const data = await res.json();
console.log(data);import requests
res = requests.get(
"https://apibox.io.vn/v1/vin-decode?vin=1HGCM82633A004352",
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vin-decode?vin=1HGCM82633A004352');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY'],
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Response
{
"vin": "1HGCM82633A004352",
"valid": true,
"warnings": [],
"wmi": "1HG",
"vds": "CM8263",
"vis": "3A004352",
"manufacturer": "AMERICAN HONDA MOTOR CO., INC.",
"manufacturer_country": "United States",
"vehicle_type": "Passenger Car",
"country_of_origin": "United States",
"region": "North America",
"wmi_known": true,
"check_digit": {
"value": "3",
"expected": "3",
"valid": true,
"required": true
},
"model_year": 2003,
"model_year_candidates": [
2003
],
"model_year_rule": "only year of the cycle not in the future",
"plant_code": "A",
"serial_number": "004352",
"sources": {
"wmi": "NHTSA vPIC manufacturer list (public domain)",
"online": null
},
"data_version": "2026-11-11"
}
Use cases
- Catch typos in VINs typed by users of a used-car marketplace
- Show maker, origin and model year when a garage scans a VIN
- Check imported US vehicles against the NHTSA decode before registration
- Validate a batch of VINs in an insurance or fleet file
FAQ
Why is the check digit only a warning for my car?
The check digit is required in North America (VINs starting with 1–5 or 7). European and Asian makers often do not use it, so a mismatch there is reported as a warning.
Why can the model year be ambiguous?
Position 10 repeats every 30 years (A = 1980, 2010, 2040). For North American cars position 7 settles it; otherwise the most recent year is chosen and all candidates are listed.
Where do the online details come from?
From NHTSA's free vPIC DecodeVinValues service. It is most complete for vehicles built for the US market.
Related APIs
JSON Validator
Check JSON syntax with exact line and column of errors, and validate data against a JSON Schema (draft 4, 7, 2019-09 or 2020-12).
{ }JSON Formatter
Pretty print JSON with 0-8 spaces or tabs, minify it, or sort object keys recursively. Syntax errors are reported with line and column.
CSVCSV to JSON
Convert CSV into an array of JSON objects using the header row, with delimiter auto-detection, number and boolean typing, and row-level errors.