VIN Structure Explained: WMI, VDS, and VIS
How the 17-character Vehicle Identification Number is organized into the WMI, VDS, check digit, and VIS, and what each section tells you.
The three sections
A modern VIN has 17 characters. Positions 1–3 are the World Manufacturer Identifier (WMI), positions 4–9 are the Vehicle Descriptor Section (VDS), and positions 10–17 are the Vehicle Identifier Section (VIS). The letters I, O, and Q are never used, to avoid confusion with 1 and 0.
Extracting It Automatically
When you read this data from photos, the VIN OCR API returns it as structured JSON, and you can apply the rules on this page as validation. Try it with the free scanner.
Where This Fits
- World Manufacturer Identifier: The first character indicates the region or country of manufacture (for example 1, 4, or 5 for the United States, 2 for Canada, 3 for Mexico, J for Japan, K for Korea, W for Germany). Together with characters 2 and 3 it identifies the manufacturer and often the vehicle type.
- Vehicle Descriptor Section: Positions 4–8 describe model, body, engine, and restraint details in a manufacturer-specific way. Position 9 is the check digit in North American VINs.
- Vehicle Identifier Section: Position 10 encodes the model year, position 11 usually identifies the assembly plant, and positions 12–17 are the production sequence number.
Extract It with the API
Read the document from a photo and validate the returned fields.
Prerequisite: Python 3.9+, `pip install requests`, and a STRUCTOCR_API_KEY
import base64
import os
import requests
with open("vin.jpg", "rb") as image_file:
image = base64.b64encode(image_file.read()).decode("ascii")
response = requests.post(
"https://api.structocr.com/v1/vin",
headers={"x-api-key": os.environ["STRUCTOCR_API_KEY"]},
json={"img": image},
timeout=30,
)
response.raise_for_status()
data = response.json()["data"]
print("vin:", data.get("vin"))
print("confidence:", data.get("confidence"))
print("carrier_type:", data.get("carrier_type"))Technical Specs
- •Endpoint: POST https://api.structocr.com/v1/vin
- •Authentication: x-api-key request header
- •Inputs: JPG, PNG, or WebP as Base64 JSON; maximum 4.5MB
- •Price: 1 credit per successful request; failed requests are not billed
- •Free trial: 200 free credits on sign-up, no credit card required
Key Features
- •World Manufacturer Identifier: The first character indicates the region or country of manufacture (for example 1, 4, or 5 for the United States, 2 for Canada, 3 for Mexico, J for Japan, K for Korea, W for Germany). Together with characters 2 and 3 it identifies the manufacturer and often the vehicle type.
- •Vehicle Descriptor Section: Positions 4–8 describe model, body, engine, and restraint details in a manufacturer-specific way. Position 9 is the check digit in North American VINs.
- •Vehicle Identifier Section: Position 10 encodes the model year, position 11 usually identifies the assembly plant, and positions 12–17 are the production sequence number.
- •Validate after OCR: Apply these rules to API output before storing it.
Reference Summary
Key facts from this page in structured form, for quick lookup.
{
"The three sections": "A modern VIN has 17 characters.",
"World Manufacturer Identifier": "The first character indicates the region or country of manufacture (for example 1, 4, or 5 for the United States, 2 for Canada, 3 for Mexico, J for Japan, K for Korea, W for Germany).",
"Vehicle Descriptor Section": "Positions 4–8 describe model, body, engine, and restraint details in a manufacturer-specific way.",
"Vehicle Identifier Section": "Position 10 encodes the model year, position 11 usually identifies the assembly plant, and positions 12–17 are the production sequence number.."
}Frequently Asked Questions
Is every VIN 17 characters?
Vehicles from model year 1981 onward use the standardized 17-character VIN. Older vehicles use manufacturer-specific serial numbers.
Can I decode make and model from the VIN?
Yes. After extracting the VIN, look up the WMI and VDS in a decoding service such as NHTSA’s free vPIC API.
You May Also Like
Related tutorials, platform guides, and comparisons
Java VIN OCR API
Tutorial: How to use the StructOCR Java Client to extract data from VINs. Upload an image for a free test! Includes code samples and JSON schema.
Mazda VIN Location and VIN OCR API
Where to find the VIN on a Mazda, what its first characters mean, and how to read it from a photo with an API and decode the model year.
Accelerate Auto Insurance Claims with VIN OCR API
Speed up First Notice of Loss (FNOL) and AI damage estimates. Learn how to extract accurate VINs from blurry, user-generated accident photos instantly.
Go VIN OCR API
Upload an image for a free test! Tutorial: How to use the StructOCR Go Client to extract data from VIN (Vehicle Identification Number)s. Includes code samples and JSON schema.
Trailer VIN Plate OCR API
Where the VIN is on a trailer, how to photograph it so it reads reliably, and how to extract it with a VIN OCR API.
Rivian VIN Location and VIN OCR API
Where to find the VIN on a Rivian, what its first characters mean, and how to read it from a photo with an API and decode the model year.
C# VIN OCR API
Upload an image for a free test! Tutorial: How to use the StructOCR C# Client to extract data from VIN (Vehicle Identification Number)s. Includes code samples and JSON schema.
Volkswagen VIN Location and VIN OCR API
Where to find the VIN on a Volkswagen, what its first characters mean, and how to read it from a photo with an API and decode the model year.
Python VIN OCR API
Tutorial: How to use the StructOCR Python SDK to extract data from VIN (Vehicle Identification Number)s. Upload an image for a free test! Includes code samples and JSON schema.
Virginia Driver License & ID Card PDF417 API
Decode the PDF417 barcode on Virginia driver licenses and state ID cards into AAMVA JSON, with document_kind to tell licenses from ID cards.
Technical Comparisons & Integrations
Explore platform integrations and competitive analysis
Add VIN OCR to Your Replit App in 5 Minutes
Step-by-step guide to integrating the StructOCR VIN scanner API into a Replit application. Build automotive and fleet tools using Replit Agent and Secrets.
Add VIN OCR to Your v0 App in 5 Minutes
Step-by-step guide to integrating the StructOCR VIN scanner API into a v0 by Vercel app. Build automotive and fleet tools with zero backend.
VIN Barcode Scanner vs. VIN OCR API: Which is Better for Mobile Apps?
Deciding between local VIN barcode scanners and cloud-based VIN OCR API for your mobile app? Learn why OCR is the required fallback for damaged or chassis-stamped VINs.
Apple Vision Framework / ML Kit vs. StructOCR VIN API
Why generic on-device text recognition frameworks fail at decoding VINs, and when to switch to a specialized automotive API.
Add VIN OCR to Your Bolt.new App in 5 Minutes
Step-by-step guide to integrating the StructOCR VIN scanner API into a Bolt.new app. Build automotive and fleet tools right in your browser.
Add VIN OCR using Cursor in 5 Minutes
Step-by-step guide to integrating the StructOCR VIN scanner API using the Cursor AI code editor. Build automotive and fleet tools rapidly.
From tutorial to production in 5 minutes.
You've seen the code. Now get your API key, grab your 200 free credits, and see it work with your own images. No credit card required.