The Best Python API for Global Vehicle Registration OCR (Free Image Testing)
Extract text from worldwide vehicle registration documents using Python. Upload a document image for a free test today and get standardized VINs and dynamically localized fields for SA, AE, VN, and DE seamlessly.

The Problem with Parsing Global Registrations in Python
Python applications often struggle to parse vehicle registration documents across different international borders. Traditional tools lack the ability to handle both standard global fields, like a 17-character VIN, and unique localized fields specific to countries like Saudi Arabia or the UAE. Furthermore, generic OCR models often destroy native scripts during extraction rather than preserving them.
The StructOCR Solution
Our API allows your Python backend to automate data extraction from global vehicle registration documents effortlessly. It features a robust Standardized + Localized structure that unifies essential information like VIN, Make, and Model across all regions, while preserving native scripts in `_raw` fields. By sending a simple Base64 string via Python's standard `requests` library, you receive validated JSON with dynamically mounted region-specific data nodes and strictly enforced ISO 3779 VIN validation.
Common Use Cases
- Global Fleet Management: Extract standardized VIN, make, and model to onboard fleet vehicles instantly across different countries.
- Border Control & Logistics: Process region-specific documents like Saudi Istimara or UAE Mulkiya at borders with specialized localized schemas.
- Insurance Verification: Safely validate 17-character VINs automatically by relying on enforced ISO 3779 rules that correct common OCR mistakes.
Live Demo: Passport scanner
No registration required. Upload a file to test the extraction.
Drop files here or click to browse
JPG · PNG · WebP · up to 500 files · max 4.5 MB each
Implementation: Request with Python
Complete, runnable Python code to extract vehicle registration data using the standard `requests` library.
Prerequisite: Python 3.7+ and the requests library (pip install requests)
import requests
import base64
with open("document.jpg", "rb") as image_file:
base64_image = base64.b64encode(image_file.read()).decode('utf-8')
url = "https://api.structocr.com/v1/vehicle-registration"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"img": base64_image
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())Technical Specs
- •Endpoint: POST https://api.structocr.com/v1/vehicle-registration
- •Input format: Base64 encoded string passed in the JSON body.
- •File Constraints: Max 4.5MB (decoded). Compress to under 500 KB for best response time.
- •Supported Formats: JPG, PNG, WebP.
- •Output: JSON categorized into document, standardized, and localized nodes.
Key Features
- •Standardized + Localized Schema: Unifies universal specs while dynamically mounting localized fields for countries like SA, AE, VN, and DE.
- •Raw vs Normalized: Retains native language text in `_raw` fields and provides English standard terms in `_normalized` fields.
- •VIN Validation: Strictly enforces ISO 3779 rules for 17-character VIN extraction, safely correcting common OCR mistakes like 'O' to '0'.
Sample JSON Response
The API returns categorized data. This example shows a Saudi Arabia registration with standardized vehicle specs and localized TGA plate details.
{
"success": true,
"data": {
"document": {
"country_code": "SA",
"document_type": "VEHICLE_REGISTRATION",
"confidence_score": 0.99
},
"standardized": {
"vin": null,
"plate": {
"number": "8241",
"letters_normalized": "A T X",
"formatted": "8241 ATX"
},
"make_raw": "تويوتا",
"make_normalized": "Toyota",
"model_raw": "سيدان",
"model_normalized": "Sedan",
"year": 2022,
"color_raw": "احمر",
"color_normalized": "Red"
},
"localized": {
"saudi": {
"tga_plate_details": {
"sequence_number": "987654321",
"letter_right": "أ",
"letter_middle": "ط",
"letter_left": "س",
"number": "8241",
"plate_type_raw": "نقل خاص",
"plate_type_normalized": "Private Transport"
}
}
}
}
}Frequently Asked Questions
How should I encode the image?
Images must be sent as Base64 strings in the JSON body. The string must not contain any internal whitespaces or newlines.
What is the maximum file size?
The maximum decoded payload restriction is 4.5MB. Exceeding this will trigger a 413 Payload Too Large error.
What happens if a country isn't explicitly supported?
For countries without specific strict schemas, the engine automatically extracts key-value pairs into a generic `unmapped_fields` dictionary.
You May Also Like
Related tutorials, platform guides, and comparisons
Java Vehicle Registration OCR API
Java Vehicle Registration OCR API tutorial. Upload an image for a free test! Accurately extract standardized fields like VIN, make, and model, along with dynamically localized data for global documents.
PHP Vehicle Registration OCR API
PHP Vehicle Registration OCR API tutorial. Upload an image for a free test! Accurately extract standardized fields like VIN, make, and model, along with dynamically localized data for global documents.
Node.js Vehicle Registration OCR API
Node.js Vehicle Registration OCR API tutorial. Upload an image for a free test! Accurately extract standardized fields like VIN, make, and model, along with dynamically localized data for global documents.
C# Vehicle Registration OCR API
C# Vehicle Registration OCR API tutorial. Upload an image for a free test! Accurately extract standardized fields like VIN, make, and model, along with dynamically localized data for global documents.
Go Vehicle Registration OCR API
Golang Vehicle Registration OCR API tutorial. Upload an image for a free test! Accurately extract standardized fields like VIN, make, and model, along with dynamically localized data for global documents.
Ghana Ghana Card OCR Python SDK
Python Tutorial: Automate KYC in Ghana. Extract data, Personal ID Number, and validate TD1 MRZ from Ghana Card using StructOCR Python SDK.
Uzbekistan ID Karta OCR Python SDK
Python Tutorial: Automate KYC in Uzbekistan. Extract data from ID Karta using StructOCR Python SDK. Supports native text and MRZ parsing.
US Passport OCR with Python SDK
Use the official StructOCR Python SDK and FastAPI to extract structured MRZ and VIZ data from US passports with a server-side integration.
UK Passport OCR with Python SDK
Use the official StructOCR Python SDK and FastAPI to extract structured MRZ and VIZ data from UK passports with a server-side integration.
US Passport OCR with Node.js SDK
Use the official StructOCR Node.js SDK with TypeScript and Express to extract structured MRZ and VIZ data from US passports.
Technical Comparisons & Integrations
Explore platform integrations and competitive analysis
Single-Page MRZ SDKs vs. Dual-Page Indian KYC API
Why traditional MRZ scanners fail at full Indian Passport verification, and how to process both the front identity page and the back address page in a single API call.
Add VIN OCR to Your Lovable.dev App in 5 Minutes
Step-by-step guide to integrating the StructOCR VIN scanner API into a Lovable.dev app. Build automotive and fleet tools with zero backend required.
Manual TOS Entry vs. Container OCR Automation API
Analyzing the ROI and operational efficiency of replacing manual gate checkers with an automated Container OCR API in logistics yards.
OpenALPR vs. StructOCR API for VIN Decoding
Why traditional License Plate Recognition (ALPR) engines are not suitable for scanning Vehicle Identification Numbers (VINs).
Add Container OCR to Your Replit App in 5 Minutes
Step-by-step guide to integrating the StructOCR shipping container API into a Replit application. Build logistics and yard management tools using Replit Agent and Secrets.
Add Driver's License OCR to Your Replit App in 5 Minutes
Step-by-step guide to integrating the StructOCR Driver's License scanner API into a Replit application. Build car rental and mobility onboarding flows using Replit Agent and Secrets.
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.