The Best PHP API for Global Vehicle Registration OCR (Free Image Testing)
Extract text from worldwide vehicle registration documents using PHP. 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 PHP
Enterprise PHP applications, especially those built on frameworks like Laravel or Symfony, 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 PHP 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 PHP's cURL extension, 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: Raw API Request
Complete, runnable PHP code to encode a vehicle document image in Base64 and extract registration data via cURL.
Prerequisite: PHP 7.4+ or PHP 8+ with the cURL extension enabled
<?php
$apiKey = "YOUR_API_KEY"; // Replace with your actual API key
$imagePath = "path/to/your/document.jpg"; // Replace with the path to your image
// 1. Read image and encode to Base64
$imageData = file_get_contents($imagePath);
if ($imageData === false) {
die("Error: Unable to read image file.\n");
}
$base64Img = base64_encode($imageData);
// 2. Create JSON payload
$payload = json_encode(['img' => $base64Img]);
// 3. Build the HTTP request via cURL (Requires application/json)
$ch = curl_init("https://api.structocr.com/v1/vehicle-registration");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"x-api-key: " . $apiKey,
"Content-Type: application/json",
"Content-Length: " . strlen($payload)
]);
echo "Uploading Base64 image to StructOCR API...\n";
// 4. Send the request and receive the response
$response = curl_exec($ch);
if (curl_errno($ch)) {
die("cURL Error: " . curl_error($ch) . "\n");
}
curl_close($ch);
// 5. Parse the JSON response
$jsonResponse = json_decode($response, true);
// 6. Extract the Registration data
if (isset($jsonResponse['success']) && $jsonResponse['success'] === true) {
$data = $jsonResponse['data'];
echo "✅ Extraction Successful!\n";
echo "\n--- Raw Data ---\n";
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n";
} else {
$errorCode = $jsonResponse['code'] ?? "Unknown Code";
$errorMsg = $jsonResponse['message'] ?? "Unknown Error";
echo "❌ Error [{$errorCode}]: {$errorMsg}\n";
}
Technical Specs
- •Endpoint: POST https://api.structocr.com/v1/vehicle-registration
- •Input format: application/json payload with Base64 encoded string
- •File Constraints: Max 4.5MB (decoded). Compress to under 500 KB for best response time.
- •Supported Formats: Standard Data URI schemas, raw Base64 strings (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 (using real brand and color entities) alongside purely structural mock data for local fields.
{
"success": true,
"data": {
"document": {
"country_code": "SA",
"document_type": "VEHICLE_REGISTRATION",
"confidence_score": 0.98
},
"standardized": {
"vin": "FAKE0000000009999",
"plate": {
"number": "1357",
"letters_normalized": "A B C",
"formatted": "1357 ABC"
},
"make_raw": "بي ام دبليو",
"make_normalized": "BMW",
"model_raw": "سيدان",
"model_normalized": "Sedan",
"year": 2023,
"color_raw": "أسود",
"color_normalized": "Black"
},
"localized": {
"saudi": {
"tga_plate_details": {
"sequence_number": "1122334455",
"letter_right": "ا",
"letter_middle": "ب",
"letter_left": "ج",
"number": "1357",
"plate_type_raw": "نقل خاص",
"plate_type_normalized": "Private Transport"
}
}
}
}
}Frequently Asked Questions
How should I encode the image?
Send the image as a Base64 encoded string wrapped in a JSON payload. The Base64 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
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.
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.
Python Vehicle Registration OCR API
Python 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.
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.
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.
PHP Shipping Container OCR API
Tutorial: Learn how to use the StructOCR PHP Client via cURL for shipping container OCR. Upload an image for a free test! Extract ISO 6346 container numbers with 99% accuracy. Includes code samples and JSON schemas.
Nigeria NIN Slip OCR Python SDK
Python Tutorial: Automate KYC in Nigeria. Extract data from NIN Slip using StructOCR Python SDK. Supports native text.
Pakistan CNIC OCR Python SDK
Python Tutorial: Automate KYC in Pakistan. Extract data from CNIC using StructOCR Python SDK. Supports native text.
Netherlands Identiteitskaart OCR Python SDK
Python Tutorial: Automate KYC in Netherlands. Extract data from Identiteitskaart using StructOCR Python SDK. Supports native text and MRZ extraction.
Philippines UMID OCR Python SDK
Python Tutorial: Automate KYC in Philippines. Extract data from UMID using StructOCR Python SDK. Supports native text.
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.
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.
AWS Textract vs. StructOCR API for Indian Passport Back Page Extraction
Why generic OCR fails at parsing the back page of Indian passports, and how a dedicated KYC API instantly extracts structured addresses, PIN codes, and family details.
AWS Textract & Google Vision vs. StructOCR Passport API
Why generic cloud OCR APIs fail at structured KYC automation, and why developers choose specialized Passport APIs instead.
Add Container OCR to Your Bolt.new App in 5 Minutes
Step-by-step guide to integrating the StructOCR shipping container API into a Bolt.new app. Build logistics and yard management tools right in your browser.
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.