Archive
How to Check Polish Vehicle History Using Python and RapidAPI
When buying a used car in Poland, one of the most important steps is verifying the vehicle’s history. Thanks to modern APIs, you can now programmatically access official vehicle registration data from the CEPiK (Central Register of Vehicles and Drivers) system. In this tutorial, we’ll show you how to use Python to check a vehicle’s complete history using the Polish Vehicle History API on RapidAPI.
What Information Can You Get?
The Polish Vehicle History API provides comprehensive data about any registered vehicle in Poland:
Technical Specifications
- Make, model, year of manufacture
- Engine capacity and power
- Fuel type and emission standards
- Weight specifications and seating capacity
Ownership History
- Complete ownership timeline
- Number of previous owners
- Registration provinces
- Corporate vs. private ownership
Technical Inspections
- All periodic technical inspections with dates and results
- Odometer readings at each inspection
- Detection of rolled-back odometers
Legal Status
- Current registration status
- Valid insurance information
- Stolen or withdrawn vehicle alerts
Risk Assessment
- Accident history indicators
- Damage reports
- Taxi usage history
- Odometer tampering detection
Getting Started
Prerequisites
First, install the required Python library:
pip install requests
Basic Implementation
Here’s a simple example to get you started:
import requests
# API configuration
url = "https://historia-pojazdow-polskich.p.rapidapi.com/EL6574U/YS3DD55C622039715/2002-06-04"
headers = {
"x-rapidapi-host": "historia-pojazdow-polskich.p.rapidapi.com",
"x-rapidapi-key": "YOUR_API_KEY_HERE"
}
# Make the request
response = requests.get(url, headers=headers)
# Check if request was successful
if response.status_code == 200:
data = response.json()
print("Data retrieved successfully!")
print(data)
else:
print(f"Error: {response.status_code}")
print(response.text)
Advanced Implementation with Error Handling
For production use, you’ll want a more robust implementation:
import requests
import json
from typing import Optional, Dict, Any
class PolishVehicleHistoryAPI:
def __init__(self, api_key: str):
self.base_url = "https://historia-pojazdow-polskich.p.rapidapi.com"
self.headers = {
"x-rapidapi-host": "historia-pojazdow-polskich.p.rapidapi.com",
"x-rapidapi-key": api_key
}
def check_vehicle(self, license_plate: str, vin: str, first_registration_date: str) -> Optional[Dict[Any, Any]]:
"""
Check vehicle history
Args:
license_plate: License plate number (e.g., "EL6574U")
vin: Vehicle identification number
first_registration_date: Date in YYYY-MM-DD format
Returns:
Dictionary with vehicle data or None on error
"""
url = f"{self.base_url}/{license_plate}/{vin}/{first_registration_date}"
try:
response = requests.get(url, headers=self.headers, timeout=10)
if response.status_code == 200:
return response.json()
elif response.status_code == 404:
print("Vehicle not found with provided parameters")
return None
elif response.status_code == 429:
print("API rate limit exceeded")
return None
else:
print(f"API error: {response.status_code} - {response.text}")
return None
except requests.exceptions.Timeout:
print("Timeout - API not responding")
return None
except requests.exceptions.RequestException as e:
print(f"Connection error: {e}")
return None
def main():
# IMPORTANT: Insert your RapidAPI key here
API_KEY = "YOUR_API_KEY_HERE"
# Create API instance
api = PolishVehicleHistoryAPI(API_KEY)
# Vehicle parameters
license_plate = "EL6574U"
vin = "YS3DD55C622039715"
registration_date = "2002-06-04"
print(f"Checking vehicle: {license_plate}")
# Retrieve data
data = api.check_vehicle(license_plate, vin, registration_date)
if data:
print("\n=== VEHICLE HISTORY RESULTS ===")
# Display basic information
if len(data) > 0 and "technicalData" in data[0]:
basic_data = data[0]["technicalData"]["basicData"]
print(f"Make: {basic_data.get('make')}")
print(f"Model: {basic_data.get('model')}")
print(f"Year: {basic_data.get('yearOfManufacture')}")
print(f"Registration status: {basic_data.get('registrationStatus')}")
# Odometer reading
if basic_data.get('odometerReadings'):
reading = basic_data['odometerReadings'][0]
rolled_back = " (ODOMETER ROLLED BACK!)" if reading.get('rolledBack') else ""
print(f"Mileage: {reading.get('value')} {reading.get('unit')}{rolled_back}")
# Risk analysis (if available)
if len(data) > 2 and "carfaxData" in data[2]:
risk = data[2]["carfaxData"]["risk"]
print("\n=== RISK ANALYSIS ===")
print(f"Stolen: {'YES' if risk.get('stolen') else 'NO'}")
print(f"Post-accident: {'YES' if risk.get('postAccident') else 'NO'}")
print(f"Odometer tampering: {'YES' if risk.get('odometerTampering') else 'NO'}")
print(f"Taxi: {'YES' if risk.get('taxi') else 'NO'}")
# Save complete data to file
with open(f"vehicle_history_{license_plate}.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f"\nComplete data saved to: vehicle_history_{license_plate}.json")
else:
print("Failed to retrieve vehicle data")
if __name__ == "__main__":
main()
Understanding the API Response
The API returns data in three main sections:
1. Technical Data
Contains all technical specifications and current vehicle status:
technical_data = data[0]["technicalData"]["basicData"]
print(f"Make: {technical_data['make']}")
print(f"Model: {technical_data['model']}")
print(f"Engine capacity: {technical_data['engineCapacity']} cc")
2. Timeline Data
Provides complete ownership and inspection history:
timeline = data[1]["timelineData"]
print(f"Total owners: {timeline['totalOwners']}")
print(f"Current registration province: {timeline['registrationProvince']}")
# Loop through all events
for event in timeline["events"]:
print(f"{event['eventDate']}: {event['eventName']}")
3. Risk Assessment
Carfax-style risk indicators:
risk_data = data[2]["carfaxData"]["risk"]
if risk_data["odometerTampering"]:
print("⚠️ Warning: Possible odometer tampering detected!")
Real-World Use Cases
1. Used Car Marketplace Integration
def evaluate_vehicle_for_listing(license_plate, vin, registration_date):
api = PolishVehicleHistoryAPI("YOUR_API_KEY")
data = api.check_vehicle(license_plate, vin, registration_date)
if not data:
return {"status": "error", "message": "Cannot verify vehicle"}
# Extract risk factors
risk = data[2]["carfaxData"]["risk"] if len(data) > 2 else {}
risk_score = sum([
risk.get("stolen", False),
risk.get("postAccident", False),
risk.get("odometerTampering", False),
risk.get("taxi", False)
])
return {
"status": "success",
"risk_level": "high" if risk_score > 1 else "low",
"owners_count": data[1]["timelineData"]["totalOwners"],
"mileage_verified": not data[0]["technicalData"]["basicData"]["odometerReadings"][0]["rolledBack"]
}
2. Insurance Risk Assessment
def calculate_insurance_risk(vehicle_data):
if not vehicle_data:
return "unknown"
timeline = vehicle_data[1]["timelineData"]
risk_data = vehicle_data[2]["carfaxData"]["risk"]
# High risk indicators
if (timeline["totalOwners"] > 5 or
risk_data.get("postAccident") or
risk_data.get("taxi")):
return "high_risk"
return "standard_risk"
Getting Your API Key
- Sign up at RapidAPI.com
- Search for “Polish Vehicle History” or “Historia Pojazdów Polskich”
- Subscribe to an appropriate plan
- Copy your API key from the “Headers” section
- Replace
"YOUR_API_KEY_HERE"with your actual key
API Parameters Explained
The API endpoint requires three parameters:
- license_plate: The Polish license plate number (e.g., “EL6574U”)
- vin: The 17-character Vehicle Identification Number
- first_registration_date: Date when the vehicle was first registered in Poland (YYYY-MM-DD format)
Best Practices and Security
1. Secure API Key Management
Never hardcode your API key. Use environment variables instead:
import os
API_KEY = os.environ.get('RAPIDAPI_KEY')
if not API_KEY:
raise ValueError("Please set RAPIDAPI_KEY environment variable")
2. Rate Limiting and Caching
Implement proper rate limiting to avoid exceeding API quotas:
import time
from functools import wraps
def rate_limit(max_calls_per_minute=60):
min_interval = 60.0 / max_calls_per_minute
last_called = [0.0]
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
elapsed = time.time() - last_called[0]
left_to_wait = min_interval - elapsed
if left_to_wait > 0:
time.sleep(left_to_wait)
ret = func(*args, **kwargs)
last_called[0] = time.time()
return ret
return wrapper
return decorator
@rate_limit(max_calls_per_minute=50)
def check_vehicle_with_rate_limit(api, license_plate, vin, date):
return api.check_vehicle(license_plate, vin, date)
3. Error Handling and Retries
Implement exponential backoff for transient errors:
import time
import random
def check_vehicle_with_retry(api, license_plate, vin, date, max_retries=3):
for attempt in range(max_retries):
try:
result = api.check_vehicle(license_plate, vin, date)
if result is not None:
return result
except requests.exceptions.RequestException:
if attempt < max_retries - 1:
wait_time = (2 ** attempt) + random.random()
time.sleep(wait_time)
else:
raise
return None
Conclusion
The Polish Vehicle History API provides a powerful way to programmatically access comprehensive vehicle data directly from official government sources. Whether you’re building a used car marketplace, developing an insurance application, or creating tools for automotive professionals, this API offers reliable and up-to-date information about any vehicle registered in Poland.
The examples in this guide provide a solid foundation for integrating vehicle history checks into your Python applications. Remember to handle errors gracefully, respect rate limits, and keep your API credentials secure.
With this integration, you can help users make informed decisions when buying used cars, reduce fraud in automotive transactions, and build more trustworthy platforms for the Polish automotive market.
https://www.tablicarejestracyjnaapi.pl/
Italian Vehicle Registration API: Complete Guide to Vehicle Data Lookup in Italy
https://www.targa.co.it/
Italy operates a sophisticated vehicle registration system managed by the Ministry of Transport, covering over 39 million registered vehicles across the country’s 20 regions. The Italian Vehicle Registration API provides developers and businesses with access to comprehensive vehicle specifications, technical data, and insurance information for vehicles registered throughout Italy, from the industrial north to the southern regions.
Overview of Italian Vehicle Registration System
Italy’s vehicle registration system is centralized under the Motorizzazione Civile (Department of Motor Vehicles) and integrated with the PRA (Pubblico Registro Automobilistico – Public Automotive Registry). The system maintains detailed records for all vehicle types, from traditional cars to motorcycles, providing standardized identification across all Italian provinces.
The Italian license plate system has evolved over time:
- Current format (1994-present): Two letters + three numbers + two letters (AB 123 CD)
- Regional identification: Letters indicate the province of registration
- Special formats: Diplomatic, military, and temporary plates with distinct patterns
Italian Vehicle API Features
The Italy endpoint provides comprehensive vehicle information with focus on technical specifications and power ratings:
Available Data for Cars
When querying Italian car registrations, you can retrieve:
- Make and Model – Complete manufacturer and vehicle model identification
- Registration Year – Year when the vehicle was first registered in Italy
- Engine Specifications – Engine displacement and detailed power ratings
- Fuel Type – Fuel classification (Diesel, Benzina/Petrol, GPL, Metano, Electric)
- Technical Details – Version information, number of doors, ABS and airbag status
- Power Ratings – Multiple power measurements (CV, KW, Fiscal Power)
- VIN Number – Vehicle Identification Number when available
- K-Type Code – European vehicle type approval identifier
Sample Car Response Format
{
"Description": "MINI Mini 2.0 Cooper SD Countryman ALL4 Automatica",
"RegistrationYear": "2017",
"CarMake": {
"CurrentTextValue": "MINI"
},
"CarModel": {
"CurrentTextValue": "Mini Countryman F60"
},
"EngineSize": {
"CurrentTextValue": "2.0"
},
"FuelType": {
"CurrentTextValue": "Diesel"
},
"MakeDescription": {
"CurrentTextValue": "MINI"
},
"ModelDescription": {
"CurrentTextValue": "Mini Countryman F60"
},
"NumberOfDoors": "5",
"Version": "Mini 2.0 Cooper SD Countryman ALL4 Automatica",
"ABS": "",
"AirBag": "",
"Vin": "",
"KType": "",
"PowerCV": "190",
"PowerKW": "140",
"PowerFiscal": "20"
}
Motorcycle Support
Italy also provides dedicated motorcycle data through the CheckItalyMotorbike endpoint:
{
"Description": "Ducati Monster 600 25KW - 34 CV",
"RegistrationYear": "1999",
"CarMake": {
"CurrentTextValue": "Ducati"
},
"CarModel": {
"CurrentTextValue": "Monster 600"
},
"MakeDescription": {
"CurrentTextValue": "Ducati"
},
"ModelDescription": {
"CurrentTextValue": "Monster 600"
},
"Version": "25KW - 34 CV"
}
Insurance Information Support
The Italian system also provides access to current insurance information through the CheckInsuranceStatusItaly endpoint:
<InsuranceDetails>
<Company>IPTIQ EMEA P&C SA</Company>
<Expiry>2025-01-23T00:00:00</Expiry>
<IsInsured>true</IsInsured>
<Region>VE</Region>
</InsuranceDetails>
API Implementation
Endpoint Usage
The Italian Vehicle API uses multiple endpoints:
- Cars:
/CheckItaly– For passenger vehicles and commercial vehicles - Motorcycles:
/CheckItalyMotorbike– For motorcycles and scooters - Insurance:
/CheckInsuranceStatusItaly– For insurance verification
All endpoints require:
- Registration Number – The complete Italian license plate number
- Username – Your API authentication credentials
Basic Implementation Example
// JavaScript example for Italian vehicle lookup
class ItalianVehicleAPI {
constructor(username) {
this.username = username;
this.baseUrl = "https://www.targa.co.it/api/bespokeapi.asmx";
}
async lookupCar(registrationNumber) {
const apiUrl = `${this.baseUrl}/CheckItaly?RegistrationNumber=${registrationNumber}&username=${this.username}`;
try {
const response = await fetch(apiUrl);
const xmlText = await response.text();
// Parse XML response
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlText, "text/xml");
const jsonData = xmlDoc.getElementsByTagName("vehicleJson")[0].textContent;
const vehicleInfo = JSON.parse(jsonData);
return {
make: vehicleInfo.MakeDescription.CurrentTextValue,
model: vehicleInfo.ModelDescription.CurrentTextValue,
year: vehicleInfo.RegistrationYear,
engineSize: vehicleInfo.EngineSize.CurrentTextValue,
fuel: vehicleInfo.FuelType.CurrentTextValue,
powerCV: vehicleInfo.PowerCV,
powerKW: vehicleInfo.PowerKW,
powerFiscal: vehicleInfo.PowerFiscal,
doors: vehicleInfo.NumberOfDoors,
version: vehicleInfo.Version,
vin: vehicleInfo.Vin,
kType: vehicleInfo.KType
};
} catch (error) {
console.error('Italian car lookup failed:', error);
return null;
}
}
async lookupMotorcycle(registrationNumber) {
const apiUrl = `${this.baseUrl}/CheckItalyMotorbike?RegistrationNumber=${registrationNumber}&username=${this.username}`;
try {
const response = await fetch(apiUrl);
const jsonData = await response.json();
return {
make: jsonData.MakeDescription.CurrentTextValue,
model: jsonData.ModelDescription.CurrentTextValue,
year: jsonData.RegistrationYear,
version: jsonData.Version
};
} catch (error) {
console.error('Italian motorcycle lookup failed:', error);
return null;
}
}
async checkInsurance(registrationNumber) {
const apiUrl = `${this.baseUrl}/CheckInsuranceStatusItaly?RegistrationNumber=${registrationNumber}&username=${this.username}`;
try {
const response = await fetch(apiUrl);
const xmlText = await response.text();
// Parse XML response
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlText, "text/xml");
const company = xmlDoc.getElementsByTagName("Company")[0]?.textContent;
const expiry = xmlDoc.getElementsByTagName("Expiry")[0]?.textContent;
const isInsured = xmlDoc.getElementsByTagName("IsInsured")[0]?.textContent === "true";
const region = xmlDoc.getElementsByTagName("Region")[0]?.textContent;
return {
company,
expiry,
isInsured,
region
};
} catch (error) {
console.error('Italian insurance lookup failed:', error);
return null;
}
}
}
// Usage examples
const api = new ItalianVehicleAPI("your_username");
// Car lookup
api.lookupCar("BN071VN").then(data => {
if (data) {
console.log(`Car: ${data.make} ${data.model} (${data.year})`);
console.log(`Engine: ${data.engineSize}L ${data.fuel}`);
console.log(`Power: ${data.powerCV}CV / ${data.powerKW}KW`);
}
});
// Motorcycle lookup
api.lookupMotorcycle("AA123BB").then(data => {
if (data) {
console.log(`Motorcycle: ${data.make} ${data.model} (${data.year})`);
console.log(`Version: ${data.version}`);
}
});
// Insurance check
api.checkInsurance("BN071VN").then(data => {
if (data) {
console.log(`Insurance: ${data.company}`);
console.log(`Expiry: ${data.expiry}`);
console.log(`Status: ${data.isInsured ? 'Insured' : 'Not insured'}`);
}
});
Python Implementation
import requests
import xml.etree.ElementTree as ET
import json
from datetime import datetime
class ItalianVehicleAPI:
def __init__(self, username):
self.username = username
self.base_url = "https://www.targa.co.it/api/bespokeapi.asmx"
def validate_italian_registration(self, registration):
"""Validate Italian registration number format"""
if not registration:
return False, "Registration number is required"
# Remove spaces and convert to uppercase
reg = registration.replace(" ", "").upper()
# Basic Italian format validation
if len(reg) < 6 or len(reg) > 7:
return False, "Invalid registration length"
return True, reg
def lookup_car(self, registration_number):
"""Lookup Italian car with comprehensive error handling"""
is_valid, processed_reg = self.validate_italian_registration(registration_number)
if not is_valid:
return {"error": processed_reg}
try:
url = f"{self.base_url}/CheckItaly"
params = {
'RegistrationNumber': processed_reg,
'username': self.username
}
response = requests.get(url, params=params, timeout=15)
response.raise_for_status()
# Parse XML response
root = ET.fromstring(response.content)
json_element = root.find('.//vehicleJson')
if json_element is None or not json_element.text:
return {"error": "No car data found for this registration number"}
vehicle_data = json.loads(json_element.text)
return {
'success': True,
'type': 'car',
'description': vehicle_data.get('Description'),
'make': vehicle_data.get('MakeDescription', {}).get('CurrentTextValue'),
'model': vehicle_data.get('ModelDescription', {}).get('CurrentTextValue'),
'registration_year': vehicle_data.get('RegistrationYear'),
'engine_size': vehicle_data.get('EngineSize', {}).get('CurrentTextValue'),
'fuel_type': vehicle_data.get('FuelType', {}).get('CurrentTextValue'),
'power_cv': vehicle_data.get('PowerCV'),
'power_kw': vehicle_data.get('PowerKW'),
'power_fiscal': vehicle_data.get('PowerFiscal'),
'doors': vehicle_data.get('NumberOfDoors'),
'version': vehicle_data.get('Version'),
'vin': vehicle_data.get('Vin'),
'k_type': vehicle_data.get('KType'),
'abs': vehicle_data.get('ABS'),
'airbag': vehicle_data.get('AirBag'),
'raw_data': vehicle_data
}
except Exception as e:
return {"error": f"Car lookup failed: {str(e)}"}
def lookup_motorcycle(self, registration_number):
"""Lookup Italian motorcycle"""
is_valid, processed_reg = self.validate_italian_registration(registration_number)
if not is_valid:
return {"error": processed_reg}
try:
url = f"{self.base_url}/CheckItalyMotorbike"
params = {
'RegistrationNumber': processed_reg,
'username': self.username
}
response = requests.get(url, params=params, timeout=15)
response.raise_for_status()
motorcycle_data = response.json()
return {
'success': True,
'type': 'motorcycle',
'description': motorcycle_data.get('Description'),
'make': motorcycle_data.get('MakeDescription', {}).get('CurrentTextValue'),
'model': motorcycle_data.get('ModelDescription', {}).get('CurrentTextValue'),
'registration_year': motorcycle_data.get('RegistrationYear'),
'version': motorcycle_data.get('Version'),
'raw_data': motorcycle_data
}
except Exception as e:
return {"error": f"Motorcycle lookup failed: {str(e)}"}
def check_insurance(self, registration_number):
"""Check Italian vehicle insurance status"""
is_valid, processed_reg = self.validate_italian_registration(registration_number)
if not is_valid:
return {"error": processed_reg}
try:
url = f"{self.base_url}/CheckInsuranceStatusItaly"
params = {
'RegistrationNumber': processed_reg,
'username': self.username
}
response = requests.get(url, params=params, timeout=15)
response.raise_for_status()
# Parse XML response
root = ET.fromstring(response.content)
company = root.find('.//Company')
expiry = root.find('.//Expiry')
is_insured = root.find('.//IsInsured')
region = root.find('.//Region')
return {
'success': True,
'company': company.text if company is not None else None,
'expiry': expiry.text if expiry is not None else None,
'is_insured': is_insured.text == 'true' if is_insured is not None else False,
'region': region.text if region is not None else None
}
except Exception as e:
return {"error": f"Insurance check failed: {str(e)}"}
# Usage examples
api = ItalianVehicleAPI("your_username")
# Car lookup
car_result = api.lookup_car("BN071VN")
if car_result.get('success'):
print(f"Car: {car_result['make']} {car_result['model']}")
print(f"Year: {car_result['registration_year']}")
print(f"Engine: {car_result['engine_size']}L {car_result['fuel_type']}")
print(f"Power: {car_result['power_cv']}CV / {car_result['power_kw']}KW")
print(f"Doors: {car_result['doors']}")
print(f"Version: {car_result['version']}")
# Motorcycle lookup
bike_result = api.lookup_motorcycle("AA123BB")
if bike_result.get('success'):
print(f"Motorcycle: {bike_result['make']} {bike_result['model']}")
print(f"Version: {bike_result['version']}")
# Insurance check
insurance_result = api.check_insurance("BN071VN")
if insurance_result.get('success'):
print(f"Insurance Company: {insurance_result['company']}")
print(f"Expiry: {insurance_result['expiry']}")
print(f"Status: {'Insured' if insurance_result['is_insured'] else 'Not insured'}")
print(f"Region: {insurance_result['region']}")
Italian Vehicle Registration Format
Current Format (1994-Present)
Italian license plates use the format: AA 123 BB
- First two letters: Province of registration
- Three numbers: Sequential numbering
- Last two letters: Progressive alphabetical sequence
Provincial Codes
Italy’s 107 provinces each have specific letter combinations:
Major Cities:
- MI – Milano (Milan)
- RM – Roma (Rome)
- TO – Torino (Turin)
- NA – Napoli (Naples)
- PA – Palermo
- GE – Genova (Genoa)
- BO – Bologna
- FI – Firenze (Florence)
- BA – Bari
- CT – Catania
Northern Regions:
- BG – Bergamo, BS – Brescia, CO – Como, CR – Cremona
- MN – Mantova, PV – Pavia, SO – Sondrio, VA – Varese
Central Regions:
- AN – Ancona, AR – Arezzo, FR – Frosinone, LT – Latina
- PE – Pescara, PG – Perugia, PI – Pisa, SI – Siena
Southern Regions:
- AV – Avellino, BN – Benevento, CE – Caserta, SA – Salerno
- CZ – Catanzaro, RC – Reggio Calabria, AG – Agrigento
Understanding Italian Vehicle Data
Power Ratings Explained
Italian vehicle data includes multiple power measurements:
- PowerCV – Cavalli Vapore (Steam Horsepower) – Traditional Italian power measurement
- PowerKW – Kilowatts – Standard European power measurement
- PowerFiscal – Fiscal horsepower for taxation and insurance purposes
Fuel Type Classifications
- Benzina – Petrol/Gasoline
- Diesel – Diesel fuel
- GPL – Liquefied Petroleum Gas (Autogas)
- Metano – Compressed Natural Gas (CNG)
- Elettrica – Electric vehicle
- Ibrida – Hybrid vehicle
Safety Features
- ABS – Anti-lock Braking System status
- AirBag – Airbag system information
- Additional safety features when available in database
Use Cases for Italian Vehicle API
Insurance Industry
- Premium Calculations – Multiple power ratings for accurate risk assessment
- Claims Processing – Verify vehicle specifications and safety features
- Insurance Verification – Real-time insurance status checking
- Fraud Prevention – Cross-reference vehicle data with insurance records
Automotive Industry
- Dealership Operations – Verify trade-in vehicle specifications
- Parts and Service – K-Type codes for parts compatibility
- Vehicle History – Registration and technical verification
- Import/Export – Compliance verification for international trade
Fleet Management
- Asset Tracking – Comprehensive vehicle identification and specs
- Insurance Management – Monitor insurance status across fleet
- Maintenance Scheduling – Engine specifications for service planning
- Compliance Monitoring – Ensure all fleet vehicles are properly insured
Law Enforcement
- Vehicle Identification – Quick lookups during traffic stops
- Insurance Verification – Instant insurance status checking
- Investigation Support – Vehicle history and ownership verification
- Motorcycle Tracking – Dedicated motorcycle identification system
Mobile Applications
- Insurance Apps – Instant vehicle data and insurance verification
- Service Booking – Technical specifications for maintenance
- Parking Apps – Vehicle verification and permit validation
- Car Sharing – Vehicle identification and specification display
Italian Automotive Market Context
Major Italian Manufacturers
Fiat Chrysler Automobiles (Stellantis):
- Fiat – Italy’s largest automaker, known for compact cars
- Alfa Romeo – Premium sports and luxury vehicles
- Lancia – Luxury and performance vehicles
- Maserati – Luxury sports cars and sedans
- Ferrari – World-renowned supercars and racing vehicles
Motorcycle Manufacturers:
- Ducati – High-performance motorcycles
- Aprilia – Sports and racing motorcycles
- Moto Guzzi – Traditional Italian motorcycles
- Benelli – Classic and modern motorcycle designs
Regional Variations
Italy’s diverse geography creates distinct automotive preferences:
Northern Italy: Higher concentration of luxury vehicles and motorcycles Central Italy: Mix of urban compact cars and touring vehicles Southern Italy: Focus on fuel-efficient and practical vehicles Islands (Sicily, Sardinia): Preference for small, maneuverable vehicles
Error Handling and Best Practices
class RobustItalianVehicleAPI extends ItalianVehicleAPI {
async lookupWithFallback(registrationNumber) {
let result;
// Try car lookup first
result = await this.lookupCar(registrationNumber);
if (result && result.success) {
return result;
}
// If car lookup fails, try motorcycle
result = await this.lookupMotorcycle(registrationNumber);
if (result && result.success) {
return result;
}
return {
error: true,
message: "Vehicle not found in car or motorcycle databases",
registration: registrationNumber
};
}
async getCompleteVehicleInfo(registrationNumber) {
const vehicleInfo = await this.lookupWithFallback(registrationNumber);
if (vehicleInfo.error) {
return vehicleInfo;
}
// Add insurance information if vehicle lookup successful
const insuranceInfo = await this.checkInsurance(registrationNumber);
return {
...vehicleInfo,
insurance: insuranceInfo
};
}
}
Data Privacy and Insurance Verification
GDPR Compliance
Italy follows EU data protection regulations:
- Vehicle technical data is not personal information
- Insurance verification provides business-relevant data only
- Implement appropriate data retention and access controls
- Follow Italian privacy guidelines for automotive data usage
Insurance Verification Benefits
The Italian system’s insurance integration provides unique advantages:
- Real-time insurance status verification
- Insurance company identification
- Coverage expiry date tracking
- Regional insurance information
Getting Started
Account Registration
- Registration – Sign up for Italian vehicle API access
- Verification – Complete business verification process
- Testing – Use sample registration “BN071VN” for development
- Production – Configure endpoints for cars, motorcycles, and insurance
Sample Data for Testing
- Cars: BN071VN (MINI Countryman from documentation)
- Motorcycles: Test with various Italian motorcycle registrations
- Insurance: Verify insurance data integration with sample plates
Integration Planning
- Determine if your application needs car, motorcycle, or both endpoints
- Plan for Italian power rating displays (CV, KW, Fiscal)
- Implement insurance verification workflows
- Design UI for Italian provincial identification
Conclusion
The Italian Vehicle Registration API provides comprehensive access to Italy’s sophisticated vehicle database, offering detailed technical specifications, multiple power ratings, and integrated insurance verification. The system’s support for both cars and motorcycles, combined with real-time insurance status checking, makes it particularly valuable for insurance companies, fleet managers, and automotive businesses operating in the Italian market.
Italy’s rich automotive heritage and diverse vehicle landscape create unique data requirements that the API addresses through detailed power measurements, safety feature tracking, and provincial identification systems. The integration of insurance verification adds significant value for compliance and business applications.
Understanding Italian vehicle classifications, power rating systems, and regional variations enhances the effectiveness of API integration while supporting the diverse needs of Italy’s automotive ecosystem.
Begin accessing Italian vehicle data by registering for API credentials and exploring the comprehensive database covering cars, motorcycles, and insurance information across all Italian provinces.
https://www.targa.co.it/
French Vehicle Registration API: Complete Guide to Vehicle Data Lookup in France
https://www.immatriculationapi.com/
France operates one of Europe’s most sophisticated vehicle registration systems, covering over 38 million registered vehicles across its 101 departments. The French Vehicle Registration API provides developers and businesses with access to comprehensive vehicle specifications, technical data, and registration information for vehicles registered throughout metropolitan France and overseas territories.
Overview of French Vehicle Registration System
France’s vehicle registration system is managed by the Ministry of the Interior through the National Secure Registration System (SIV – Système d’Immatriculation des Véhicules). Since 2009, France has used a standardized license plate format that includes two letters, three numbers, and two letters (AA-123-AA), replacing the older regional system.
The centralized system maintains detailed technical specifications for all registered vehicles, including data from:
- ANTS (Agence Nationale des Titres Sécurisés) – National Agency for Secure Documents
- UTAC-CERAM – Technical services for automotive certification
- SRA (Sécurité et Réparation Automobiles) – Automotive security and repair classifications
French Vehicle API Features
The France endpoint provides comprehensive vehicle information including technical specifications and security classifications:
Available Data
When querying French vehicle registrations, you can retrieve:
- Make and Model – Complete manufacturer and vehicle model identification
- Registration Year – Year when the vehicle was first registered in France
- Engine Specifications – Engine size, fuel type, and power ratings
- Technical Details – Transmission type, body style, and variant information
- Registration Date – Exact date of first vehicle registration
- SRA Classifications – Security and theft risk classifications
- CNIT Code – French National Vehicle Identification Code
- K-Type ID – European vehicle type approval identifier
- Environmental Data – CO2 emissions and cylinder count
Sample Response Format
{
"Description": "RENAULT SCÉNIC III",
"RegistrationYear": "2016",
"CarMake": {
"CurrentTextValue": "RENAULT"
},
"CarModel": {
"CurrentTextValue": "SCÉNIC III"
},
"EngineSize": {
"CurrentTextValue": "5"
},
"FuelType": {
"CurrentTextValue": "DIESEL"
},
"MakeDescription": {
"CurrentTextValue": "RENAULT"
},
"ModelDescription": {
"CurrentTextValue": "SCÉNIC III"
},
"BodyStyle": {
"CurrentTextValue": "MONOSPACE COMPACT"
},
"RegistrationDate": "2016-06-24",
"ExtendedData": {
"anneeSortie": "2016",
"boiteDeVitesse": "",
"carburantVersion": "D",
"libVersion": "1.5 dCi 1461cm3 110cv",
"libelleModele": "SCÉNIC III",
"marque": "RE",
"puissance": "5",
"nbPlace": "5",
"datePremiereMiseCirculation": "24062016",
"numSerieMoteur": "VF1JZ890H55864144",
"puissanceDyn": "110",
"KtypeId": "5853",
"EngineCC": "1461",
"Co2": "105",
"Cylinders": "4",
"CNIT": "M10RENVP472E768"
}
}
API Implementation
Endpoint Usage
The French Vehicle API uses the /CheckFrance endpoint and requires two parameters:
- Registration Number – The complete French license plate number
- Username – Your API authentication credentials
Basic Implementation Example
// JavaScript example for French vehicle lookup
async function lookupFrenchVehicle(registrationNumber, username) {
const apiUrl = `https://www.immatriculationapi.com/api/reg.asmx/CheckFrance?RegistrationNumber=${registrationNumber}&username=${username}`;
try {
const response = await fetch(apiUrl);
const xmlText = await response.text();
// Parse XML response
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlText, "text/xml");
const jsonData = xmlDoc.getElementsByTagName("vehicleJson")[0].textContent;
const vehicleInfo = JSON.parse(jsonData);
return {
make: vehicleInfo.MakeDescription.CurrentTextValue,
model: vehicleInfo.ModelDescription.CurrentTextValue,
year: vehicleInfo.RegistrationYear,
engineSize: vehicleInfo.ExtendedData.EngineCC,
power: vehicleInfo.ExtendedData.puissanceDyn,
fuel: vehicleInfo.FuelType.CurrentTextValue,
bodyStyle: vehicleInfo.BodyStyle.CurrentTextValue,
registrationDate: vehicleInfo.RegistrationDate,
co2: vehicleInfo.ExtendedData.Co2,
cylinders: vehicleInfo.ExtendedData.Cylinders,
vin: vehicleInfo.ExtendedData.numSerieMoteur,
cnit: vehicleInfo.ExtendedData.CNIT
};
} catch (error) {
console.error('French vehicle lookup failed:', error);
return null;
}
}
// Usage example
lookupFrenchVehicle("EG258MA", "your_username")
.then(data => {
if (data) {
console.log(`Vehicle: ${data.make} ${data.model} (${data.year})`);
console.log(`Engine: ${data.engineSize}cc, ${data.power}cv`);
console.log(`Fuel: ${data.fuel}`);
console.log(`CO2: ${data.co2}g/km`);
console.log(`Registration: ${data.registrationDate}`);
}
});
Python Implementation
import requests
import xml.etree.ElementTree as ET
import json
from datetime import datetime
class FrenchVehicleAPI:
def __init__(self, username):
self.username = username
self.base_url = "https://www.immatriculationapi.com/api/reg.asmx/CheckFrance"
def validate_french_registration(self, registration):
"""Validate French registration number format"""
if not registration:
return False, "Registration number is required"
# Remove spaces and convert to uppercase
reg = registration.replace(" ", "").replace("-", "").upper()
# Modern French format: 2 letters + 3 numbers + 2 letters
# Old format validation could be added for historical plates
if len(reg) < 6 or len(reg) > 9:
return False, "Invalid registration length"
return True, reg
def lookup(self, registration_number):
"""Lookup French vehicle with comprehensive error handling"""
# Validate registration format
is_valid, processed_reg = self.validate_french_registration(registration_number)
if not is_valid:
return {"error": processed_reg}
try:
params = {
'RegistrationNumber': processed_reg,
'username': self.username
}
response = requests.get(self.base_url, params=params, timeout=15)
response.raise_for_status()
# Parse XML response
root = ET.fromstring(response.content)
json_element = root.find('.//vehicleJson')
if json_element is None or not json_element.text:
return {"error": "No vehicle data found for this registration number"}
vehicle_data = json.loads(json_element.text)
extended_data = vehicle_data.get('ExtendedData', {})
# Process and structure the response
return {
'success': True,
'description': vehicle_data.get('Description'),
'make': vehicle_data.get('MakeDescription', {}).get('CurrentTextValue'),
'model': vehicle_data.get('ModelDescription', {}).get('CurrentTextValue'),
'registration_year': vehicle_data.get('RegistrationYear'),
'body_style': vehicle_data.get('BodyStyle', {}).get('CurrentTextValue'),
'fuel_type': vehicle_data.get('FuelType', {}).get('CurrentTextValue'),
'registration_date': vehicle_data.get('RegistrationDate'),
'engine_cc': extended_data.get('EngineCC'),
'power_cv': extended_data.get('puissanceDyn'),
'co2_emissions': extended_data.get('Co2'),
'cylinders': extended_data.get('Cylinders'),
'vin': extended_data.get('numSerieMoteur'),
'cnit': extended_data.get('CNIT'),
'ktype_id': extended_data.get('KtypeId'),
'seats': extended_data.get('nbPlace'),
'make_code': extended_data.get('marque'),
'fuel_version': extended_data.get('carburantVersion'),
'version_details': extended_data.get('libVersion'),
'manufacture_year': extended_data.get('anneeSortie'),
'first_registration': extended_data.get('datePremiereMiseCirculation'),
'raw_data': vehicle_data
}
except requests.Timeout:
return {"error": "Request timed out - please try again"}
except requests.RequestException as e:
return {"error": f"Network error: {str(e)}"}
except ET.ParseError:
return {"error": "Invalid response format from API"}
except json.JSONDecodeError:
return {"error": "Could not parse vehicle data"}
except Exception as e:
return {"error": f"Unexpected error: {str(e)}"}
# Usage example
api = FrenchVehicleAPI("your_username")
result = api.lookup("EG258MA")
if result.get('success'):
print(f"Vehicle: {result['make']} {result['model']}")
print(f"Year: {result['registration_year']}")
print(f"Engine: {result['engine_cc']}cc, {result['power_cv']}cv")
print(f"Fuel: {result['fuel_type']} (Code: {result['fuel_version']})")
print(f"CO2 Emissions: {result['co2_emissions']}g/km")
print(f"Body Style: {result['body_style']}")
print(f"VIN: {result['vin']}")
print(f"CNIT: {result['cnit']}")
else:
print(f"Error: {result['error']}")
French Registration Number Formats
Modern Format (2009-Present)
The current French registration system uses the format: XX-123-XX
- First two letters: Random sequence (not location-based)
- Three numbers: Sequential from 001 to 999
- Last two letters: Department identifier or random
Historical Formats (1950-2009)
Older French vehicles may have regional formats:
- 123 XX 75 – Numbers, letters, department code
- Regional variations with different structures
Special Plates
- Diplomatic vehicles – Special CD (Corps Diplomatique) plates
- Temporary plates – TT format for transit
- Military vehicles – Special military identification
Understanding French Vehicle Data
Extended Data Fields Explained
The French API provides rich extended data with specific French terminology:
Technical Specifications:
anneeSortie– Year of first manufactureboiteDeVitesse– Transmission typecarburantVersion– Fuel type code (D=Diesel, E=Petrol, etc.)puissance– Administrative power (chevaux fiscaux)puissanceDyn– Dynamic power (chevaux vapeur/CV)EngineCC– Engine displacement in cubic centimetersCylinders– Number of cylindersCo2– CO2 emissions in g/km
Identification Codes:
CNIT– Code National d’Identification du Type (National Type Identification Code)KtypeId– European K-Type identification numbermarque– Manufacturer code (RE=Renault, PE=Peugeot, etc.)numSerieMoteur– VIN (Vehicle Identification Number)
Registration Information:
datePremiereMiseCirculation– Date of first registration in format DDMMYYYYnbPlace– Number of seatslibVersion– Detailed version description with engine specs
Fuel Type Classifications
- ESSENCE – Petrol/Gasoline
- DIESEL – Diesel fuel
- ELECTRIQUE – Electric vehicle
- HYBRIDE – Hybrid vehicle
- GPL – Liquefied Petroleum Gas
- GNV – Compressed Natural Gas
French Motorcycle Support
For motorcycles registered in France, use the dedicated motorcycle endpoint: https://www.immatriculationapi.com/api/bespokeapi.asmx?op=CheckMotorBikeFrance
This returns motorcycle-specific data including:
- Engine specifications optimized for motorcycles
- Motorcycle-specific body classifications
- Power ratings appropriate for two-wheeled vehicles
Use Cases for French Vehicle API
Insurance Industry
- Premium Calculations – CO2 emissions and power ratings for environmental taxes
- Claims Processing – VIN verification and technical specifications
- Fraud Prevention – Cross-reference CNIT codes and registration dates
- Fleet Insurance – Bulk vehicle verification for commercial policies
Automotive Industry
- Dealership Operations – Verify vehicle history and specifications
- Parts and Service – CNIT and K-Type codes for parts compatibility
- Import/Export – Technical compliance verification
- Vehicle Valuations – Detailed specifications for pricing models
Fleet Management
- Environmental Compliance – CO2 emissions tracking for corporate reporting
- Maintenance Scheduling – Engine specifications and service requirements
- Fuel Management – Fuel type verification for fleet optimization
- Asset Tracking – Comprehensive vehicle identification
Government and Regulatory
- Environmental Monitoring – Emissions data for pollution control
- Tax Administration – Vehicle specifications for taxation purposes
- Import Control – Technical verification for customs procedures
- Traffic Management – Vehicle classification for access restrictions
Mobile Applications
- Parking Apps – Vehicle identification and permit validation
- Insurance Apps – Instant vehicle data for quote generation
- Service Booking – Technical specs for maintenance appointments
- Car Sharing – Vehicle verification and specification display
French Automotive Market Context
Major French Manufacturers
France is home to several global automotive manufacturers:
Groupe PSA (Stellantis):
- Peugeot – Founded 1810, known for innovative design and diesel technology
- Citroën – Renowned for comfort and hydraulic suspension systems
- DS Automobiles – Premium brand focusing on luxury and French craftsmanship
Renault Group:
- Renault – Major European manufacturer with strong EV presence
- Alpine – Sports car manufacturer
- Dacia – Value brand with simple, reliable vehicles
Specialized Manufacturers:
- Bugatti – Ultra-luxury hypercars
- Venturi – Electric vehicle specialist
French Vehicle Classification System
Administrative Power (Chevaux Fiscaux): France uses a unique administrative power system for taxation:
- Calculated based on CO2 emissions and engine power
- Used for registration taxes and annual road tax
- Ranges typically from 3CV to 20CV+ for standard vehicles
Body Style Classifications:
- BERLINE – Sedan
- BREAK – Station wagon
- MONOSPACE – MPV/Minivan
- COUPÉ – Coupe
- CABRIOLET – Convertible
- COMBISPACE – Compact MPV
Error Handling and Best Practices
class FrenchVehicleLookup {
constructor(username) {
this.username = username;
this.apiUrl = "https://www.immatriculationapi.com/api/reg.asmx/CheckFrance";
}
async lookupWithRetry(registration, maxRetries = 3) {
let lastError;
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const result = await this.lookup(registration);
if (result && !result.error) {
return result;
}
lastError = result?.error || "Unknown error";
// Wait before retry (exponential backoff)
if (attempt < maxRetries) {
await new Promise(resolve => setTimeout(resolve, 1000 * attempt));
}
} catch (error) {
lastError = error.message;
if (attempt < maxRetries) {
await new Promise(resolve => setTimeout(resolve, 1000 * attempt));
}
}
}
return {
error: true,
message: `Failed after ${maxRetries} attempts: ${lastError}`,
registration: registration
};
}
async lookup(registration) {
// Validate and clean registration
const cleanReg = this.cleanRegistration(registration);
if (!cleanReg) {
throw new Error("Invalid registration format");
}
const response = await fetch(`${this.apiUrl}?RegistrationNumber=${cleanReg}&username=${this.username}`);
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
// Process response...
return this.parseResponse(await response.text());
}
cleanRegistration(registration) {
if (!registration) return null;
// Remove spaces, hyphens, and convert to uppercase
const cleaned = registration.replace(/[\s\-]/g, '').toUpperCase();
// Basic validation
if (cleaned.length < 6 || cleaned.length > 9) {
return null;
}
return cleaned;
}
}
Data Privacy and Compliance
GDPR Compliance
As an EU member state, France follows strict data protection regulations:
- Vehicle technical data is not considered personal information
- VIN numbers are vehicle identifiers, not personal data
- Implement appropriate data retention policies
- Ensure proper access controls and audit trails
Usage Guidelines
- API intended for legitimate business and technical purposes
- Respect rate limits to maintain service quality
- Implement proper caching to reduce unnecessary requests
- Follow French data protection guidelines for automotive data
Getting Started
Account Registration
- Sign Up – Register for API access through the French vehicle API portal
- Verification – Complete email and business verification process
- Testing – Use sample registration “EG258MA” for development
- Production – Purchase credits and configure production environment
Sample Data for Testing
- EG258MA – Renault Scénic III (sample from documentation)
- Test various registration formats to understand response variations
- Verify error handling with invalid registrations
Integration Planning
- Plan for French-specific data fields in your application
- Consider CO2 emissions display for environmental compliance
- Implement proper error handling for network timeouts
- Design UI to accommodate French technical terminology
Conclusion
The French Vehicle Registration API provides comprehensive access to France’s sophisticated vehicle database, offering detailed technical specifications, environmental data, and regulatory compliance information. The system’s integration of SRA classifications, CNIT codes, and detailed emissions data makes it particularly valuable for insurance, fleet management, and environmental compliance applications.
France’s centralized registration system ensures consistent data quality while the API’s rich extended data provides all necessary information for professional automotive applications. Understanding French vehicle classifications, administrative power calculations, and technical specifications enhances the effectiveness of API integration.
The system’s compliance with EU regulations and focus on environmental data positions it well for modern automotive applications requiring detailed vehicle specifications and emissions information.
Begin integrating French vehicle data by registering for API access and exploring the comprehensive database of French vehicle registrations across all departments and territories.
https://www.immatriculationapi.com/
Romanian Vehicle Registration #API: Complete Guide to Vehicle Data Lookup in #Romania

TLDR: https://www.inmatriculareapi.ro/
Romania, as a member of the European Union since 2007, maintains a modern vehicle registration system that provides comprehensive vehicle information through digital databases. The Romanian Vehicle Registration API offers developers and businesses access to detailed vehicle specifications, ownership documents, and technical data for vehicles registered throughout Romania’s 42 counties.
Overview of Romanian Vehicle Registration System
Romania’s vehicle registration system is centralized under the Romanian National Agency for Fiscal Administration (ANAF) and the Romanian Automobile Registry (RAR). The system covers all Romanian counties from Bucharest (București) to the smallest rural regions, providing standardized vehicle identification and technical specifications.
The Romanian license plate format typically consists of:
- County Code – 1-2 letters identifying the county of registration
- Numbers – Sequential numerical identifier
- Letters – Additional letter combinations
Romanian Vehicle API Features
The Romania endpoint provides comprehensive vehicle information including:
Available Data
When querying Romanian vehicle registrations, you can retrieve:
- Make and Model – Complete manufacturer and vehicle model information
- Registration Year – Year when the vehicle was first registered
- Engine Specifications – Engine size in cubic centimeters and power in kilowatts
- Fuel Type – Fuel classification (benzina/petrol, motorina/diesel, GPL/LPG, electric)
- VIN Number – Complete 17-character Vehicle Identification Number
- CIV Document – Vehicle Identity Document (Cartea de Identitate a Vehiculului)
- Vehicle Type – Classification (Autoturism/passenger car, Autoutilitară/utility vehicle, etc.)
- Technical Specifications – Weight, number of seats, variant information
- Registration Region – County or city where the vehicle is registered
- Representative Image – Visual identification of the vehicle type
Sample Response Format
{
"Description": "Renault Clio",
"RegistrationYear": "1999",
"CarMake": {
"CurrentTextValue": "Renault"
},
"CarModel": {
"CurrentTextValue": "Clio"
},
"MakeDescription": {
"CurrentTextValue": "Renault"
},
"ModelDescription": {
"CurrentTextValue": "Clio"
},
"Type": "Autoturism",
"VIN": "VF1CB0A0F20507251",
"CIV": "J350228",
"Variant": "",
"Weight": "955",
"FuelType": "benzina",
"NumberOfSeats": "5",
"Power": "43",
"EngineSize": "1149",
"Region": "București",
"ImageUrl": "http://www.inmatriculareapi.ro/image.aspx/@UmVuYXVsdCBDbGlv"
}
API Implementation
Endpoint Usage
The Romanian Vehicle API uses the /CheckRomania endpoint and requires two parameters:
- Registration Number – The complete Romanian license plate number
- Username – Your API authentication credentials
Basic Implementation Example
// JavaScript example for Romanian vehicle lookup
async function lookupRomanianVehicle(registrationNumber, username) {
const apiUrl = `https://www.inmatriculareapi.ro/api/reg.asmx/CheckRomania?RegistrationNumber=${registrationNumber}&username=${username}`;
try {
const response = await fetch(apiUrl);
const xmlText = await response.text();
// Parse XML response
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlText, "text/xml");
const jsonData = xmlDoc.getElementsByTagName("vehicleJson")[0].textContent;
const vehicleInfo = JSON.parse(jsonData);
return {
make: vehicleInfo.MakeDescription.CurrentTextValue,
model: vehicleInfo.ModelDescription.CurrentTextValue,
year: vehicleInfo.RegistrationYear,
engineSize: vehicleInfo.EngineSize,
power: vehicleInfo.Power,
fuel: vehicleInfo.FuelType,
vin: vehicleInfo.VIN,
civ: vehicleInfo.CIV,
region: vehicleInfo.Region,
weight: vehicleInfo.Weight,
seats: vehicleInfo.NumberOfSeats,
type: vehicleInfo.Type
};
} catch (error) {
console.error('Romanian vehicle lookup failed:', error);
return null;
}
}
// Usage example
lookupRomanianVehicle("B123ABC", "your_username")
.then(data => {
if (data) {
console.log(`Vehicle: ${data.make} ${data.model} (${data.year})`);
console.log(`Engine: ${data.engineSize}cc, ${data.power}kW`);
console.log(`Fuel: ${data.fuel}`);
console.log(`CIV: ${data.civ}`);
console.log(`Region: ${data.region}`);
}
});
Python Implementation
import requests
import xml.etree.ElementTree as ET
import json
class RomanianVehicleAPI:
def __init__(self, username):
self.username = username
self.base_url = "https://www.inmatriculareapi.ro/api/reg.asmx/CheckRomania"
def validate_registration_format(self, registration):
"""Validate Romanian registration number format"""
if not registration or len(registration.strip()) < 6:
return False, "Registration number too short"
# Remove spaces and convert to uppercase
reg = registration.replace(" ", "").upper()
# Basic format validation (letters + numbers + letters)
if not any(c.isalpha() for c in reg) or not any(c.isdigit() for c in reg):
return False, "Invalid format - must contain both letters and numbers"
return True, reg
def lookup(self, registration_number):
"""Lookup Romanian vehicle with comprehensive error handling"""
# Validate registration format
is_valid, processed_reg = self.validate_registration_format(registration_number)
if not is_valid:
return {"error": processed_reg}
try:
params = {
'RegistrationNumber': processed_reg,
'username': self.username
}
response = requests.get(self.base_url, params=params, timeout=15)
response.raise_for_status()
# Parse XML response
root = ET.fromstring(response.content)
json_element = root.find('.//vehicleJson')
if json_element is None or not json_element.text:
return {"error": "No vehicle data found for this registration number"}
vehicle_data = json.loads(json_element.text)
# Process and structure the response
return {
'success': True,
'description': vehicle_data.get('Description'),
'make': vehicle_data.get('MakeDescription', {}).get('CurrentTextValue'),
'model': vehicle_data.get('ModelDescription', {}).get('CurrentTextValue'),
'registration_year': vehicle_data.get('RegistrationYear'),
'vehicle_type': vehicle_data.get('Type'),
'vin': vehicle_data.get('VIN'),
'civ': vehicle_data.get('CIV'),
'engine_size': vehicle_data.get('EngineSize'),
'power_kw': vehicle_data.get('Power'),
'fuel_type': vehicle_data.get('FuelType'),
'weight_kg': vehicle_data.get('Weight'),
'number_of_seats': vehicle_data.get('NumberOfSeats'),
'region': vehicle_data.get('Region'),
'variant': vehicle_data.get('Variant'),
'image_url': vehicle_data.get('ImageUrl'),
'raw_data': vehicle_data
}
except requests.Timeout:
return {"error": "Request timed out - please try again"}
except requests.RequestException as e:
return {"error": f"Network error: {str(e)}"}
except ET.ParseError:
return {"error": "Invalid response format from API"}
except json.JSONDecodeError:
return {"error": "Could not parse vehicle data"}
except Exception as e:
return {"error": f"Unexpected error: {str(e)}"}
# Usage example
api = RomanianVehicleAPI("your_username")
result = api.lookup("B123ABC")
if result.get('success'):
print(f"Vehicle: {result['make']} {result['model']}")
print(f"Year: {result['registration_year']}")
print(f"Engine: {result['engine_size']}cc, {result['power_kw']}kW")
print(f"Fuel: {result['fuel_type']}")
print(f"VIN: {result['vin']}")
print(f"CIV: {result['civ']}")
print(f"Region: {result['region']}")
print(f"Weight: {result['weight_kg']}kg")
print(f"Seats: {result['number_of_seats']}")
else:
print(f"Error: {result['error']}")
Romanian Vehicle Registration Format
County Codes
Romanian license plates begin with county codes that identify the registration location:
Major Cities and Counties:
- B – București (Bucharest) – Capital city
- AB – Alba – Alba Iulia
- AG – Argeș – Pitești
- AR – Arad – Arad
- BC – Bacău – Bacău
- BH – Bihor – Oradea
- BN – Bistrița-Năsăud – Bistrița
- BR – Brăila – Brăila
- BT – Botoșani – Botoșani
- BV – Brașov – Brașov
- BZ – Buzău – Buzău
- CJ – Cluj – Cluj-Napoca
- CL – Călărași – Călărași
- CS – Caraș-Severin – Reșița
- CT – Constanța – Constanța
- CV – Covasna – Sfântu Gheorghe
- DB – Dâmbovița – Târgoviște
- DJ – Dolj – Craiova
- GJ – Gorj – Târgu Jiu
- GL – Galați – Galați
- GR – Giurgiu – Giurgiu
- HD – Hunedoara – Deva
- HR – Harghita – Miercurea Ciuc
- IF – Ilfov – Buftea
- IL – Ialomița – Slobozia
- IS – Iași – Iași
- MH – Mehedinți – Drobeta-Turnu Severin
- MM – Maramureș – Baia Mare
- MS – Mureș – Târgu Mureș
- NT – Neamț – Piatra Neamț
- OT – Olt – Slatina
- PH – Prahova – Ploiești
- SB – Sibiu – Sibiu
- SJ – Sălaj – Zalău
- SM – Satu Mare – Satu Mare
- SV – Suceava – Suceava
- TL – Tulcea – Tulcea
- TM – Timiș – Timișoara
- TR – Teleorman – Alexandria
- VL – Vâlcea – Râmnicu Vâlcea
- VN – Vrancea – Focșani
- VS – Vaslui – Vaslui
Understanding Romanian Vehicle Data
Vehicle Types (Tip Vehicul)
- Autoturism – Passenger car
- Autoutilitară – Utility vehicle/van
- Autocamion – Truck
- Autobus/Autobuz – Bus
- Motocicletă – Motorcycle
- Moped – Moped
- Remorcă – Trailer
Fuel Types (Tip Combustibil)
- Benzină – Petrol/Gasoline
- Motorină – Diesel
- GPL – Liquefied Petroleum Gas
- Electric – Electric vehicle
- Hibrid – Hybrid (petrol/electric or diesel/electric)
CIV Document
The CIV (Cartea de Identitate a Vehiculului) is Romania’s vehicle identity document, similar to a vehicle registration certificate. It contains:
- Vehicle technical specifications
- Ownership history
- Registration details
- Environmental compliance information
Use Cases for Romanian Vehicle API
Insurance Industry
- Policy Underwriting – Access technical specifications for risk assessment
- Claims Processing – Verify vehicle details during accident claims
- Fraud Prevention – Cross-reference VIN and CIV data for authenticity
- Premium Calculation – Engine power and weight for insurance categories
Automotive Dealers
- Vehicle History – Verify registration and technical details
- Import/Export – VIN verification for cross-border transactions
- Inventory Management – Automated vehicle data population
- Trade Valuations – Technical specifications for pricing
Fleet Management
- Asset Tracking – Maintain detailed vehicle records
- Compliance Monitoring – Ensure registration validity across fleet
- Maintenance Planning – Engine specifications for service schedules
- Environmental Reporting – Fuel type and emissions data
Government and Law Enforcement
- Vehicle Identification – Quick lookups during traffic enforcement
- Registration Verification – Confirm vehicle legitimacy
- Import Control – VIN verification for customs procedures
- Investigation Support – Vehicle tracking and identification
Mobile Applications
- Car Shopping Apps – Instant vehicle specification lookup
- Insurance Apps – Quick vehicle verification for quotes
- Service Apps – Technical specifications for maintenance booking
- Parking Apps – Vehicle identification and validation
Error Handling Best Practices
function handleRomanianVehicleLookup(registration, username) {
// Validate input format
if (!registration || registration.length < 6) {
return Promise.reject(new Error("Invalid registration number format"));
}
// Clean registration number
const cleanReg = registration.replace(/\s+/g, '').toUpperCase();
return lookupRomanianVehicle(cleanReg, username)
.then(data => {
if (!data) {
throw new Error("No vehicle data returned");
}
// Validate essential fields
if (!data.make || !data.model) {
throw new Error("Incomplete vehicle data received");
}
return data;
})
.catch(error => {
console.error('Romanian vehicle lookup error:', error);
// Return structured error response
return {
error: true,
message: error.message,
registration: registration,
timestamp: new Date().toISOString()
};
});
}
Data Privacy and Compliance
GDPR Compliance
As an EU member state, Romania follows strict data protection regulations:
- The API returns technical vehicle specifications, not personal owner data
- VIN and CIV numbers are vehicle identifiers, not personal information
- Consider data retention policies when caching API responses
- Implement proper access controls for vehicle data systems
Usage Limitations
- API is intended for legitimate business purposes
- Vehicle data should not be used for unauthorized tracking
- Respect rate limits and terms of service
- Implement proper error handling to avoid excessive requests
Getting Started
Account Setup
- Register for API access at the Romanian vehicle API portal
- Verify your email address and business credentials
- Test with sample registration numbers like “B123ABC”
- Purchase credits for production usage
Integration Testing
Test with various Romanian registration formats:
- Bucharest format: B123ABC, B456DEF
- County formats: CJ12ABC, TM34DEF, CT56GHI
- Different vehicle types to understand data variations
Production Considerations
- Implement robust error handling for network issues
- Cache responses appropriately to reduce API calls
- Monitor API usage and credit consumption
- Plan for data updates and system maintenance windows
Conclusion
The Romanian Vehicle Registration API provides comprehensive access to vehicle data across all Romanian counties and cities. With detailed technical specifications, official document references (CIV), and standardized data formats, the API supports diverse applications from insurance processing to fleet management.
Romania’s centralized registration system ensures consistent data quality while the API’s detailed response format provides all necessary vehicle information for professional applications. Understanding Romanian vehicle types, fuel classifications, and regional codes enhances the effectiveness of API integration.
The system’s compliance with EU data protection standards and focus on technical specifications rather than personal data makes it suitable for business applications requiring vehicle verification and specification lookup.
Start integrating Romanian vehicle data today by registering for API access and exploring the comprehensive database of Romanian vehicle registrations.
Please visit https://www.inmatriculareapi.ro/ to get started.
NEVDIS #API Australia #NEVDIS – Australian Vehicle Registration API: Complete State-by-State Guide to Vehicle Data Lookup

Quicklinks:
Australian API: https://www.carregistrationapi.com.au/
Nevdis info: https://austroads.gov.au/drivers-and-vehicles/nevdis
Australian Vehicle Registration API: Complete State-by-State Guide to Vehicle Data Lookup
Australia’s vast continent is divided into eight distinct states and territories, each maintaining its own vehicle registration system and database. The Australian Vehicle Registration API provides comprehensive access to vehicle information across all Australian jurisdictions, from the bustling cities of Sydney and Melbourne to the remote regions of the Northern Territory and Western Australia.
Overview of Australian Vehicle Registration System
Unlike centralized systems found in some countries, Australia operates a federated vehicle registration model where each state and territory maintains independent databases. This decentralized approach reflects Australia’s federal structure and means that vehicle lookups require both the registration number and the state of registration.
The Australian Vehicle Registration API supports all eight Australian jurisdictions:
- New South Wales (NSW)
- Victoria (VIC)
- Queensland (QLD)
- South Australia (SA)
- Australian Capital Territory (ACT)
- Northern Territory (NT)
- Western Australia (WA)
- Tasmania (TAS)
API Implementation
Endpoint Usage
The Australian Vehicle API uses the /CheckAustralia endpoint and requires three parameters:
- Registration Number – The vehicle’s registration plate number
- State – Two or three letter state/territory abbreviation
- Username – Your API authentication credentials
Basic Implementation Example
// JavaScript example for Australian vehicle lookup
async function lookupAustralianVehicle(registration, state, username) {
const apiUrl = `https://www.regcheck.org.uk/api/reg.asmx/CheckAustralia?RegistrationNumber=${registration}&State=${state}&username=${username}`;
try {
const response = await fetch(apiUrl);
const xmlText = await response.text();
// Parse XML response
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlText, "text/xml");
const jsonData = xmlDoc.getElementsByTagName("vehicleJson")[0].textContent;
const vehicleInfo = JSON.parse(jsonData);
return vehicleInfo;
} catch (error) {
console.error('Australian vehicle lookup failed:', error);
return null;
}
}
// Usage example
lookupAustralianVehicle("ABC123", "NSW", "your_username")
.then(data => {
if (data) {
console.log(`Vehicle: ${data.Description}`);
console.log(`State: ${data.State}`);
}
});
State-by-State Data Coverage
Each Australian state provides different levels of vehicle information based on their registration systems and data sharing policies.
New South Wales (NSW)
New South Wales, Australia’s most populous state, provides comprehensive vehicle data including:
Available Data:
- Vehicle description (make, model, body style)
- Make and model details
- Registration year
- Vehicle color
- Body style classification
- NEVDIS code (National Exchange of Vehicle and Driver Information System)
- Engine size specifications
- NVIC code (National Vehicle Identification Code)
- Transmission type
Sample Response (NSW):
{
"Description": "FORD Fairmont 4D Sedan",
"RegistrationYear": "1994",
"CarMake": {
"CurrentTextValue": "FORD"
},
"MakeDescription": {
"CurrentTextValue": "FORD"
},
"ModelDescription": {
"CurrentTextValue": "Fairmont 4D Sedan"
},
"BodyStyle": {
"CurrentTextValue": "4-Speed Auto"
},
"VechileIdentificationNumber": "FORFMT---7402E01994A",
"Engine": "4.0 litre, 6 cyl, EF",
"State": "NSW",
"extended": {
"nvic": "OP5",
"driveType": "4D SEDAN",
"family": "FAIRMONT",
"model": "Fairmont 4D Sedan",
"make": "FORD",
"fuelType": "",
"capacityValue": "4.0",
"series": "EF",
"engineDescription": "4.0 litre, 6 cyl, EF",
"cylinders": "6",
"year": "1994",
"capacityUnit": "L",
"transmissionType": "4-Speed Auto"
}
}
NSW Motorcycle Support: NSW also supports motorcycle lookups with slightly different data structure:
{
"Description": "YAMAHA XVS650 MOTORCYCLE V",
"RegistrationYear": "2014",
"CarMake": {
"CurrentTextValue": "YAMAHA"
},
"MakeDescription": {
"CurrentTextValue": "YAMAHA"
},
"ModelDescription": {
"CurrentTextValue": "XVS650"
},
"VehicleType": "Motorcycle",
"State": "NSW"
}
Victoria (VIC)
Victoria provides essential vehicle identification data with focus on ownership verification:
Available Data:
- Vehicle description
- Registration year
- Make identification
- Body style
- Vehicle color
- Vehicle Identification Number (VIN)
- Engine number
- Registration expiry date
- Stolen vehicle indicator
- Goods carrying vehicle classification
Sample Response (VIC):
{
"Description": "2012 WHITE HYUNDAI WAGON",
"RegistrationYear": "2012",
"CarMake": {
"CurrentTextValue": "HYUNDAI"
},
"MakeDescription": {
"CurrentTextValue": "HYUNDAI"
},
"Colour": "WHITE",
"VechileIdentificationNumber": "KMHJU81CSCU459552",
"Engine": "G4KECU661333",
"Stolen": "No",
"GoodsCarryingVehicle": "No",
"RegistrationSerialNumber": "7112510",
"ComplianceDate": "02/2012",
"Expiry": "20/02/2018",
"State": "VIC"
}
Queensland (QLD)
Queensland focuses on basic vehicle identification with insurance information:
Available Data:
- Vehicle description
- Make and model
- Registration year
- Vehicle Identification Number (VIN)
- Insurance expiry date
- Vehicle purpose classification
Sample Response (QLD):
{
"Description": "2011 HYUNDAI ACCENT HATCHBACK",
"CarMake": {
"CurrentTextValue": "HYUNDAI"
},
"CarModel": {
"CurrentTextValue": "ACCENT HATCHBACK"
},
"RegistrationYear": "2011",
"VechileIdentificationNumber": "KMHCT51DLCU021130",
"InsuranceExpiry": "01/11/2019",
"Purpose": "PRIVATE",
"State": "QLD"
}
South Australia (SA)
South Australia provides comprehensive data including insurance company information:
Available Data:
- Complete vehicle description
- Make and model details
- Body style classification
- Vehicle color
- Registration year
- Registration expiry date
- Insurance company details
- Vehicle Identification Number (VIN)
Sample Response (SA):
{
"Description": "WHITE MITSUBISHI STATION WAGON",
"CarMake": {
"CurrentTextValue": "MITSUBISHI"
},
"CarModel": {
"CurrentTextValue": "Pajero"
},
"RegistrationYear": "2015",
"BodyStyle": {
"CurrentTextValue": "STATION WAGON"
},
"Colour": "WHITE",
"Expiry": "05/09/2022",
"VechileIdentificationNumber": "JMFLYV98WGJ003504",
"InsuranceCompany": "AAMI",
"State": "SA"
}
Australian Capital Territory (ACT)
The ACT system provides detailed vehicle and insurance information:
Available Data:
- Vehicle description with year
- Make and model identification
- Registration year
- Vehicle color
- Registration expiry date
- Engine number
- Stolen vehicle indicator
- Net weight specifications
- Insurance company details
Sample Response (ACT):
{
"Description": "Black MERCEDES 204 C CLASS (2010)",
"CarMake": {
"CurrentTextValue": "MERCEDES"
},
"CarModel": {
"CurrentTextValue": "MERCEDES"
},
"RegistrationYear": 2010,
"Colour": "Black",
"Expiry": "27/05/2017",
"EngineNumber": "2420",
"Stolen": "N",
"NetWeight": "1436",
"InsuranceCompany": "NRMA INSURANCE LIMITED",
"State": "ACT"
}
Northern Territory (NT)
The Northern Territory provides registration status and inspection information:
Available Data:
- Vehicle description
- Make and model details
- Registration year
- Vehicle color
- Registration plate details
- Insurance class information
- Inspection date requirements
- Plate type classification
- Registration status
Sample Response (NT):
{
"Description": "BLACK TOYOTA PRADO 2012",
"CarMake": {
"CurrentTextValue": "TOYOTA"
},
"CarModel": {
"CurrentTextValue": "PRADO"
},
"RegistrationYear": 2012,
"Colour": "BLACK",
"RegistrationPlate": {
"can_register": true,
"plate": "CA71JS",
"can_inspect": true,
"insurance_class": "A",
"insurance_class_desc": "Vehicle not exceeding 4.5 tonne GVM or bus used for private or business.",
"date_inspection": 1516579200000,
"plate_type": "C",
"class_code": "",
"can_remind": true,
"status": "REGISTERED",
"date_expired": 1490227200000
},
"State": "NT"
}
Western Australia (WA)
Western Australia provides detailed technical specifications:
Available Data:
- Complete vehicle description
- Make and model details
- Registration year
- Body style classification
- Vehicle color
- NEVDIS number
- Engine specifications
- NVIC code
- Transmission type
- Registration expiry date
Sample Response (WA):
{
"Description": "MAZDA Mazda6 4D Sedan CLASSIC",
"RegistrationYear": "2008",
"CarMake": {
"CurrentTextValue": "MAZDA"
},
"MakeDescription": {
"CurrentTextValue": "MAZDA"
},
"ModelDescription": {
"CurrentTextValue": "Mazda6 4D Sedan"
},
"BodyStyle": {
"CurrentTextValue": "Classic 6-Speed Manual"
},
"VechileIdentificationNumber": "MAZ--6CLGH25HV92008B",
"Engine": "2.5 litre, 4 cyl, GH",
"extended": {
"nvic": "HV908B",
"driveType": "4D SEDAN",
"family": "MAZDA6",
"variant": "CLASSIC",
"model": "Mazda6 4D Sedan",
"make": "MAZDA",
"capacityValue": "2.5",
"series": "GH",
"engineDescription": "2.5 litre, 4 cyl, GH",
"bodyType": "Classic 6-Speed Manual",
"cylinders": "4",
"year": "2008",
"capacityUnit": "L",
"transmissionType": "Manual"
},
"Expiry": "16/12/2017",
"State": "WA"
}
WA Motorcycle Support: Western Australia also supports motorcycle lookups:
{
"Description": "YAMAHA XVS650 MOTORCYCLE V",
"RegistrationYear": "2014",
"CarMake": {
"CurrentTextValue": "YAMAHA"
},
"MakeDescription": {
"CurrentTextValue": "YAMAHA"
},
"ModelDescription": {
"CurrentTextValue": "XVS650"
},
"VehicleType": "Motorcycle",
"State": "WA"
}
Tasmania (TAS)
Tasmania provides comprehensive technical vehicle data:
Available Data:
- Complete vehicle description
- Make and model details
- Registration year
- Body style specifications
- Vehicle color
- NEVDIS number
- Engine specifications with displacement
- NVIC code
- Transmission details
- Registration expiry date
Sample Response (TAS):
{
"Description": "MAZDA Cx-5 4D Wagon MAXX (4x2)",
"RegistrationYear": "2012",
"CarMake": {
"CurrentTextValue": "MAZDA"
},
"MakeDescription": {
"CurrentTextValue": "MAZDA"
},
"ModelDescription": {
"CurrentTextValue": "Cx-5 4D Wagon"
},
"BodyStyle": {
"CurrentTextValue": "Maxx (4X2) 6-Speed Manual"
},
"VechileIdentificationNumber": "MAZCX5M2--20NHI2012B",
"Engine": "2.0 litre, 4 cyl",
"extended": {
"nvic": "NHI12B",
"driveType": "4D WAGON",
"family": "CX-5",
"variant": "MAXX (4x2)",
"model": "Cx-5 4D Wagon",
"make": "MAZDA",
"capacityValue": "2.0",
"engineDescription": "2.0 litre, 4 cyl",
"bodyType": "Maxx (4X2) 6-Speed Manual",
"cylinders": "4",
"year": "2012",
"capacityUnit": "L",
"transmissionType": "Manual"
},
"State": "TAS"
}
State Code Validation
function validateAustralianState(state) {
const validStates = ['NSW', 'VIC', 'QLD', 'SA', 'ACT', 'NT', 'WA', 'TAS'];
if (!state) {
return { valid: false, error: "State code is required" };
}
const upperState = state.toUpperCase();
if (!validStates.includes(upperState)) {
return {
valid: false,
error: `Invalid state code. Must be one of: ${validStates.join(', ')}`
};
}
return { valid: true, state: upperState };
}
// Usage example
const stateValidation = validateAustralianState("nsw");
if (stateValidation.valid) {
// Proceed with API call using stateValidation.state
} else {
console.error(stateValidation.error);
}
Complete Implementation Example
import requests
import xml.etree.ElementTree as ET
import json
class AustralianVehicleAPI:
def __init__(self, username):
self.username = username
self.base_url = "https://www.regcheck.org.uk/api/reg.asmx/CheckAustralia"
self.valid_states = ['NSW', 'VIC', 'QLD', 'SA', 'ACT', 'NT', 'WA', 'TAS']
def validate_inputs(self, registration, state):
"""Validate registration and state inputs"""
errors = []
if not registration or len(registration.strip()) < 2:
errors.append("Registration number is required (minimum 2 characters)")
if not state:
errors.append("State code is required")
elif state.upper() not in self.valid_states:
errors.append(f"Invalid state. Must be one of: {', '.join(self.valid_states)}")
return errors
def lookup(self, registration, state):
"""Lookup Australian vehicle with comprehensive error handling"""
# Validate inputs
errors = self.validate_inputs(registration, state)
if errors:
return {"error": "; ".join(errors)}
try:
params = {
'RegistrationNumber': registration.strip(),
'State': state.upper(),
'username': self.username
}
response = requests.get(self.base_url, params=params, timeout=15)
response.raise_for_status()
# Parse XML response
root = ET.fromstring(response.content)
json_element = root.find('.//vehicleJson')
if json_element is None or not json_element.text:
return {"error": "No vehicle data found for this registration"}
vehicle_data = json.loads(json_element.text)
# Add lookup metadata
vehicle_data['lookup_info'] = {
'registration': registration.strip(),
'state': state.upper(),
'timestamp': response.headers.get('Date')
}
return vehicle_data
except requests.Timeout:
return {"error": "Request timed out - please try again"}
except requests.RequestException as e:
return {"error": f"Network error: {str(e)}"}
except ET.ParseError:
return {"error": "Invalid response format from API"}
except json.JSONDecodeError:
return {"error": "Could not parse vehicle data"}
except Exception as e:
return {"error": f"Unexpected error: {str(e)}"}
def lookup_multiple_states(self, registration, states=None):
"""Try lookup across multiple states if state is unknown"""
if states is None:
states = self.valid_states
results = {}
for state in states:
result = self.lookup(registration, state)
if "error" not in result:
return result # Return first successful match
results[state] = result
return {"error": "Vehicle not found in any specified states", "attempts": results}
# Usage examples
api = AustralianVehicleAPI("your_username")
# Single state lookup
result = api.lookup("ABC123", "NSW")
if "error" not in result:
print(f"Found: {result.get('Description')}")
print(f"State: {result.get('State')}")
if 'extended' in result:
ext = result['extended']
print(f"Engine: {ext.get('engineDescription')}")
print(f"Transmission: {ext.get('transmissionType')}")
else:
print(f"Error: {result['error']}")
# Multi-state search when state is unknown
result = api.lookup_multiple_states("XYZ789", ["NSW", "VIC", "QLD"])
if "error" not in result:
print(f"Vehicle found in {result.get('State')}: {result.get('Description')}")
Use Cases by Industry
Insurance Industry
- Premium Calculations – Vehicle specifications for risk assessment
- Claims Processing – Verify vehicle details during claim investigations
- Policy Management – Automatic vehicle data population
- Fraud Detection – Cross-reference vehicle information across states
Automotive Industry
- Dealership Operations – Verify trade-in vehicle specifications
- Parts and Service – Identify correct parts using VIN and specifications
- Vehicle History – Track registration history across states
- Inventory Management – Automated vehicle data for listings
Fleet Management
- Asset Tracking – Maintain comprehensive vehicle records
- Compliance Monitoring – Ensure registration currency across fleets
- Insurance Management – Track insurance expiry dates
- Maintenance Scheduling – Engine specifications for service planning
Law Enforcement
- Vehicle Identification – Quick lookups during traffic stops
- Investigation Support – Cross-state vehicle tracking
- Stolen Vehicle Detection – Access to stolen vehicle indicators
- Registration Verification – Confirm registration validity
Data Variations and Considerations
Coverage Differences
Each Australian state provides different data depth based on their systems:
- Most Comprehensive: NSW, WA, TAS (detailed technical specifications)
- Insurance Focus: SA, ACT, QLD (insurance company information)
- Basic Identification: VIC, NT (essential vehicle details)
Motorcycle Support
Currently available in NSW and WA with plans for expansion to other states.
Historical Data
Data availability varies by state, with some providing records from the 1990s while others focus on more recent registrations.
Getting Started
Account Setup
- Register at regcheck.org.uk for API access
- Verify email address to receive test credits
- Test with sample registrations from different states
- Purchase credits for production usage
Testing Recommendations
Test across multiple states to understand data variations:
- NSW: Comprehensive technical data
- VIC: Basic identification with VIN
- QLD: Insurance-focused information
- SA: Color and insurance details
Conclusion
The Australian Vehicle Registration API provides comprehensive access to vehicle data across all eight Australian states and territories. Each jurisdiction offers different data depths, from basic identification to detailed technical specifications including engine details, transmission types, and extended vehicle information.
Understanding state-specific data variations is crucial for effective implementation. NSW, WA, and TAS provide the most comprehensive technical data, while other states focus on identification and insurance information. The API’s support for motorcycle lookups in select states adds versatility for diverse Australian vehicle types.
The federated nature of Australian vehicle registration creates unique opportunities and challenges. Developers can leverage state-specific data strengths while implementing fallback mechanisms for comprehensive vehicle identification across the continent.
Start exploring Australian vehicle data today by registering for your API account and testing across different states to understand the rich variety of information available from Australia’s diverse vehicle registration systems.
Quicklinks:
Australian API: https://www.carregistrationapi.com.au/
Nevdis info: https://austroads.gov.au/drivers-and-vehicles/nevdis
How to Open .pkpasses Files on Your iPhone: The Hidden Multi-Pass Secret #PKPASSES

If you’ve ever booked multiple tickets with airlines like EasyJet, you might have encountered a mysterious file type: .pkpasses. Unlike the familiar .pkpass files that open seamlessly in Apple Wallet, these multi-pass bundles can leave you scratching your head when they won’t open directly on your iPhone.
Don’t worry – there’s a simple workaround that airlines don’t always explain clearly. Here’s everything you need to know about .pkpasses files and how to get your boarding passes into Apple Wallet where they belong.
What Are .pkpasses Files?
A .pkpasses file is essentially a container that holds multiple .pkpass files bundled together. When you book multiple flights or tickets in a single transaction, airlines like EasyJet use this format to deliver all your passes at once, rather than sending separate emails for each boarding pass.
Think of it as a digital envelope containing multiple boarding passes – convenient for the airline’s system, but not immediately compatible with your iPhone’s Wallet app, which expects individual .pkpass files.
The Problem: Why Won’t My .pkpasses File Open?
When you try to open a .pkpasses file directly on your iPhone, you’ll likely encounter one of these frustrating scenarios:
- The file downloads but nothing happens when you tap it
- You get an error message saying the file can’t be opened
- The Wallet app doesn’t recognize or import the passes
This happens because Apple Wallet is designed to handle individual .pkpass files, not the bundled .pkpasses format.
The Solution: Extract Individual Passes
Here’s the step-by-step process to extract your individual boarding passes from a .pkpasses file:
Step 1: Rename the File Extension
The key insight is that .pkpasses files are actually ZIP archives in disguise. To access the individual passes inside:
- Save the
.pkpassesfile to your device (usually through email or download) - Rename the file extension from
.pkpassesto.zip - You can do this using the Files app on iOS, or more easily on a computer
Step 2: Unzip the Archive
Once renamed to .zip, you can extract the contents:
- On iPhone/iPad: Use the Files app to tap the ZIP file and it will automatically extract
- On Mac/PC: Double-click the ZIP file or use your preferred extraction tool
Step 3: Find Your Individual .pkpass Files
Inside the extracted folder, you’ll discover multiple .pkpass files – one for each boarding pass or ticket in your booking. These files will typically be named with flight numbers, dates, or passenger names.
Step 4: Email the Passes to Yourself
This is where the magic happens:
- Select each
.pkpassfile individually - Email them to yourself (or use AirDrop if working on a Mac)
- Open the email on your iPhone
- Tap each
.pkpassattachment - Each pass will now open properly in Apple Wallet
Why This Method Works
By extracting and emailing the individual .pkpass files, you’re essentially doing what the airline’s system should have done in the first place – delivering each pass in a format that Apple Wallet can recognize and import.
The email step is crucial because it triggers iOS to properly recognize the MIME type and offer to open the file in Wallet. Simply copying the extracted .pkpass files to your phone via other methods might not work as reliably.
Pro Tips for Managing Multiple Passes
- Organize by trip: Create separate emails for outbound and return flights
- Check all details: Verify that each extracted pass contains the correct passenger and flight information
- Keep the original: Save the original
.pkpassesfile as a backup - Test early: Don’t wait until you’re at the airport to discover pass issues
Alternative Solutions
If the manual extraction method seems too technical, consider these alternatives:
- Contact the airline: Many airlines can resend individual
.pkpassfiles if you explain the issue - Use airline apps: Download the airline’s official app, which often provides wallet-compatible passes
- Third-party tools: Some online services can convert
.pkpassesto individual passes, though be cautious about uploading sensitive travel documents
When You Might Encounter .pkpasses Files
This file format is most commonly used by:
- Budget airlines like EasyJet for multi-leg bookings
- Travel booking platforms managing multiple tickets
- Event organizers selling group or family ticket bundles
- Transit authorities for multi-ride passes
Conclusion
While .pkpasses files might seem like an unnecessary complication, understanding how to handle them ensures you’re never stuck without access to your boarding passes. The rename-to-ZIP trick is a simple but powerful solution that turns a frustrating file format issue into a minor inconvenience.
Next time you receive a .pkpasses file, you’ll know exactly what to do: rename it to .zip, extract the individual passes, and email them to yourself. Your future self at the airport will thank you for taking these few extra minutes to ensure your passes are properly loaded in Apple Wallet.
Remember, technology should make travel easier, not harder – and now you have the knowledge to make sure it does.
Unlock Brand Recognition in Emails: Free #BIMI #API from AvatarAPI.com

Email marketing is more competitive than ever, and standing out in crowded inboxes is a constant challenge. What if there was a way to instantly make your emails more recognizable and trustworthy? Enter BIMI – a game-changing email authentication standard that’s revolutionizing how brands appear in email clients.
What is BIMI? (In Simple Terms)
BIMI stands for “Brand Indicators for Message Identification.” Think of it as a verified profile picture for your company’s emails. Just like how you recognize friends by their profile photos on social media, BIMI lets email providers display your company’s official logo next to emails you send.
Here’s how it works in everyday terms:
- Traditional email: When Spotify sends you an email, you might only see their name in your inbox
- BIMI-enabled email: You’d see Spotify’s recognizable logo right next to their name, making it instantly clear the email is legitimate
This visual verification helps recipients quickly identify authentic emails from brands they trust, while making it harder for scammers to impersonate legitimate companies.
Why BIMI Matters for Your Business
Instant Brand Recognition: Your logo appears directly in the inbox, increasing brand visibility and email open rates.
Enhanced Trust: Recipients can immediately verify that emails are genuinely from your company, reducing the likelihood they’ll mark legitimate emails as spam.
Competitive Advantage: Many companies haven’t implemented BIMI yet, so adopting it early helps you stand out.
Better Deliverability: Email providers like Gmail and Yahoo prioritize authenticated emails, potentially improving your delivery rates.
Introducing the Free BIMI API from AVATARAPI.com
While implementing BIMI traditionally requires DNS configuration and technical setup, AVATARAPI.com offers a simple API that lets you retrieve BIMI information for any email domain instantly. This is perfect for:
- Email marketing platforms checking sender authenticity
- Security tools validating email sources
- Analytics services tracking BIMI adoption
- Developers building email-related applications
How to Use the Free BIMI API
Getting started is incredibly simple. Here’s everything you need to know:
API Endpoint
POST https://avatarapi.com/v2/api.aspx
Request Format
Send a JSON request with these parameters:
{
"username": "demo",
"password": "demo___",
"provider": "Bimi",
"email": "no-reply@alerts.spotify.com"
}
Parameters Explained:
username&password: Use “demo” and “demo___” for free accessprovider: Set to “Bimi” to retrieve BIMI dataemail: The email address you want to check for BIMI records
Example Response
The API returns comprehensive BIMI information:
{
"Name": "",
"Image": "https://message-editor.scdn.co/spotify_ab_1024216054.svg",
"Valid": true,
"City": "",
"Country": "",
"IsDefault": false,
"Success": true,
"RawData": "",
"Source": {
"Name": "Bimi"
}
}
Response Fields:
Image: Direct URL to the company’s BIMI logoValid: Whether the BIMI record is properly configuredSuccess: Confirms the API call was successfulIsDefault: Indicates if this is a fallback or authentic BIMI record
Practical Use Cases
Email Security Platforms: Verify sender authenticity by checking if incoming emails have valid BIMI records.
Marketing Analytics: Track which competitors have implemented BIMI to benchmark your email marketing efforts.
Email Client Development: Integrate BIMI logo display into custom email applications.
Compliance Monitoring: Ensure your company’s BIMI implementation is working correctly across different domains.
Try It Now
Ready to explore BIMI data? The API is free to use with the demo credentials provided above. Simply make a POST request to test it with any email address – try major brands like Spotify, PayPal, or LinkedIn to see their BIMI implementations in action.
Whether you’re a developer building email tools, a marketer researching competitor strategies, or a security professional validating email authenticity, this free BIMI API provides instant access to valuable brand verification data.
Start integrating BIMI checking into your applications today and help make email communication more secure and recognizable for everyone.
https://www.avatarapi.com/
German Vehicle #KBA #API: Complete Guide to German Car Data Lookup Using KBA Numbers
https://www.kbaapi.de/

Germany represents Europe’s largest automotive market and home to world-renowned manufacturers like BMW, Mercedes-Benz, Audi, and Volkswagen. Unlike most vehicle registration APIs that use license plates, the German Vehicle API operates using KBA numbers (Kraftfahrt-Bundesamt codes) – unique identifiers registered with the Federal Motor Transport Authority. (https://www.kbaapi.de/)
Understanding the German KBA System
The Kraftfahrt-Bundesamt (KBA) is Germany’s Federal Motor Transport Authority, responsible for vehicle type approvals and maintaining the central database of vehicle specifications. Every vehicle model sold in Germany receives a unique KBA number that identifies its exact specifications, engine type, and technical details.
What is a KBA Number?
A KBA number consists of two parts in the format HSN/TSN:
- HSN (Herstellerschlüsselnummer) – Manufacturer key number
- TSN (Typschlüsselnummer) – Type key number
Together, these numbers uniquely identify a specific vehicle model variant, including engine specifications, body type, and equipment levels.
Where to Find KBA Numbers
KBA numbers can be found in several locations on German vehicle documentation:
- Vehicle Registration Certificate (Part 1) – Fields 2.1 and 2.2
- Vehicle Registration Document – Boxes 2 and 3
- Certificate of Conformity – Technical documentation
- Insurance Documents – Often included in policy details
German Vehicle API Features
The German endpoint provides comprehensive technical specifications for vehicles registered in Germany:
Available Data
When querying German vehicle records using KBA numbers, you can retrieve:
- Make and Model – Complete manufacturer and model designation
- Engine Specifications – Power in both KW and horsepower (PS)
- Engine Capacity – Displacement in cubic centimeters
- Fuel Type – Petrol (Benzin), diesel, electric, or hybrid classifications
- Technical Period – Years of manufacture for this specification
- Representative Images – Visual identification of the vehicle type
Sample Response Format
{
"Description": "ALFA GIULIETTA Spider 1.3 [196101 - 196212] (59kW 80hp Otto AR 00508)",
"CarMake": {
"CurrentTextValue": "alfa romeo"
},
"CarModel": {
"CurrentTextValue": "GIULIETTA SPIDER"
},
"MakeDescription": {
"CurrentTextValue": "alfa romeo"
},
"ModelDescription": {
"CurrentTextValue": "GIULIETTA SPIDER"
},
"PowerKW": 59,
"PowerHP": 80,
"EngineSize": 1281,
"Fuel": "Benzin"
}
API Implementation
Endpoint Usage
The German Vehicle API uses the /CheckGermany endpoint and requires two parameters:
- KBA Number – In HSN/TSN format (e.g., “4000/305”)
- Username – Your API authentication username
Basic Implementation Example
// JavaScript example for German KBA lookup
async function lookupGermanVehicle(kbaNumber, username) {
const apiUrl = `https://www.regcheck.org.uk/api/reg.asmx/CheckGermany?KBANumber=${kbaNumber}&username=${username}`;
try {
const response = await fetch(apiUrl);
const xmlText = await response.text();
// Parse XML response
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlText, "text/xml");
const jsonData = xmlDoc.getElementsByTagName("vehicleJson")[0].textContent;
const vehicleInfo = JSON.parse(jsonData);
return {
make: vehicleInfo.MakeDescription.CurrentTextValue,
model: vehicleInfo.ModelDescription.CurrentTextValue,
powerKW: vehicleInfo.PowerKW,
powerHP: vehicleInfo.PowerHP,
engineSize: vehicleInfo.EngineSize,
fuel: vehicleInfo.Fuel,
description: vehicleInfo.Description
};
} catch (error) {
console.error('German KBA lookup failed:', error);
return null;
}
}
// Usage example
lookupGermanVehicle("4000/305", "your_username")
.then(data => {
if (data) {
console.log(`Vehicle: ${data.make} ${data.model}`);
console.log(`Power: ${data.powerKW}kW (${data.powerHP}hp)`);
console.log(`Engine: ${data.engineSize}cc ${data.fuel}`);
}
});
Python Implementation
import requests
import xml.etree.ElementTree as ET
import json
def lookup_german_vehicle(kba_number, username):
"""
Look up German vehicle data using KBA number
Args:
kba_number (str): KBA number in format "HSN/TSN"
username (str): API username
Returns:
dict: Vehicle specifications or None if not found
"""
url = "https://www.regcheck.org.uk/api/reg.asmx/CheckGermany"
params = {
'KBANumber': kba_number,
'username': username
}
try:
response = requests.get(url, params=params)
response.raise_for_status()
# Parse XML response
root = ET.fromstring(response.content)
json_element = root.find('.//vehicleJson')
if json_element is not None and json_element.text:
vehicle_data = json.loads(json_element.text)
return {
'make': vehicle_data.get('MakeDescription', {}).get('CurrentTextValue'),
'model': vehicle_data.get('ModelDescription', {}).get('CurrentTextValue'),
'power_kw': vehicle_data.get('PowerKW'),
'power_hp': vehicle_data.get('PowerHP'),
'engine_size': vehicle_data.get('EngineSize'),
'fuel_type': vehicle_data.get('Fuel'),
'description': vehicle_data.get('Description')
}
else:
return None
except Exception as e:
print(f"Error looking up KBA {kba_number}: {e}")
return None
# Example usage
vehicle_info = lookup_german_vehicle("4000/305", "your_username")
if vehicle_info:
print(f"Make: {vehicle_info['make']}")
print(f"Model: {vehicle_info['model']}")
print(f"Power: {vehicle_info['power_kw']}kW ({vehicle_info['power_hp']}hp)")
print(f"Engine: {vehicle_info['engine_size']}cc")
print(f"Fuel: {vehicle_info['fuel_type']}")
German Automotive Market Context
Major German Manufacturers
The German automotive industry is dominated by several world-leading manufacturers, each with distinct KBA number ranges:
Luxury Brands:
- Mercedes-Benz – Known for luxury sedans, SUVs, and commercial vehicles
- BMW – Premium vehicles including the iconic 3 Series, 5 Series, and X-series SUVs
- Audi – Volkswagen Group’s luxury division with quattro all-wheel drive technology
Volume Manufacturers:
- Volkswagen – Europe’s largest automaker with diverse model range
- Opel – German subsidiary of Stellantis (formerly General Motors)
- Ford Germany – American manufacturer’s European operations
Specialist Manufacturers:
- Porsche – High-performance sports cars and SUVs
- Smart – City cars and electric vehicles
- Maybach – Ultra-luxury vehicles
Technical Specifications in German Data
German vehicle data typically includes precise technical specifications reflecting the country’s rigorous automotive standards:
Engine Data:
- Power ratings in both KW (European standard) and PS (German horsepower)
- Precise displacement measurements in cubic centimeters
- Detailed fuel type classifications including Euro emission standards
Period Information:
- Exact production periods showing when specifications were valid
- Model year ranges for specific technical configurations
- Regulatory compliance periods
Use Cases for German KBA API
Insurance Industry Applications
Premium Calculation:
- Access precise power ratings for risk assessment
- Engine size data for determining insurance categories
- Technical specifications for replacement value calculations
Claims Processing:
- Verify vehicle specifications for parts compatibility
- Confirm power ratings for performance-related claims
- Validate technical data for repair cost estimates
Automotive Industry
Parts and Service:
- Identify correct parts using precise technical specifications
- Determine service intervals based on engine types
- Verify compatibility for aftermarket components
Vehicle Trading:
- Accurate vehicle descriptions for used car listings
- Specification verification for import/export documentation
- Technical data for vehicle valuations
Fleet Management
Asset Tracking:
- Maintain detailed technical records of company vehicles
- Power and fuel type data for operational planning
- Engine specifications for maintenance scheduling
Compliance Monitoring:
- Verify emissions standards for environmental regulations
- Power ratings for driver license category compliance
- Technical data for safety inspections
Development and Research
Market Analysis:
- Technical specification trends in German automotive market
- Power and efficiency data for competitive analysis
- Fuel type distribution for market research
Regulatory Compliance:
- Emission standard verification for import/export
- Technical data for type approval processes
- Specification validation for regulatory filings
KBA Number Validation and Best Practices
Input Validation
function validateKBANumber(kbaNumber) {
// KBA format: HSN/TSN (e.g., "4000/305")
const kbaPattern = /^\d{4}\/\d{3}$/;
if (!kbaNumber) {
return { valid: false, error: "KBA number is required" };
}
if (!kbaPattern.test(kbaNumber)) {
return {
valid: false,
error: "Invalid KBA format. Expected format: XXXX/XXX (e.g., 4000/305)"
};
}
const [hsn, tsn] = kbaNumber.split('/');
if (parseInt(hsn) < 1000 || parseInt(hsn) > 9999) {
return { valid: false, error: "HSN must be between 1000 and 9999" };
}
if (parseInt(tsn) < 1 || parseInt(tsn) > 999) {
return { valid: false, error: "TSN must be between 001 and 999" };
}
return { valid: true };
}
// Example usage
const validation = validateKBANumber("4000/305");
if (validation.valid) {
// Proceed with API call
} else {
console.error(validation.error);
}
Error Handling
class GermanVehicleAPI:
def __init__(self, username):
self.username = username
self.base_url = "https://www.regcheck.org.uk/api/reg.asmx/CheckGermany"
def validate_kba_format(self, kba_number):
"""Validate KBA number format"""
if not kba_number or '/' not in kba_number:
return False, "KBA number must contain HSN/TSN format"
try:
hsn, tsn = kba_number.split('/')
if len(hsn) != 4 or len(tsn) != 3:
return False, "HSN must be 4 digits, TSN must be 3 digits"
int(hsn) # Validate numeric
int(tsn) # Validate numeric
return True, "Valid format"
except ValueError:
return False, "HSN and TSN must be numeric"
def lookup(self, kba_number):
"""Lookup vehicle by KBA number with comprehensive error handling"""
# Validate format
is_valid, message = self.validate_kba_format(kba_number)
if not is_valid:
return {"error": message}
try:
response = requests.get(self.base_url, params={
'KBANumber': kba_number,
'username': self.username
}, timeout=10)
if response.status_code == 404:
return {"error": "KBA number not found in database"}
response.raise_for_status()
# Parse response
root = ET.fromstring(response.content)
json_element = root.find('.//vehicleJson')
if json_element is None or not json_element.text:
return {"error": "No vehicle data available for this KBA number"}
return json.loads(json_element.text)
except requests.Timeout:
return {"error": "API request timed out"}
except requests.RequestException as e:
return {"error": f"API request failed: {str(e)}"}
except ET.ParseError:
return {"error": "Invalid XML response from API"}
except json.JSONDecodeError:
return {"error": "Invalid JSON data in response"}
# Usage
api = GermanVehicleAPI("your_username")
result = api.lookup("4000/305")
if "error" in result:
print(f"Lookup failed: {result['error']}")
else:
print(f"Vehicle found: {result.get('Description')}")
Comparison with License Plate Systems
Why KBA Numbers Instead of License Plates?
The German system’s use of KBA numbers instead of license plates reflects several key differences:
Technical Precision:
- KBA numbers identify exact technical specifications
- License plates only identify individual vehicles
- Multiple vehicles can share the same KBA specifications
Privacy Protection:
- KBA lookups don’t reveal personal ownership information
- License plate systems often include owner data
- Complies with strict German data protection laws (GDPR)
Standardization:
- KBA numbers are consistent across all German states
- License plate formats vary by region and time period
- Technical specifications remain constant regardless of registration location
Alternative: German License Plate Availability
For developers specifically needing German license plate availability checking, a separate service is available through RapidAPI. However, this service only checks if a license plate combination is available for registration, not vehicle specifications.
Data Coverage and Limitations
Coverage Scope
- Complete KBA Database – All vehicles approved for German market
- Historical Data – Vehicles from 1960s onwards
- Technical Accuracy – Official specifications from Federal Motor Transport Authority
- Regular Updates – Database maintained with current approvals
Limitations
- KBA Number Required – Cannot lookup by license plate
- German Market Only – Covers vehicles approved for German sale
- Technical Focus – Provides specifications, not ownership data
- Import Vehicles – Limited data for non-German market vehicles
Getting Started with German KBA API
Account Setup Process
- Register Account – Sign up at regcheck.org.uk
- Email Verification – Confirm account to receive test credits
- Test with Sample Data – Use KBA number “4000/305” for testing
- Production Setup – Purchase credits for live applications
Sample KBA Numbers for Testing
- 4000/305 – Alfa Romeo Giulietta Spider 1.3L
- Test this KBA number without consuming credits during development
Integration Planning
- Determine if your application needs KBA number input from users
- Consider how to help users locate their KBA numbers
- Plan for error handling when KBA numbers aren’t found
- Design UI to display technical specifications clearly
Conclusion
The German Vehicle KBA API provides unique access to precise technical specifications for vehicles in the German market. By using official KBA numbers rather than license plates, the system offers technical accuracy while maintaining privacy compliance.
The API serves various industries from insurance and automotive services to fleet management and regulatory compliance. With proper implementation and error handling, developers can integrate reliable German vehicle specification data into their applications.
Understanding the KBA system’s technical focus and format requirements is essential for successful integration. The system’s precision makes it particularly valuable for applications requiring exact vehicle specifications rather than general identification data.
Ready to access German vehicle technical data? Register for your API account and start exploring the comprehensive KBA database today.
https://www.kbaapi.de/
USA Vehicle Registration API: Complete Guide to American VIN and License Plate Lookups

The United States represents one of the largest automotive markets in the world, with over 270 million registered vehicles across all 50 states. For developers and businesses working with American vehicle data, the USA Vehicle Registration API provides instant access to comprehensive vehicle information using license plate numbers and state codes. See here: https://www.vehicleregistrationapi.com/
Overview of USA Vehicle Registration System
Unlike many countries that have centralized vehicle registration systems, the United States operates on a state-by-state basis. Each of the 50 states, plus Washington D.C., Puerto Rico, Guam, and the Virgin Islands, maintains its own vehicle registration database. This decentralized approach means that vehicle lookups require both the license plate number and the state where the vehicle is registered.
USA Vehicle API Features
The USA endpoint provides access to vehicle information across all American jurisdictions, including:
Supported Jurisdictions
- All 50 States – From Alabama to Wyoming
- Federal District – Washington D.C. (DC)
- Territories – Puerto Rico (PR), Guam (GU), Virgin Islands (VI)
Data Available
When querying American vehicle registrations, you can retrieve:
- Vehicle Description – Complete make, model, and year information
- Body Style – Vehicle type classification (sedan, SUV, pickup truck, etc.)
- VIN Number – Complete 17-character Vehicle Identification Number
- Engine Specifications – Engine size and configuration details
- Country of Assembly – Where the vehicle was manufactured
- Registration Year – Year the vehicle was first registered
API Implementation
Endpoint Usage
The USA Vehicle Registration API uses the /CheckUSA endpoint and requires two parameters:
- License Plate Number – The registration number (without spaces or special characters)
- State Code – Two-letter abbreviation for the state of registration
State Codes Reference
The API accepts standard two-letter state abbreviations:
States A-M:
- AL (Alabama), AK (Alaska), AZ (Arizona), AR (Arkansas)
- CA (California), CO (Colorado), CT (Connecticut), DE (Delaware)
- FL (Florida), GA (Georgia), HI (Hawaii), ID (Idaho)
- IL (Illinois), IN (Indiana), IA (Iowa), KS (Kansas)
- KY (Kentucky), LA (Louisiana), ME (Maine), MD (Maryland)
- MA (Massachusetts), MI (Michigan), MN (Minnesota), MS (Mississippi), MO (Missouri), MT (Montana)
States N-W:
- NE (Nebraska), NV (Nevada), NH (New Hampshire), NJ (New Jersey)
- NM (New Mexico), NY (New York), NC (North Carolina), ND (North Dakota)
- OH (Ohio), OK (Oklahoma), OR (Oregon), PA (Pennsylvania)
- RI (Rhode Island), SC (South Carolina), SD (South Dakota), TN (Tennessee)
- TX (Texas), UT (Utah), VT (Vermont), VA (Virginia)
- WA (Washington), WV (West Virginia), WI (Wisconsin), WY (Wyoming)
Federal & Territories:
- DC (District of Columbia), GU (Guam), PR (Puerto Rico), VI (Virgin Islands)
Sample Implementation
Basic API Call Example
// JavaScript example for USA vehicle lookup
const username = 'your_api_username';
const plateNumber = 'ABC1234';
const state = 'CA'; // California
const apiUrl = `https://www.regcheck.org.uk/api/reg.asmx/CheckUSA?RegistrationNumber=${plateNumber}&State=${state}&username=${username}`;
fetch(apiUrl)
.then(response => response.text())
.then(data => {
// Parse XML response
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(data, "text/xml");
const jsonData = xmlDoc.getElementsByTagName("vehicleJson")[0].textContent;
const vehicleInfo = JSON.parse(jsonData);
console.log("Vehicle:", vehicleInfo.Description);
console.log("VIN:", vehicleInfo.VechileIdentificationNumber);
console.log("Body Style:", vehicleInfo.BodyStyle.CurrentTextValue);
})
.catch(error => console.error('Error:', error));
Response Format
The API returns data in both XML and JSON formats. Here’s a sample response for a 2004 Dodge Durango:
{
"Description": "2004 Dodge Durango Limited",
"BodyStyle": {
"CurrentTextValue": "SUV 4D"
},
"VechileIdentificationNumber": "1D8HB58D04F177301",
"Assembly": "United States",
"EngineSize": {
"CurrentTextValue": "5.7L V8 MPI"
},
"RegistrationYear": "2004",
"CarMake": {
"CurrentTextValue": "Dodge"
},
"CarModel": {
"CurrentTextValue": "Durango Limited"
},
"MakeDescription": {
"CurrentTextValue": "Dodge"
},
"ModelDescription": {
"CurrentTextValue": "Durango Limited"
}
}
State-Specific Considerations
California (CA)
California has one of the most comprehensive vehicle databases in the US, with detailed information available for most vehicles. The state’s emissions requirements mean additional environmental data may be available.
Texas (TX)
As the second-largest state by population and vehicle registrations, Texas maintains extensive records. The state’s diverse automotive market includes everything from pickup trucks to luxury vehicles.
Florida (FL)
Florida’s high volume of vehicle imports and exports, combined with its large retiree population, creates a unique mix of vehicle types and registration patterns.
New York (NY)
New York’s database includes both upstate rural vehicles and New York City urban registrations, providing a diverse dataset for vehicle information.
Use Cases for USA Vehicle API
Insurance Industry Applications
- Policy Underwriting – Verify vehicle specifications for accurate premium calculations
- Claims Processing – Validate vehicle information during accident claims
- Fraud Prevention – Cross-reference vehicle details to detect inconsistencies
Automotive Dealers
- Inventory Management – Automatically populate vehicle listings with accurate specifications
- Trade-In Valuations – Verify vehicle details for pricing assessments
- Sales Documentation – Ensure accurate vehicle information on sales contracts
Fleet Management
- Asset Tracking – Maintain detailed records of company vehicle fleets
- Compliance Monitoring – Verify vehicle specifications for regulatory compliance
- Maintenance Scheduling – Access manufacturer specifications for service intervals
Law Enforcement
- Vehicle Identification – Quick lookup for traffic stops and investigations
- Asset Recovery – Verify vehicle ownership and specifications
- Investigation Support – Cross-reference vehicle data in criminal cases
Mobile Applications
- Car Shopping Apps – Instant vehicle specification lookup for used car buyers
- Maintenance Apps – Access vehicle specs for service reminders and parts ordering
- Insurance Apps – Quick vehicle verification for policy quotes
Integration Best Practices
Error Handling
Always implement robust error handling when working with the USA API:
import requests
import xml.etree.ElementTree as ET
import json
def lookup_usa_vehicle(plate_number, state, username):
try:
url = f"https://www.regcheck.org.uk/api/reg.asmx/CheckUSA"
params = {
'RegistrationNumber': plate_number,
'State': state,
'username': username
}
response = requests.get(url, params=params)
response.raise_for_status()
# Parse XML response
root = ET.fromstring(response.content)
json_data = root.find('.//vehicleJson').text
if json_data:
vehicle_data = json.loads(json_data)
return vehicle_data
else:
return {"error": "No vehicle data found"}
except requests.RequestException as e:
return {"error": f"API request failed: {str(e)}"}
except ET.ParseError as e:
return {"error": f"XML parsing failed: {str(e)}"}
except json.JSONDecodeError as e:
return {"error": f"JSON parsing failed: {str(e)}"}
# Usage example
result = lookup_usa_vehicle("ABC1234", "CA", "your_username")
print(result)
Rate Limiting and Credits
The USA Vehicle API operates on a credit-based system:
- Each successful lookup consumes one credit
- Failed lookups (no data found) typically don’t consume credits
- Monitor your credit balance to avoid service interruptions
- Consider implementing local caching for frequently accessed data
Data Validation
Before making API calls, validate input parameters:
function validateUSALookup(plateNumber, state) {
// Valid US state codes
const validStates = [
'AL', 'AK', 'AZ', 'AR', 'CA', 'CO', 'CT', 'DE', 'FL', 'GA',
'HI', 'ID', 'IL', 'IN', 'IA', 'KS', 'KY', 'LA', 'ME', 'MD',
'MA', 'MI', 'MN', 'MS', 'MO', 'MT', 'NE', 'NV', 'NH', 'NJ',
'NM', 'NY', 'NC', 'ND', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC',
'SD', 'TN', 'TX', 'UT', 'VT', 'VA', 'WA', 'WV', 'WI', 'WY',
'DC', 'GU', 'PR', 'VI'
];
if (!plateNumber || plateNumber.length < 2 || plateNumber.length > 8) {
return { valid: false, error: "Invalid plate number length" };
}
if (!validStates.includes(state.toUpperCase())) {
return { valid: false, error: "Invalid state code" };
}
return { valid: true };
}
Limitations and Coverage
Data Availability
- Coverage varies by state based on data sharing agreements
- Some states may have limited historical data
- Newer registrations typically have more complete information
- Commercial vehicles may have different data availability
Privacy Considerations
- The API provides vehicle specifications, not personal owner information
- All data returned is from publicly available vehicle registration records
- Comply with local privacy laws when storing or processing vehicle data
- Consider data retention policies for cached information
Getting Started
Account Setup
- Create Account – Register at regcheck.org.uk for API access
- Email Verification – Confirm your email to receive free test credits
- Test the Service – Use provided sample license plates for testing
- Purchase Credits – Buy additional credits for production use
Testing with Sample Data
Use this sample license plate for testing: ZZZ9999 with state NC (North Carolina)
This will return information about a 2004 Dodge Durango Limited without consuming your credits.
Pricing and Support
Credit Costs
- Standard rate: 1 credit per successful vehicle lookup
- Volume discounts available for high-usage applications
- Failed lookups typically don’t consume credits
Technical Support
- API documentation available at regcheck.org.uk
- Email support for technical integration questions
- WSDL definition available for SOAP implementations
Conclusion
The USA Vehicle Registration API provides comprehensive access to American vehicle data across all 50 states and territories. With proper implementation and error handling, developers can integrate reliable vehicle lookup functionality into their applications, supporting use cases from insurance processing to mobile app development.
The decentralized nature of American vehicle registration creates unique challenges, but the API abstracts this complexity, providing a single endpoint for nationwide vehicle data access. Whether you’re building consumer applications or enterprise solutions, the USA Vehicle Registration API offers the reliability and coverage needed for professional vehicle data integration.
Ready to start integrating American vehicle data into your application? Sign up for your free API account today and begin exploring the extensive database of US vehicle registrations.
Complete Guide to the UK Vehicle Registration #API: Access #DVLA Data, #MOT History, and More

Are you developing an application that needs instant access to UK vehicle information? The UK Vehicle Registration API provides comprehensive access to DVLA data, MOT history, tax information, and vehicle specifications through a simple integration. This powerful tool allows developers to retrieve detailed vehicle information using just a Vehicle Registration Mark (VRM). Here: https://regcheck.org.uk/
What is the UK Vehicle Registration API?
The UK Vehicle Registration API is a SOAP-based web service that provides instant access to official UK vehicle data. By simply entering a vehicle registration number (VRM), you can retrieve comprehensive information about cars, motorcycles, and commercial vehicles registered with the DVLA.
Key Features:
- Instant VRM lookups for all UK-registered vehicles
- Complete MOT history with test results and failure reasons
- Tax status information including expiry dates
- Comprehensive vehicle specifications including make, model, engine details
- Support for special territories including Isle of Man and Jersey
- Both XML and JSON response formats
UK Vehicle Data Available
Standard Vehicle Information
When you query the UK endpoint using a vehicle registration number, you’ll receive:
- Make and Model – Manufacturer and specific vehicle model
- Year of Registration – When the vehicle was first registered
- VIN Number – Complete Vehicle Identification Number
- ABI Code – Association of British Insurers classification code
- Body Style – Vehicle type (saloon, hatchback, SUV, etc.)
- Engine Size – Displacement in cubic centimeters
- Number of Doors – Vehicle door configuration
- Transmission Type – Manual or automatic
- Fuel Type – Petrol, diesel, electric, hybrid
- Immobiliser Status – Security system information
- Number of Seats – Seating capacity
- Driver Side – Left or right-hand drive
- Vehicle Color – Primary exterior color
Example Response for UK Vehicle Data
{
"ABICode": "32130768",
"Description": "MERCEDES-BENZ E220 SE CDI",
"RegistrationYear": "2013",
"CarMake": {
"CurrentTextValue": "MERCEDES-BENZ"
},
"CarModel": {
"CurrentTextValue": "E220 SE CDI"
},
"EngineSize": {
"CurrentTextValue": "2143"
},
"FuelType": {
"CurrentTextValue": "Diesel"
},
"Transmission": {
"CurrentTextValue": "Automatic"
},
"NumberOfDoors": {
"CurrentTextValue": "4DR"
},
"BodyStyle": {
"CurrentTextValue": "Saloon"
},
"Colour": "WHITE",
"VehicleIdentificationNumber": "WDD2120022A899877"
}
MOT History API – Complete Test Records
One of the most valuable features of the UK Vehicle API is access to complete MOT history data. This service covers all UK cars (excluding Northern Ireland) and provides detailed test information including:
MOT Data Includes:
- Test Date – When each MOT was conducted
- Test Result – Pass or Fail status
- Odometer Reading – Mileage at time of test
- Test Number – Official MOT test reference
- Failure Reasons – Detailed list of any failures
- Advisory Notes – Items that need attention
- Expiry Date – When the MOT certificate expires
MOT History Response Example
[
{
"TestDate": "8 November 2016",
"ExpiryDate": "16 November 2017",
"Result": "Pass",
"Odometer": "61,706 miles",
"TestNumber": "2754 6884 4000",
"FailureReasons": [],
"Advisories": []
},
{
"TestDate": "8 November 2016",
"Result": "Fail",
"Odometer": "61,703 miles",
"TestNumber": "5901 3690 4542",
"FailureReasons": [
"Nearside Rear Brake pipe excessively corroded (3.6.B.2c)",
"Offside Rear Brake pipe excessively corroded (3.6.B.2c)"
],
"Advisories": []
}
]
Extended Vehicle Information with Tax Data
The API also provides enhanced vehicle information including tax and emissions data:
- Make and Registration Date
- Year of Manufacture
- CO2 Emissions – Environmental impact rating
- Tax Status – Current road tax status
- Tax Due Date – When road tax expires
- Vehicle Type Approval – EU approval classification
- Wheelplan – Axle configuration
- Weight Information – Gross vehicle weight
UK Motorcycle Support
For motorcycles registered in the UK, use the dedicated CheckMotorBikeUK endpoint. This returns motorcycle-specific information:
- Make and Model – Manufacturer and bike model
- Year of Registration
- Engine Size – Engine displacement
- Variant – Specific model variant
- Colour – Primary color
- VIN – Complete chassis number
- Engine Number – Engine identification
Motorcycle Response Example
{
"Description": "HONDA ST1300 A",
"RegistrationYear": "2005",
"CarMake": {
"CurrentTextValue": "HONDA"
},
"CarModel": {
"CurrentTextValue": "ST1300 A"
},
"EngineSize": {
"CurrentTextValue": "1261"
},
"BodyStyle": {
"CurrentTextValue": "Motorbike"
},
"FuelType": {
"CurrentTextValue": "PETROL"
},
"Colour": "YELLOW",
"VehicleIdentificationNumber": "JH2SC51A92M007472"
}
Isle of Man Vehicle Support
Vehicles registered in the Isle of Man (identified by “MN”, “MAN”, or “MANX” in the registration) return enhanced data including:
- Standard vehicle information (make, model, engine size)
- Version details – Specific trim level
- CO2 emissions – Environmental data
- Tax status – “Active” or expired
- Tax expiry date – When road tax is due
- Wheelplan – Vehicle configuration
Isle of Man Response Example
{
"Description": "HONDA JAZZ",
"RegistrationYear": 2012,
"CarMake": {
"CurrentTextValue": "HONDA"
},
"Version": "I-VTEC ES",
"Colour": "SILVER",
"Co2": "126",
"RegistrationDate": "06/07/2012",
"WheelPlan": "2-AXLE Rigid",
"Taxed": "Active",
"TaxExpiry": "31/07/2018"
}
Integration and Implementation
API Endpoint
The service is available at: https://www.regcheck.org.uk/api/reg.asmx
WSDL Definition
Access the service definition at: https://www.regcheck.org.uk/api/reg.asmx?wsdl
Authentication
All API calls require a valid username. You can obtain a test account with 10 free credits after email verification.
Sample Implementation (PHP)
<?php
$username = 'Your_Username_Here';
$regNumber = 'AB12CDE';
$xmlData = file_get_contents("https://www.regcheck.org.uk/api/reg.asmx/Check?RegistrationNumber=" . $regNumber . "&username=" . $username);
$xml = simplexml_load_string($xmlData);
$strJson = $xml->vehicleJson;
$json = json_decode($strJson);
echo "Vehicle: " . $json->Description;
echo "Year: " . $json->RegistrationYear;
echo "Fuel: " . $json->FuelType->CurrentTextValue;
?>
Use Cases for UK Vehicle API
For Businesses:
- Insurance Companies – Instant vehicle verification and risk assessment
- Car Dealers – Vehicle history checks and specifications
- Fleet Management – MOT tracking and compliance monitoring
- Automotive Marketplaces – Automated vehicle data population
- Garage Services – Customer vehicle information lookup
For Developers:
- Mobile Apps – Vehicle checking applications
- Web Platforms – Integrated vehicle lookup features
- Compliance Tools – MOT and tax reminder systems
- Data Validation – Verify vehicle registration details
Benefits of Using the UK Vehicle Registration API
- Official DVLA Data – Access to authoritative government vehicle records
- Real-time Information – Instant access to current vehicle status
- Comprehensive Coverage – Supports cars, motorcycles, and commercial vehicles
- Historical Data – Complete MOT history with detailed records
- Multiple Formats – Both XML and JSON response options
- Reliable Service – High uptime and consistent performance
- Cost Effective – Credit-based pricing with free test options
Getting Started
To begin using the UK Vehicle Registration API:
- Sign up for a free test account at regcheck.org.uk
- Verify your email address to receive 10 free credits
- Test the API with sample vehicle registration numbers
- Purchase additional credits as needed for production use
- Implement the API in your application using provided documentation
Security and Compliance
The API includes several security features:
- IP Address Restrictions – Lock access to specific IP addresses
- Credit Monitoring – Balance alerts and daily usage limits
- Secure Connections – HTTPS encryption for all API calls
- Data Protection – Compliance with UK data protection regulations
Conclusion
The UK Vehicle Registration API provides developers and businesses with comprehensive access to official DVLA data, MOT records, and vehicle specifications. Whether you’re building a consumer app for vehicle checks or integrating vehicle data into business systems, this API offers the reliability and data coverage needed for professional applications.
With support for standard UK vehicles, motorcycles, and special territories like the Isle of Man, plus detailed MOT history and tax information, the UK Vehicle Registration API is the most complete solution for accessing UK vehicle data programmatically.
Ready to get started? Visit the RegCheck website to create your free account and begin exploring UK vehicle data today.