AMC Eagle AMC Eagle VIN decoder API
AMC Eagle VIN decoder API
Decode a 1980–1988 AMC Eagle VIN with one URL. Free, no key, JSON back.
Try it
Endpoints
Free, no key or sign-up. Every response is JSON, with CORS open to any website.
| Request | Returns |
|---|---|
GET /api/v1/vin/{vin} | The decoded VIN. 17 characters for 1981–1988, 13 for 1980. Case, spaces and dashes don't matter. |
GET /api/v1/codes | Every code table the decoder uses, if you'd rather decode yourself. |
GET /api/v1/health | {"ok": true} when the API is up. |
Examples
curl https://amceagle.com/api/v1/vin/2CCCK386XJB700100
const res = await fetch("https://amceagle.com/api/v1/vin/" + encodeURIComponent(vin));
const car = await res.json();
if (res.ok) console.log(car.summary); // "1988 AMC Eagle wagon with the 4.2 L six, ..."
else console.log(car.message); // why the VIN was rejected
What it decodes
- AMC Eagle, 1980–1988: everything the VIN holds: year, engine, transmission and 4WD system, body, trim, check digit, plant and serial.
- Other AMC cars and AMC-era Jeeps: recognised as not an Eagle (
decoded: false), with only the positions every AMC VIN shares: year, plant, check digit and serial.
The VIN decoder page uses the same code, so the page and the API always agree. The codes, sources and open questions are listed there.
Response fields
| Field | Type | Meaning |
|---|---|---|
vin | string | The VIN as decoded: uppercased, spaces and dashes removed. |
valid | boolean | The check digit matches (17-character VINs) and no position is a known-bad code. |
format | string | "17" for 1981–1988, "13" for 1980. |
family | string or null | "eagle", "amc" (another AMC car), "jeep" (an AMC-era Jeep) or null (not an AMC VIN). |
decoded | boolean | true for an Eagle. false for any other AMC car or Jeep, which only get the shared positions. |
summary | string | One plain-English line, e.g. "1988 AMC Eagle wagon with the 4.2 L six, automatic, built in Brampton". |
year | number or null | Model year. |
make, model, series, body, trim, engine, transmission | string or null | Decoded values; null when not decoded or not documented. |
plant | string or null | Assembly plant. |
checkDigit | object or null | { valid, expected } for 17-character VINs; null for 1980 VINs, which have no check digit. |
positions | array | Every position: { pos, code, label, value, status, note }. status is ok, warn, bad or unknown. |
warnings | array of strings | Anything marked warn or bad, as readable sentences. |
decoderUrl | string | The same VIN on the visual decoder page. |
apiVersion | number | Always 1 on /api/v1/. |
Errors and limits
Errors come back as {"error": "...", "message": "..."} with these status codes:
| Status | error | When |
|---|---|---|
| 400 | invalid_vin | Wrong length, or characters a VIN never uses (I, O, Q, symbols). The message says which. |
| 404 | not_found | Unknown path. |
| 405 | method_not_allowed | Only GET (and OPTIONS for CORS preflight). |
| 429 | rate_limited | More than 60 requests in a minute from one caller. Wait retryAfter seconds (also in the Retry-After header). |
| 500 | server_error | Something broke on our side. |
An AMC VIN that doesn't add up (a bad check digit, a code no chart lists) is not an error: it comes back 200 with valid: false and the problem marked in positions.
Stability and privacy
Stable: fields on /api/v1/ are only ever added, never renamed or removed. A breaking change would get a new /api/v2/ path.
Logged: API lookups are logged (the VIN, time, calling website or app, country, and a scrambled ID in place of your IP address) so the decoder can be improved: real VINs are how new codes get found and checked. The log is never published or sold. The decoder page is different: it decodes on your device and sends nothing.
Questions or a code the decoder gets wrong? The site is made by James Patton.