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/