Endpoint
GET https://vindecodercheck.com/api/vin/{vin}
Auth: none required for the free per-IP allowance. An IPNOVA API key (free account at api.ipnova.com) applies your plan allowance instead: send it as the X-Api-Key header or the ?key= query parameter. Keyed responses carry X-Credits-Remaining and X-Credits-Used.
Plans
One key. Twelve APIs.
A free IPNOVA API account gives you 5,000 lookups a month across every API below, 60 a minute, no card, for evaluation and small projects. Paid plans from $19 a month for production volumes, with a commercial licence and a hard cap instead of overage billing.
Takes a minute. Send it as X-Api-Key or ?key=. This API costs 3 credits per call.
Without a key this API answers 100 requests a day per IP address, for evaluation and personal use. Try it: curl https://vindecodercheck.com/api/vin/1HGCM82633A004352
Example
curl https://vindecodercheck.com/api/vin/1HGCM82633A004352
{
"success": true,
"vin": "1HGCM82633A004352",
"make": "HONDA",
"model": "Accord",
"model_year": "2003",
"manufacturer": "AMERICAN HONDA MOTOR CO., INC.",
"plant_city": "MARYSVILLE",
"plant_country": "UNITED STATES (USA)",
"vehicle_type": "PASSENGER CAR",
"body_class": "Coupe",
"engine_cylinders": "6",
"displacement_l": "2.998832712",
"fuel_type_primary": "Gasoline",
"transmission_style": "Automatic",
"doors": "2",
"g_v_w_r": "Class 1C: 4,001 - 5,000 lb (1,814 - 2,268 kg)",
"trim": "EX-V6",
"error_text": "0 - VIN decoded clean. Check Digit (9th position) is correct",
"specs_page": "https://vindecodercheck.com/car/2003-honda-accord",
"recalls_on_record": 15,
"source": "NHTSA vPIC (US public domain)",
"docs": "https://vindecodercheck.com/vin-api"
}
Behaviour and limits
- 17-character VINs decode fully; partial VINs of 11+ characters are accepted for structural decoding.
- Each VIN is decoded upstream once, ever - after that it serves from our cache, so repeated integration calls are fast and place zero load on the government source.
- 100 requests a day and 20 a minute, per IP, no key needed.
- Responses are no-store; we do not log which client decoded which VIN.
- Build facts only: no ownership, title or accident data, ever.
- Machine-readable spec at /openapi.json.
- No code at all: the free embeddable VIN decoder widget puts this API on your page with one script tag.
Status codes
Every non-200 response uses the same envelope: success: false, an error flag, a machine-readable reason, a human message, and a docs link back to this page.
| Code | Reason | Meaning |
|---|---|---|
| 400 | invalid_input | Invalid VIN (wrong length, or contains the letters I, O or Q, which never appear in a VIN). |
| 401 | invalid_key | The supplied API key is unknown or revoked. |
| 429 | rate_limit | Too many requests in the last minute (Retry-After: 60). |
| 429 | daily_limit | Keyless per-IP daily cap reached. |
| 429 | credits_exhausted | Keyed monthly allowance used up. |
| 502 | upstream_unavailable | Upstream decoder (NHTSA vPIC) unavailable, try again shortly. |
Example, an invalid VIN:
{"success": false, "error": true, "reason": "invalid_input", "message": "Provide a valid 17-character VIN.", "docs": "https://vindecodercheck.com/vin-api"}