Wenmar Open

Free VIN decoder, recalls, service bulletins, trouble codes and labour times. No key.

Documentation

API

A JSON API for VIN decoding and for looking up vehicles by year, make, model, trim and engine. It needs no key and no account, and any website may call it from a browser.

Decode a VIN

Spaces and dashes are ignored. A wrong check digit is not an error: the answer has valid set to false and a warning, because many genuine VINs from outside North America fail the check. Add?year= to use a model year of your own.

curl https://open.wenmarpro.com/v1/vin/KM8K2CAB4PU001140

Decode up to 50 VINs

The answer is a list in the order asked. Each item is a decode, or the error a single request for that VIN would have given.

curl -X POST https://open.wenmarpro.com/v1/vin/batch \
  -H 'Content-Type: application/json' \
  -d '{"vins": ["KM8K2CAB4PU001140", "1HGCM82633A004352"]}'

Pick a vehicle step by step

Each step offers only what is valid for the steps before it. A make or model may be given by name, by an alias such as chevy, or by its id. Add term= to keep only names that start with it.

curl https://open.wenmarpro.com/v1/vehicles/years
curl 'https://open.wenmarpro.com/v1/vehicles/makes?year=2019'
curl 'https://open.wenmarpro.com/v1/vehicles/models?make=honda&year=2019'
curl 'https://open.wenmarpro.com/v1/vehicles/submodels?make=honda&model=civic&year=2019'
curl 'https://open.wenmarpro.com/v1/vehicles/engines?make=honda&model=civic&year=2019&submodel=si'

Search and vehicle ids

Search reads what people type. Every vehicle has an id built from its year and names, which stays the same from one data release to the next for as long as the names do.

curl 'https://open.wenmarpro.com/v1/vehicles/search?q=2019+civic+si'
curl https://open.wenmarpro.com/v1/vehicles/2019_honda_civic_si

Everything for one vehicle

One answer with everything this server holds for a model year, asked for by vehicle id or by VIN, with links to its pages. A block the server has no data for is null, so the answer has the same members on every server. The recalls in it are a count of the campaigns that list the year, make and model, with the three newest; the whole list has its own address. The third address lists every model year of one model, newest first.

curl https://open.wenmarpro.com/v1/vehicles/2019_honda_civic/overview
curl https://open.wenmarpro.com/v1/vin/KM8K2CAB4PU001140/overview
curl https://open.wenmarpro.com/v1/models/honda/civic

Recalls

Recall campaigns from NHTSA, for the United States, and from Transport Canada, newest first. A campaign lists a year, a make and a model, so a recall listed here may apply to a vehicle of that model year. Only the manufacturer can say whether it applies to one vehicle: every answer has may_apply set to true and a lookup object with the official lookups by VIN.

The last address lists the campaigns reported on or after a day, each with the vehicles it lists. Add country=us or country=ca for one country. as_of is the day each country's data was current, and attribution holds the credit the data's licence asks for. A server run without recall data answers these addresses with 404 and the code dataset_unavailable.

curl https://open.wenmarpro.com/v1/vehicles/2019_honda_civic/recalls
curl https://open.wenmarpro.com/v1/vin/KM8K2CAB4PU001140/recalls
curl https://open.wenmarpro.com/v1/recalls/nhtsa/19V888000
curl 'https://open.wenmarpro.com/v1/recalls?make=honda&year=2019'
curl 'https://open.wenmarpro.com/v1/recalls/recent?since=2026-01-01'

Crash test ratings

NHTSA's crash test ratings for a model year, from its New Car Assessment Program. NHTSA rates a vehicle by body style and drive, so the answer often has several ratings and their stars can differ: each says which vehicle it is for, in NHTSA's words, and none is picked for you. A rating with no stars is a vehicle NHTSA lists and has not tested.

as_of is the day NHTSA's file was current. The same answer is the safety member of the overview of a vehicle. A server run without the ratings answers this address with 404 and the code dataset_unavailable.

curl https://open.wenmarpro.com/v1/vehicles/2019_honda_civic/safety

Fuel, specifications, fluids and tires

What is held about a model year beside its recalls: fuel consumption ratings from EPA and Natural Resources Canada, specifications from EPA's files, the engine oil grade EPA records with the fluids a person read from the maker's own documents, and the original-equipment tire fitments. Each has an address for a vehicle id and one for a VIN, such as /v1/vin/{vin}/fuel.

A figure is never given more exactly than it was matched: confidence says model, engine or submodel, and an engine is named only where the match settled one. By VIN, fuel, specs and fluids hold only what is for the decoded engine when the decode settles it, and engine_settled says so. Tire fitments are never narrowed. A record read by hand carries its source and the day it was checked, and an empty list means nobody has recorded it: nothing is estimated.

This server holds: /v1/vehicles/{id}/fuel, /v1/vehicles/{id}/specs, /v1/vehicles/{id}/fluids. An address it does not hold answers 404 with the code dataset_unavailable.

curl https://open.wenmarpro.com/v1/vehicles/2019_honda_civic/fuel

What owners report

What owners reported to NHTSA about a model year, as counts by component with the median mileage they gave: these are owners' reports, not verified, and a count is not a rate. A server run without the complaints answers this address with 404 and the code dataset_unavailable.

curl https://open.wenmarpro.com/v1/vehicles/2019_honda_civic/complaints

Errors

An error is a JSON object with one member, error, which has a code, a message and details. The HTTP status is the main signal.

400 invalid_vin: wrong length or illegal characters; details.suggestions lists likely corrections. 400 validation_failed: a parameter or body is missing or wrong. 404 not_found: no manufacturer is registered for the VIN's first three characters, or no vehicle has that id. 429 rate_limited: too many requests. 500 internal_error: our fault.

Limits

One address may make 600 requests a minute. That is far more than a shop needs, and it exists only so that one client cannot slow the service for everyone. Over it, the answer is 429 with a Retry-After header saying how many seconds to wait.

A batch holds at most 50 VINs. A request body may be at most 16 KB.

Caching and versions

Every answer carries the data version in an X-Data-Version header. Answers do not change until the data does, so successful GETs may be cached for a day and carry an ETag; send it back in If-None-Match to get a 304.

Fields and endpoints are only ever added. Nothing that has shipped is removed or given a new meaning.

For AI agents

An assistant that can fetch a web address can decode a VIN with one request. There is no key to ask for and nothing to sign up to.

The answer is JSON: the year, make, model, trim, engine and safety equipment, and a list of warnings. A wrong check digit is a warning, not an error.

curl https://open.wenmarpro.com/v1/vin/KM8K2CAB4PU001140

MCP server

The same lookups are tools on a Model Context Protocol server: wenmar_vin, wenmar_vehicles, wenmar_recalls and wenmar_bulletins. A recall that wenmar_recalls lists may apply to a vehicle of that year, make and model; only the manufacturer can confirm it for one VIN. A bulletin that wenmar_bulletins lists is for a model year and is not a recall. The server speaks Streamable HTTP and needs no key. Add this address as a remote server or a custom connector:

https://open.wenmarpro.com/mcp