VIN Decoder API
Pricing
from $1.00 / 1,000 api-calls
VIN Decoder API
Validate and decode Vehicle Identification Numbers offline via a simple HTTP API.
Pricing
from $1.00 / 1,000 api-calls
Rating
0.0
(0)
Developer
Fatih Şahinbaş
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
5 days ago
Last modified
Categories
Share
VIN Decoder API — Validate & Decode Vehicle Identification Numbers
A fast, offline VIN decoder and validator. Check the ISO 3780 check digit, identify the country of manufacture and the manufacturer, decode the model year, plant code and serial number — all through simple GET requests.
No third-party lookups, no API keys to juggle, no rate limits, no US-only coverage.
What it does
- ✅ Validate a VIN — length, forbidden letters (
I,O,Q) and the ISO 3780 check digit, with clear error messages. - 🔍 Decode the structure — WMI, VDS and VIS sections, country, manufacturer, model year, assembly plant code and serial number.
- 🔢 Calculate the check digit — get the correct position-9 character and a corrected VIN.
Why offline matters
Most free VIN tools proxy a government database: they're rate-limited, they go down, and they typically only cover vehicles sold in the United States. This API resolves everything from the VIN's own structure using embedded reference tables, so it answers in milliseconds for any VIN worldwide — European, Japanese, Korean, Chinese, Turkish, Brazilian and more.
Honest about what a VIN can tell you
Positions 4–8 (the VDS) are manufacturer-specific with no public standard. Any generic decoder claiming to read your trim level, engine or transmission from those five characters is guessing. This API returns what is genuinely derivable from the VIN and says so explicitly — no invented specs in your data pipeline.
The check digit nuance
Position 9 is a mandatory checksum in North America and South Korea. Most European and Japanese manufacturers don't use a conforming check digit — a real Volkswagen VIN will "fail" a naive checksum test.
This API reports two separate fields:
checkDigitValid— does the supplied digit match the calculation?checkDigitRequired— is a conforming check digit expected for this market?
So a legitimate European VIN is never wrongly flagged as invalid.
VIN structure
| Position | Section | Meaning |
|---|---|---|
| 1–3 | WMI | World Manufacturer Identifier (country + manufacturer) |
| 4–8 | VDS | Vehicle Descriptor Section (manufacturer-specific) |
| 9 | Check digit | ISO 3780 modulo-11 checksum |
| 10 | Model year | 30-year cycle code |
| 11 | Plant code | Assembly plant |
| 12–17 | Serial | Production sequence |
Endpoints
All endpoints are GET and return JSON.
| Endpoint | Purpose | Params |
|---|---|---|
/validate | Validate structure and check digit | vin |
/decode | Full structural decode | vin |
/checkdigit | Compute the correct check digit | vin |
Examples
Decode
GET /decode?vin=WVWZZZ1JZ3W386752
{"normalized": "WVWZZZ1JZ3W386752","valid": true,"checkDigit": "9","checkDigitValid": false,"checkDigitRequired": false,"wmi": "WVW","vds": "ZZZ1J","vis": "3W386752","country": "Germany","manufacturer": "Volkswagen","modelYearCode": "3","modelYear": 2003,"modelYearAlternate": 2033,"plantCode": "W","serialNumber": "386752"}
Validate
GET /validate?vin=1HGCM82633A004352
{"valid": true,"normalized": "1HGCM82633A004352","errors": [],"checkDigit": "3","checkDigitValid": true,"checkDigitRequired": true}
Fix a typo
GET /checkdigit?vin=1M8GDM9A0KP042788
{"checkDigit": "X","provided": "0","matches": false,"corrected": "1M8GDM9AXKP042788"}
Who it's for
Dealership and marketplace platforms validating listing input, insurance and leasing systems checking policy data, fleet management tools, auction and salvage sites, parts catalogs, and anyone importing vehicle records who needs to catch transcription errors before they spread.
Model year ambiguity
The position-10 code repeats on a 30-year cycle, so 3 means either 2003 or 2033. For North American VINs the API disambiguates using position 7 (per FMVSS 565). Elsewhere it reports the plausible year and returns the other candidate in modelYearAlternate — never a silent guess.
Tips
- Spaces and hyphens in the input are ignored, and lowercase input is normalized.
- A VIN never contains
I,OorQ— if you see one, it's almost always a transcription error for1or0. - Use
/checkdigiton North American VINs to catch single-character typos in imported data. manufacturermay benullfor rare or very new WMIs;countrystill resolves from the WMI range.
Pricing
Pay-per-event: $0.001 per successful API call. Readiness/health checks are never charged. No subscription, no minimums.