AMC Eagle

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

GET https://amceagle.com/api/v1/vin/2CCCK386XJB700100

Endpoints

Free, no key or sign-up. Every response is JSON, with CORS open to any website.

RequestReturns
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/codesEvery 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

FieldTypeMeaning
vinstringThe VIN as decoded: uppercased, spaces and dashes removed.
validbooleanThe check digit matches (17-character VINs) and no position is a known-bad code.
formatstring"17" for 1981–1988, "13" for 1980.
familystring or null"eagle", "amc" (another AMC car), "jeep" (an AMC-era Jeep) or null (not an AMC VIN).
decodedbooleantrue for an Eagle. false for any other AMC car or Jeep, which only get the shared positions.
summarystringOne plain-English line, e.g. "1988 AMC Eagle wagon with the 4.2 L six, automatic, built in Brampton".
yearnumber or nullModel year.
make, model, series, body, trim, engine, transmissionstring or nullDecoded values; null when not decoded or not documented.
plantstring or nullAssembly plant.
checkDigitobject or null{ valid, expected } for 17-character VINs; null for 1980 VINs, which have no check digit.
positionsarrayEvery position: { pos, code, label, value, status, note }. status is ok, warn, bad or unknown.
warningsarray of stringsAnything marked warn or bad, as readable sentences.
decoderUrlstringThe same VIN on the visual decoder page.
apiVersionnumberAlways 1 on /api/v1/.

Errors and limits

Errors come back as {"error": "...", "message": "..."} with these status codes:

StatuserrorWhen
400invalid_vinWrong length, or characters a VIN never uses (I, O, Q, symbols). The message says which.
404not_foundUnknown path.
405method_not_allowedOnly GET (and OPTIONS for CORS preflight).
429rate_limitedMore than 60 requests in a minute from one caller. Wait retryAfter seconds (also in the Retry-After header).
500server_errorSomething 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.