API

One call, one answer

A tiny REST API. Send a VIN or a plate, get a flat JSON check back: make, model, mileage, accidents, title. One key, one header, fast answers.

https://api.scan-vin.com/v1
Get a key

Start in 3 steps

1
Grab a key

Sign up and copy your API key from the dashboard. One key works for testing and for live. No setup, no approval queue.

2
Make the call

Add your key in the X-Api-Key header and POST a VIN or plate to /v1/check. That is the whole integration.

3
Read the JSON

You get one flat JSON object: make, model, mileage, accidents, title. No nesting, no polling. Just read the fields.

Auth

Put your key in one header: X-Api-Key: YOUR_KEY. That is it. No Bearer token, no OAuth dance. Keep the key secret and rotate it from the dashboard whenever you like.

curl https://api.scan-vin.com/v1/vin/WBA3A5G59DNP26082 \
  -H "X-Api-Key: YOUR_API_KEY"

The call

Three endpoints, nothing more. POST a VIN or plate to run a check, GET it back by id, or decode a VIN on its own. Everything is flat JSON.

POST/v1/check
Run a check

The one you will use. POST a VIN or a plate and get the full check back in a single flat response, usually in a few seconds.

Parameters

NameTypeRequiredDescription
vinstringoptional17-character VIN. Send this or `plate`.
platestringoptionalLicense plate. Send this or `vin`.
countrystringoptionalTwo-letter country code (e.g. `FR`, `DE`). Needed when you send a `plate`.

Example

curl -X POST https://api.scan-vin.com/v1/check \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"vin": "WBA3A5G59DNP26082"}'
GET/v1/check/{check_id}
Get a check

Fetch a check you already ran by its id. Same flat object as the POST response.

Parameters

NameTypeRequiredDescription
check_idstringrequiredPath parameter. The check id we gave you (`chk_...`).

Example

curl https://api.scan-vin.com/v1/check/chk_5a1b \
  -H "X-Api-Key: YOUR_API_KEY"
GET/v1/vin/{vin}
Decode a VIN

Just want the basics? This reads a VIN and returns make, model and year. Instant, no history pull.

Parameters

NameTypeRequiredDescription
vinstringrequiredPath parameter. The 17-character VIN to decode.

Example

curl https://api.scan-vin.com/v1/vin/WBA3A5G59DNP26082 \
  -H "X-Api-Key: YOUR_API_KEY"

The response

Always the same flat shape: an `ok` flag, the `check_id`, and the car facts as top-level fields. Nothing nested for the sake of it, just read what you need.

{
  "check_id": "chk_5a1b",
  "vin": "WBA3A5G59DNP26082",
  "ok": true,
  "make": "BMW",
  "model": "320d",
  "year": 2019,
  "mileage_km": 142350,
  "accidents": 0,
  "stolen": false,
  "title": "clean",
  "checked_at": "2026-03-12T10:04:00Z"
}

When it fails

Plain HTTP codes. On an error you get a flat object with `ok: false`, a `code` and a `message` that tells you what to fix. No guessing.

CodeMessageDescription
400Bad RequestSomething is missing or wrong in your request, like no VIN and no plate.
401UnauthorizedYour key is missing or wrong. Check the X-Api-Key header.
403ForbiddenYour key can't use this call. Check your plan.
404Not FoundWe couldn't find that car or check.
429Too Many RequestsYou are going too fast. Slow down and retry after the X-RateLimit-Remaining count resets.
500Server ErrorOur side hiccupped. Try again, and ping us if it keeps happening.
{
  "ok": false,
  "code": 401,
  "error": "Unauthorized",
  "message": "The X-Api-Key header is missing or invalid."
}

Plug in our car data

Get a key and make your first call in minutes. The same key works when you go live, no code changes needed.