VIN Decoder API avatar

VIN Decoder API

Pricing

from $1.00 / 1,000 api-calls

Go to Apify Store
VIN Decoder API

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ş

Fatih Şahinbaş

Maintained by Community

Actor 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

PositionSectionMeaning
1–3WMIWorld Manufacturer Identifier (country + manufacturer)
4–8VDSVehicle Descriptor Section (manufacturer-specific)
9Check digitISO 3780 modulo-11 checksum
10Model year30-year cycle code
11Plant codeAssembly plant
12–17SerialProduction sequence

Endpoints

All endpoints are GET and return JSON.

EndpointPurposeParams
/validateValidate structure and check digitvin
/decodeFull structural decodevin
/checkdigitCompute the correct check digitvin

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, O or Q — if you see one, it's almost always a transcription error for 1 or 0.
  • Use /checkdigit on North American VINs to catch single-character typos in imported data.
  • manufacturer may be null for rare or very new WMIs; country still 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.