WenmarOpen by Wenmar Pro

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

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 and wenmar_vehicles. It speaks Streamable HTTP and needs no key. Add this address as a remote server or a custom connector:

https://open.wenmarpro.com/mcp