---
title: Decode and Validate VIN API
slug: decode-and-validate-vin-api
url: https://apyhub.com/corsair96/service/decode-and-validate-vin-api
provider: API Forge
categories: [Model Kit, Verification Kit]
tags: [vin-decoding, vehicle-validation, nhtsa, automotive-data, recall-checks]
auth: api_key
version: 1.0.0
service_type: sync
endpoints: 4
atoms: 5-150
mcp: true
---

# Decode and Validate VIN API

Validate VINs, decode vehicle details, and list NHTSA recall campaigns. Useful for intake forms, inventory systems, and automotive data checks.

## Endpoints

| Method | URL | Description | Atoms |
| --- | --- | --- | --- |
| GET | `https://api.eu.apyhub.com/corsair96/decode-and-validate-vin-api/vin/decode` | What it does Decodes a VIN and returns a JSON object with the decoded vehicle details, validation f… | 25 |
| GET | `https://api.eu.apyhub.com/corsair96/decode-and-validate-vin-api/vin/recalls` | What it does Returns NHTSA recall campaign data for the VIN you provide, along with basic vehicle d… | 35 |
| POST | `https://api.eu.apyhub.com/corsair96/decode-and-validate-vin-api/vin/batch` | What it does Decodes up to 50 VINs in a single request and returns a per-VIN validation result plus… | 150 |
| GET | `https://api.eu.apyhub.com/corsair96/decode-and-validate-vin-api/vin/validate` | What it does Validates a VIN locally and returns a JSON object describing whether it is valid, alon… | 5 |

## Endpoint reference

### Decode a VIN

`GET https://api.eu.apyhub.com/corsair96/decode-and-validate-vin-api/vin/decode` · 25 atoms · accepts `application/json` · returns `application/json`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `vin` | query | string | yes | Example: `1HGCM82633A004352`. |
| `modelYear` | query | integer | no | Example: `2003`. |

#### Quickstart

Checks a VIN by sending it as a query parameter and returns the decoded vehicle details.

```bash
curl -X GET "https://api.eu.apyhub.com/corsair96/decode-and-validate-vin-api/vin/decode?vin=1HGCM82633A004352" \
  -H "apy-token: $APY_TOKEN"
```

#### What you'll get back

Returns a JSON object with `vin`, `valid`, `vehicle`, `validation`, `source`, and `cached` fields. `vehicle` is an object with the decoded vehicle details, and `validation` is an object with `checkDigitValid` and `warnings`.

```json
{
  "vin": "1HGCM82633A004352",
  "valid": true,
  "vehicle": {
    "make": "HONDA",
    "model": "Accord",
    "modelYear": 2003,
    "series": "EX",
    "trim": "EX",
    "bodyClass": "Sedan/Saloon",
    "vehicleType": "PASSENGER CAR",
    "doors": 4,
    "driveType": "FWD/Front-Wheel Drive",
    "fuelType": "Gasoline",
    "engine": {
      "cylinders": 4,
      "displacementL": 2.4,
      "horsepower": 160
    },
    "transmission": "Automatic",
    "plant": {
      "city": "MARYSVILLE",
      "country": "UNITED STATES (USA)",
      "company": "HONDA OF AMERICA MFG., INC."
    }
  },
  "validation": {
    "checkDigitValid": true,
    "warnings": []
  },
  "source": "nhtsa-vpic",
  "cached": false
}
```

### List NHTSA recall campaigns

`GET https://api.eu.apyhub.com/corsair96/decode-and-validate-vin-api/vin/recalls` · 35 atoms · accepts `application/json` · returns `application/json`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `vin` | query | string | yes | Example: `1HGCM82633A004352`. |

#### Quickstart

Look up recall information for a VIN using the required `vin` query parameter.

```bash
curl -X GET "https://api.eu.apyhub.com/corsair96/decode-and-validate-vin-api/vin/recalls?vin=1HGCM82633A004352" \
  -H "apy-token: $APY_TOKEN"
```

#### What you'll get back

Returns a JSON object with `vin` (string), `vehicle` (object), `recallsAvailable` (boolean), `count` (integer), `recalls` (array), `source` (string), `cached` (boolean), and `warnings` (array of strings).

```json
{
  "vin": "1HGCM82633A004352",
  "vehicle": {
    "make": "Honda",
    "model": "Accord",
    "modelYear": 2003
  },
  "recallsAvailable": true,
  "count": 1,
  "recalls": [],
  "source": "nhtsa-recalls",
  "cached": false,
  "warnings": []
}
```

### Decode up to 50 VINs

`POST https://api.eu.apyhub.com/corsair96/decode-and-validate-vin-api/vin/batch` · 150 atoms · accepts `application/json` · returns `application/json`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `vins` | body | array of string | yes |  |
| `modelYear` | body | integer | no | Optional model year applied to every VIN. Must be 1981 or later and no later than next year. |

#### Quickstart

Decode and validate one or more VINs with the required `vins` array.

```bash
curl -X POST "https://api.eu.apyhub.com/corsair96/decode-and-validate-vin-api/vin/batch" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"vins":["1HGCM82633A004352"]}'
```

#### What you'll get back

Returns a JSON object with `count` as an integer, `source` as the string `nhtsa-vpic`, and `results` as an array of per-VIN validation results. Each result includes the `vin` string, `valid` boolean, and may also include `error`, `message`, `vehicle`, and `validation`.

```json
{
  "count": 1,
  "source": "nhtsa-vpic",
  "results": [
    {
      "vin": "1HGCM82633A004352",
      "valid": true
    }
  ]
}
```

### Validate a VIN locally

`GET https://api.eu.apyhub.com/corsair96/decode-and-validate-vin-api/vin/validate` · 5 atoms · accepts `application/json` · returns `application/json`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `vin` | query | string | yes | Example: `1HGCM82633A004352`. |

#### Quickstart

Check a VIN by passing it as a query parameter.

```bash
curl -X GET "https://api.eu.apyhub.com/corsair96/decode-and-validate-vin-api/vin/validate?vin=1HGCM82633A004352" \
  -H "apy-token: $APY_TOKEN"
```

#### What you'll get back

Returns a JSON object with these top-level fields: `vin` (string), `valid` (boolean), `errors` (array of strings), `length` (integer), `region` (string or null), `warnings` (array of strings), `modelYear` (integer or null), `structure` (object or null), `checkDigit` (object), and `modelYearAmbiguous` (boolean).

The `checkDigit` object includes `computed`, `provided`, `valid`, and `applicable`. The `structure` object, when present, includes `wmi`, `vds`, `checkDigit`, `modelYearCode`, `plantCode`, and `serial`.

```json
{
  "vin": "1HGCM82633A004352",
  "valid": true,
  "errors": [],
  "length": 17,
  "region": "north-america",
  "warnings": [],
  "modelYear": 2003,
  "structure": {
    "wmi": "1HG",
    "vds": "CM826",
    "checkDigit": "3",
    "modelYearCode": "3",
    "plantCode": "A",
    "serial": "004352"
  },
  "checkDigit": {
    "computed": "3",
    "provided": "3",
    "valid": true,
    "applicable": true
  },
  "modelYearAmbiguous": false
}
```

## About

## What it does
VIN Decoder validates a vehicle identification number and returns decoded vehicle details from the VIN. Send a 17-character VIN, and get back whether it is valid, whether the check digit matches, and what vehicle data NHTSA VPIC can decode from it.

Use the GET decode endpoint when you want a single VIN checked and decoded. The response includes the VIN, a `valid` flag, a `cached` flag, the `source`, a `validation` object with `checkDigitValid` and `warnings`, and a `vehicle` object with fields such as `make`, `model`, `modelYear`, `series`, `trim`, `bodyClass`, `vehicleType`, `doors`, `driveType`, `fuelType`, `engine`, `transmission`, and `plant`. If you pass `modelYear`, it is applied as a query parameter for decoding.

Use the local validation endpoint when you only need structural VIN checks. It returns the VIN, `valid`, `length`, `checkDigit`, `structure`, `modelYear`, `modelYearAmbiguous`, `region`, `errors`, and `warnings`. That makes it useful for form validation, intake workflows, and filtering bad VINs before you call downstream systems.

For batch jobs, send up to 50 VINs in one request. The batch decode endpoint returns a `count` and a `results` array, where each item includes the VIN, `valid`, optional `error` and `message`, and, when available, the decoded `vehicle` and `validation` data. The recall endpoint uses a VIN to list NHTSA recall campaigns and returns `recallsAvailable`, `count`, `recalls`, `vehicle`, `warnings`, `cached`, and `source`.

## Usage

Base URL: `https://api.eu.apyhub.com` (default region — see
`GET https://apyhub.com/api/public/regions` for the rest).

Authenticate with an ApyHub API key in the `apy-token` header.
Full docs and a live playground: https://apyhub.com/corsair96/service/decode-and-validate-vin-api
