Archive

Posts Tagged ‘llm’

How to Integrate the RegCheck Vehicle Lookup #API with #OpenAI Actions

In today’s AI-driven world, connecting specialized APIs to large language models opens up powerful possibilities. One particularly useful integration is connecting vehicle registration lookup services to OpenAI’s custom GPTs through Actions. In this tutorial, we’ll walk through how to integrate the RegCheck API with OpenAI Actions, enabling your custom GPT to look up vehicle information from over 30 countries.

What is RegCheck?

RegCheck is a comprehensive vehicle data API that provides detailed information about vehicles based on their registration numbers (license plates). With support for countries including the UK, USA, Australia, and most of Europe, it’s an invaluable tool for automotive businesses, insurance companies, and vehicle marketplace platforms.

Why Integrate with OpenAI Actions?

OpenAI Actions allow custom GPTs to interact with external APIs, extending their capabilities beyond text generation. By integrating RegCheck, you can create a GPT assistant that:

  • Instantly looks up vehicle specifications for customers
  • Provides insurance quotes based on real vehicle data
  • Assists with vehicle valuations and sales listings
  • Answers detailed questions about specific vehicles

Prerequisites

Before you begin, you’ll need:

  • An OpenAI Plus subscription (for creating custom GPTs)
  • A RegCheck API account with credentials
  • Basic familiarity with OpenAPI specifications

Step-by-Step Integration Guide

Step 1: Create Your Custom GPT

Navigate to OpenAI’s platform and create a new custom GPT. Give it a name like “Vehicle Lookup Assistant” and configure its instructions to handle vehicle-related queries.

Step 2: Add the OpenAPI Schema

In your GPT configuration, navigate to the “Actions” section and add the following OpenAPI specification:

yaml

openapi: 3.0.0
info:
  title: RegCheck Vehicle Lookup API
  version: 1.0.0
  description: API for looking up vehicle registration information across multiple countries
servers:
  - url: https://www.regcheck.org.uk/api/json.aspx

paths:
  /Check/{registration}:
    get:
      operationId: checkUKVehicle
      summary: Get details for a vehicle in the UK
      parameters:
        - name: registration
          in: path
          required: true
          schema:
            type: string
          description: UK vehicle registration number
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object

  /CheckSpain/{registration}:
    get:
      operationId: checkSpainVehicle
      summary: Get details for a vehicle in Spain
      parameters:
        - name: registration
          in: path
          required: true
          schema:
            type: string
          description: Spanish vehicle registration number
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object

  /CheckFrance/{registration}:
    get:
      operationId: checkFranceVehicle
      summary: Get details for a vehicle in France
      parameters:
        - name: registration
          in: path
          required: true
          schema:
            type: string
          description: French vehicle registration number
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object

  /VinCheck/{vin}:
    get:
      operationId: checkVehicleByVin
      summary: Get details for a vehicle by VIN number
      parameters:
        - name: vin
          in: path
          required: true
          schema:
            type: string
          description: Vehicle Identification Number
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object

Note: You can expand this schema to include additional endpoints for other countries as needed. The RegCheck API supports over 30 countries.

Step 3: Configure Authentication

  1. In the Authentication section, select Basic authentication
  2. Enter your RegCheck API username
  3. Enter your RegCheck API password
  4. OpenAI will securely encrypt and store these credentials

The authentication header will be automatically included in all API requests made by your GPT.

Step 4: Test Your Integration

Use the built-in test feature in the Actions panel to verify the connection:

  1. Select the checkUKVehicle operation
  2. Enter a test registration like YYO7XHH
  3. Click “Test” to see the response

You should receive a JSON response with vehicle details including make, model, year, engine size, and more.

Step 5: Configure GPT Instructions

Update your GPT’s instructions to effectively use the new Actions:

You are a vehicle information assistant. When users provide a vehicle 
registration number, use the appropriate CheckVehicle action based on 
the country. Present the information in a clear, user-friendly format.

Always ask which country the registration is from if not specified.
Provide helpful context about the vehicle data returned.

Example Use Cases

Once integrated, your GPT can handle queries like:

User: “What can you tell me about UK registration YYO7XHH?”

GPT: [Calls checkUKVehicle action] “This is a 2007 Peugeot 307 X-line with a 1.4L petrol engine. It’s a 5-door manual transmission vehicle with right-hand drive…”

User: “Look up Spanish plate 0075LTJ”

GPT: [Calls checkSpainVehicle action] “Here’s the information for that Spanish vehicle…”

Best Practices and Considerations

API Limitations

  • The RegCheck API is currently in BETA and may change without notice
  • Consider implementing error handling in your GPT instructions
  • Be aware of rate limits on your API account

Privacy and Security

  • Never expose API credentials in your GPT’s instructions or responses
  • Inform users that vehicle lookups are being performed
  • Comply with data protection regulations in your jurisdiction

Optimizing Performance

  • Cache frequently requested vehicle information where appropriate
  • Use the most specific endpoint (e.g., CheckSpain vs. generic Check)
  • Consider implementing fallback behavior for failed API calls

Expanding the Integration

The RegCheck API offers many more endpoints you can integrate:

  • UKMOT: Access MOT test history for UK vehicles
  • WheelSize: Get wheel and tire specifications
  • CarSpecifications: Retrieve detailed specs by make/model/year
  • Country-specific checks: Add support for Australia, USA, and 25+ other countries

Simply add these endpoints to your OpenAPI schema following the same pattern.

Troubleshooting Common Issues

Authentication Errors: Double-check your username and password are correct in the Authentication settings.

404 Not Found: Verify the registration format matches the country’s standard format.

Empty Responses: Some vehicles may not have complete data in the RegCheck database.

Conclusion

Integrating the RegCheck API with OpenAI Actions transforms a standard GPT into a powerful vehicle information assistant. Whether you’re building tools for automotive dealerships, insurance platforms, or customer service applications, this integration provides instant access to comprehensive vehicle data from around the world.

The combination of AI’s natural language understanding with RegCheck’s extensive vehicle database creates a seamless user experience that would have required significant custom development just a few years ago.

Ready to get started? Create your RegCheck account, set up your custom GPT, and start building your vehicle lookup assistant today!

Enhanced Italian Vehicle #API: VIN Numbers Now Available for Motorcycles

We’re excited to announce a significant enhancement to the Italian vehicle data API available through Targa.co.it. Starting today, our API responses now include Vehicle Identification Numbers (VIN) for motorcycle lookups, providing developers and businesses with more comprehensive vehicle data than ever before.

What’s New

The Italian vehicle API has been upgraded to return VIN numbers alongside existing motorcycle data. This enhancement brings motorcycle data parity with our car lookup service, ensuring consistent and complete vehicle information across all vehicle types.

Sample Response Structure

Here’s what you can expect from the enhanced API response for a motorcycle lookup:

json

{
  "Description": "Yamaha XT 1200 Z Super Ténéré",
  "RegistrationYear": "2016",
  "CarMake": {
    "CurrentTextValue": "Yamaha"
  },
  "CarModel": {
    "CurrentTextValue": "XT 1200 Z Super Ténéré"
  },
  "EngineSize": {
    "CurrentTextValue": "1199"
  },
  "FuelType": {
    "CurrentTextValue": ""
  },
  "MakeDescription": {
    "CurrentTextValue": "Yamaha"
  },
  "ModelDescription": {
    "CurrentTextValue": "XT 1200 Z Super Ténéré"
  },
  "Immobiliser": {
    "CurrentTextValue": ""
  },
  "Version": "ABS (2014-2016) 1199cc",
  "ABS": "",
  "AirBag": "",
  "Vin": "JYADP041000002470",
  "KType": "",
  "PowerCV": "",
  "PowerKW": "",
  "PowerFiscal": "",
  "ImageUrl": "http://www.targa.co.it/image.aspx/@WWFtYWhhIFhUIDEyMDAgWiBTdXBlciBUw6luw6lyw6l8bW90b3JjeWNsZQ=="
}

Why VIN Numbers Matter

Vehicle Identification Numbers serve as unique fingerprints for every vehicle, providing several key benefits:

Enhanced Vehicle Verification: VINs offer the most reliable method to verify a vehicle’s authenticity and specifications, reducing fraud in motorcycle transactions.

Complete Vehicle History: Access to VIN enables comprehensive history checks, insurance verification, and recall information lookup.

Improved Business Applications: Insurance companies, dealerships, and fleet management services can now build more robust motorcycle-focused applications with complete vehicle identification.

Regulatory Compliance: Many automotive business processes require VIN verification for legal and regulatory compliance.

Technical Implementation

The VIN field has been seamlessly integrated into existing API responses without breaking changes. The new "Vin" field appears alongside existing motorcycle data, maintaining backward compatibility while extending functionality.

Key Features:

  • No Breaking Changes: Existing integrations continue to work unchanged
  • Consistent Data Structure: Same JSON structure across all vehicle types
  • Comprehensive Coverage: VIN data available for motorcycles registered in the Italian vehicle database
  • Real-time Updates: VIN information reflects the most current data from official Italian vehicle registries

Getting Started

Developers can immediately begin utilizing VIN data in their applications. The API endpoint remains unchanged, and VIN information is automatically included in all motorcycle lookup responses where available.

For businesses already integrated with our Italian vehicle API, this enhancement provides immediate additional value without requiring any code changes. New integrations can take full advantage of complete motorcycle identification data from day one.

Use Cases

This enhancement opens up new possibilities for motorcycle-focused applications:

  • Insurance Platforms: Accurate risk assessment and policy management
  • Marketplace Applications: Enhanced listing verification and buyer confidence
  • Fleet Management: Complete motorcycle inventory tracking
  • Service Centers: Precise parts identification and service history management
  • Regulatory Reporting: Compliance with Italian vehicle registration requirements

Looking Forward

This VIN integration for motorcycles represents our continued commitment to providing comprehensive Italian vehicle data. We’re constantly working to enhance our API capabilities and expand data coverage to better serve the automotive technology ecosystem.

The addition of VIN numbers to motorcycle data brings our Italian API to feature parity with leading international vehicle data providers, while maintaining the accuracy and reliability that Italian businesses have come to expect from Targa.co.it.


Ready to integrate enhanced motorcycle data into your application? Visit Targa.co.it to explore our Italian vehicle API documentation and get started with VIN-enabled motorcycle lookups today.

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

  1. Sign up at RapidAPI.com
  2. Search for “Polish Vehicle History” or “Historia Pojazdów Polskich”
  3. Subscribe to an appropriate plan
  4. Copy your API key from the “Headers” section
  5. 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/