VRM lookup API: decode a UK number plate or VIN
Last updated: 9 November 2026
POST a UK registration (vrm) or a VIN to /api/v1/vehicle/decode with your API key and you get the vehicle's identity and registration record as JSON: make, model, variant, engine, power, fuel, gearbox, body, keepers, plate changes, colour history, import and export, scrapped status and vehicle tax rates. It costs 16p a call on Pay As You Go, down to 6p on Enterprise. Sandbox keys are free and answer for the published test registrations (GET /v1/sandbox/vrms, no key needed), so you can build the whole integration before paying for a call.
The registration can be sent with or without spaces (2 to 8 letters and digits). A VIN can be 5 to 17 characters, without I, O or Q. When both are sent, the VIN is used.
Fields we do not hold for a vehicle are left out of the answer, never sent as null, so a missing field means "not held".
Prices per call
Prices in force today, per call, by package. Errors are not charged except where the API reference says so. Live keys only: sandbox calls are free.
| Endpoint | Pay As You Go | Starter | Pro | Enterprise |
|---|---|---|---|---|
| Vehicle decode POST /api/v1/vehicle/decode Make, model, engine, keepers, plate changes, colour, import, export, scrapped and tax rates for a registration or VIN. Daily cap per account: 300 / 1,000 / 3,000 / 10,000 | 16p | 10p | 8p | 6p |
| Tax and MOT POST /api/v1/vehicle/tax-mot Tax status, MOT status and the full MOT history for a registration. | 5p | 4p | 3p | 2p |
| Specification POST /api/v1/vehicle/spec The factory standard equipment for the model and the optional extras offered for it. Daily cap per account: 300 / 1,000 / 3,000 / 10,000 | 22p | 20p | 18p | 15p |
Pay As You Go has no monthly fee (top up from £10). On Starter, Pro, Enterprise the monthly fee comes back as plan credit to spend on calls, expiring at the end of each monthly billing period. Package limits per second, minute and day are on the pricing page.
Example request and answer
Every endpoint is a JSON POST under https://www.dealerpricing.co.uk/api with your key in the X-API-Key header. This request uses a sandbox test value, so it is free with a sandbox key.
curl -X POST https://www.dealerpricing.co.uk/api/v1/vehicle/decode \
-H "X-API-Key: your_sandbox_key" \
-H "Content-Type: application/json" \
-d '{"vrm":"SA22TLZ"}'The answer (long lists shortened; fields not held for a vehicle are left out):
{
"success": true,
"data": {
"vehicle": {
"vrm": "SA22TLZ",
"make": "Volkswagen",
"model": "Polo",
"model_description": "Polo Life TSi",
"variant": "Life TSI",
"series": "AW/BZ",
"year": 2022,
"registration_date": "2022-04-23",
"date_of_manufacture": "2022-04-23",
"colour": "BLUE",
"fuel_type": "PETROL",
"powertrain_type": "ICE",
"transmission": "Manual",
"gears": 5,
"drive_type": "4x2",
"body_type": "Hatchback",
"wheelplan": "2 AXLE RIGID BODY",
"engine_capacity_cc": 999,
"engine_capacity_litres": 1,
"engine_number": "DLAC899781",
"vin": "WVWZZZAWZNU040975",
"doors": 5,
"seats": 5,
"co2_emissions": 106,
"euro_status": "6d",
"power_bhp": 93.7,
"power_kw": 70,
"torque_nm": 175,
"top_speed_mph": 116,
"fuel_consumption_combined": 54.3,
"gross_weight_kg": 1620,
"kerb_weight_kg": 1097,
"mass_in_service_kg": 1219,
"previous_keepers": 0,
"colour_changes": 0,
"registration": {
"first_registered": "2022-04-23",
"first_registered_uk": "2022-04-23",
"used_before_first_registration": false,
"cherished_transfer_marker": false
},
"keeper_history": [],
"v5c_issue_dates": [
"2022-04-23"
],
"plate_changes": [],
"colour_history": {
"current": "BLUE",
"original": "BLUE",
"changes": 0
},
"import_export": {
"is_imported": false,
"imported_from_ni": false,
"imported_from_outside_eu": false,
"is_exported": false
},
"scrapped": {
"is_scrapped": false,
"is_unscrapped": false,
"certificate_of_destruction": false
},
"tax": {
"co2_g_per_km": 118,
"first_year_twelve_months_gbp": 455,
"standard_six_months_gbp": 110,
"standard_twelve_months_gbp": 200,
"premium_vehicle_six_months_gbp": 352,
"premium_vehicle_twelve_months_gbp": 640
},
"dvla": {
"make": "VOLKSWAGEN",
"model": "POLO LIFE TSI",
"body_type": "5 DOOR HATCHBACK",
"fuel_type": "PETROL",
"wheelplan": "2 AXLE RIGID BODY",
"engine_capacity_cc": 999,
"power_kw": 70,
"seats": 5,
"gross_weight_kg": 1620,
"mass_in_service_kg": 1219,
"power_to_weight_ratio": 0,
"max_braked_trailer_mass_kg": 1000,
"max_unbraked_trailer_mass_kg": 580
},
"power_ps": 95,
"torque_lb_ft": 129.2,
"top_speed_kph": 187,
"acceleration_0_100_kph": 10.8,
"fuel_consumption_combined_l_100km": 5.2,
"country_of_origin": "South Africa",
"model_introduction_date": "2021-07-05",
"model_start_date": "2021-10-13",
"classification": {
"type_approval_category": "M1",
"vehicle_class": "Car",
"taxation_class": "Car",
"market_sector_code": "AA"
},
"engine": {
"code": "1.0 95PS EU6",
"manufacturer": "Volkswagen Cars",
"cylinders": 3,
"cylinder_arrangement": "Inline",
"aspiration": "Turbocharged",
"valves_per_cylinder": 4,
"valve_gear": "DOHC",
"bore_mm": 74,
"stroke_mm": 76,
"location": "Front"
},
"dimensions": {
"length_mm": 4074,
"width_mm": 1751,
"height_mm": 1451,
"wheelbase_mm": 2552
},
"weights": {
"gross_combined_weight_kg": 1620,
"gross_train_weight_kg": 2620
},
"body": {
"wheelbase_type": "Short Wheelbase",
"axles": 2,
"fuel_tank_capacity_litres": 40,
"platform_name": "MQB A0",
"platform_shared_across_models": true
},
"safety": {
"ncap_star_rating": 5,
"ncap_adult_percent": 96,
"ncap_child_percent": 85,
"ncap_pedestrian_percent": 76,
"ncap_safety_assist_percent": 59
},
"warranty": {
"manufacturer_warranty_months": 36,
"manufacturer_warranty_miles": 60000
},
"raw": {}
}
},
"meta": {
"request_id": "req_3f9a1c0d2b7e4a5f6c8d9e01",
"cost_pence": 16,
"balance_pence": 984,
"is_sandbox": false
}
}What you get
- vehicle.make
- Make, model, model_description and variant
- vehicle.year
- Year, registration_date and date_of_manufacture
- vehicle.engine_capacity_cc
- Engine size, fuel_type, transmission, gears and drive_type
- vehicle.power_bhp
- Power (bhp and kW), torque, top speed and fuel consumption
- vehicle.co2_emissions
- CO2 emissions and euro_status
- vehicle.vin
- VIN and engine_number
- vehicle.previous_keepers
- Number of previous keepers, with keeper_history dates
- vehicle.plate_changes
- Plate changes: previous and current registration and the date
- vehicle.colour_history
- Current and original colour and the number of colour changes
- vehicle.import_export
- Imported, imported from Northern Ireland or from outside the EU, exported
- vehicle.scrapped
- Scrapped and unscrapped markers with the date
- vehicle.tax
- CO2 band, tax band and the vehicle tax rates in pounds
Every field, with its type and meaning, is in the API reference.
What developers use it for
- Fill a stock or part-exchange form from the registration instead of asking the customer for make, model and engine.
- Check that a VIN matches the registration a seller gives you.
- Flag imported, exported, scrapped and plate-changed cars before you buy.
Questions
What is a VRM lookup API?
A VRM (vehicle registration mark) lookup API takes a UK number plate and returns the vehicle it belongs to. DealerPricing's decode endpoint returns the make, model, engine, power, keepers, plate changes, colour history, import and export, scrapped markers and vehicle tax rates as JSON.
Can I look up a vehicle by VIN instead of the number plate?
Yes. Send vin instead of vrm (5 to 17 letters and digits, no I, O or Q). The same endpoint answers, at the same price. When you send both, the VIN is used.
How much does a number plate lookup cost?
16p a call on Pay As You Go, down to 6p on Enterprise. Packages: Pay As You Go 16p, Starter 10p, Pro 8p, Enterprise 6p. A vehicle that is not found is not charged.
Is there a free test key?
Sandbox keys are free and answer for the published test registrations (GET /v1/sandbox/vrms, no key needed), so you can build the whole integration before paying for a call.
Does the lookup include the MOT history?
No. The MOT history and tax status come from the tax and MOT endpoint, /api/v1/vehicle/tax-mot, which costs 5p a call on Pay As You Go.
Does it return the owner's name or address?
No. Keeper data is limited to the number of previous keepers and the dates keepers changed. No personal details of a keeper are returned.
Documentation and next steps
- Decode in the API reference
- Decode in the documentation guide
- Step-by-step guide: look up a car by registration
- API test console (send a request with your sandbox key)
- Example searches (worked examples, once you sign in)
- Error codes and what each one costs
- Create a developer account