Developers / VIN decoder API

VIN decoder API

Send a VIN, get the vehicle back as JSON: identity, build details and the recorded history in one call, across 30+ European countries. This page shows the decode use case end to end.

There is no separate decode endpoint to learn. Decoding is the first thing every report call does, so one endpoint covers the whole ladder: identify the car, read its build, read its recorded history. You use the same call whether you want the identity or everything.

curl -X POST https://api.mrvin.com/v1/reports \
  -H "Authorization: Bearer mrvin_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"vin": "WVWZZZ1JZ3W386752"}'
{
  "reportId": "rpt_556e24b94171603dbe7cbdd443513c35",
  "status": "complete",
  "vin": "WVWZZZ1JZ3W386752",
  "report": {
    "identity": { "make": "Volkswagen", "model": "Golf", "year": 2003 }
  }
}

The report object carries more than the identity shown here: technical data, equipment, mileage records, damage and import history appear as sections when they exist for the vehicle. The authoritative field list is the machine readable description at https://api.mrvin.com/v1/openapi, generated from the running service. Build your client to ignore fields it does not recognise and new sections cost you nothing.

What comes back for a European VIN

SectionWhat it holds
identityMake, model, model year: the decode itself.
technicalEngine, power, fuel, gearbox and related build details where the manufacturer data exists, including battery capacity for electric cars.
equipmentThe factory option list recorded against the VIN at build, where available for the make.
history sectionsRecorded odometer readings, damage records, theft flags and the import trail, drawn from official registries across 30+ European countries.
Coverage is honest by design: a section that does not exist for a vehicle is absent, not padded. If you need to know whether data exists before showing anything to a user, read sectionStatus in the response.

Decoding at volume

Bulk decoding is a loop over the same endpoint, and three properties of the API are there to make that loop cheap:

  • Repeat lookups are not billed twice. A VIN you already bought reads back free for the access window, so re checking your own stock costs nothing.
  • Rate limits are visible. Respect X-RateLimit-Remaining and the loop never trips.
  • Re-reads by reportId are free. Store the id at purchase and never pay to display the same car again.

Dealers and marketplaces typically run the loop nightly over incoming stock and cache by VIN. If your volume is large enough that this shape does not fit, tell us what you are ingesting and we will suggest one that does.

Pricing

Accounts are set up by hand and priced per account: what you pay per call depends on volume and on which sections you actually need. Your exact price is always visible at /v1/account before you build anything on top of it. There is no subscription and no minimum.

Looking for a one off check rather than an integration? The consumer side of this decoder is free to preview at the VIN decoder pages.