API Developers Free March 2026

VIN Decoder API for Developers — Free Vehicle Data API

Need to pull vehicle data from a VIN programmatically? The mcp.vin API takes a 17-character VIN and returns structured JSON — make, model, year, engine, transmission, plant of assembly — with a single GET request. No API key. No signup.

In this article
  1. Why use a VIN decoder API?
  2. API endpoints
  3. Response format
  4. Code examples
  5. Using as an MCP server
  6. Real-world use cases
  7. Comparison with other VIN APIs

Why Use a VIN Decoder API?

If you're building anything that touches vehicle data — a used car marketplace, a fleet management dashboard, an insurance quoting tool, a parts catalog — you need structured vehicle specs, and the VIN is the only reliable input you've got.

You could scrape the NHTSA website. That works until the markup changes and your parser breaks at 2 AM. A proper API gives you a stable JSON contract that won't shift under you.

Most VIN decoder APIs charge per request or require a monthly subscription. The mcp.vin API doesn't. It wraps the NHTSA's vPIC (Vehicle Product Information Catalog) database behind a clean REST endpoint and returns everything the NHTSA knows about that VIN.

API Endpoints

All endpoints are free and require no authentication.

Full decode
GET https://mcp.vin/api/vin/{VIN} — Returns make, model, year, engine, drivetrain, body, plant, and more.
Quick validation
GET https://mcp.vin/api/vin/{VIN}/validate — Checksum validation, WMI decode, and year detection with no API calls.
Recalls
GET https://mcp.vin/api/vin/{VIN}/recalls — Open and completed safety recalls from NHTSA.
Complaints
GET https://mcp.vin/api/vin/{VIN}/complaints — Consumer complaints filed with NHTSA.
Safety ratings
GET https://mcp.vin/api/vin/{VIN}/safety — NHTSA 5-star crash test ratings.
Fuel economy
GET https://mcp.vin/api/vin/{VIN}/fuel — EPA fuel economy data (MPG city/highway/combined).
Batch decode
POST https://mcp.vin/api/batch — Decode up to 50 VINs in a single request. Send a JSON array of VIN strings.

Response Format

Here's an actual response for VIN 5YJSA1DG9DFP14705 — a 2013 Tesla Model S:

{
  "vin": "5YJSA1DG9DFP14705",
  "make": "TESLA",
  "model": "Model S",
  "year": 2013,
  "trim": "Base",
  "body_class": "Sedan/Saloon",
  "vehicle_type": "PASSENGER CAR",
  "drive_type": "RWD/Rear-Wheel Drive",
  "fuel_type": "Electric",
  "engine_displacement_l": null,
  "engine_cylinders": null,
  "plant_city": "Fremont",
  "plant_state": "CALIFORNIA",
  "plant_country": "UNITED STATES (USA)",
  "doors": 4,
  "error_code": "0",
  "error_text": "0 - VIN decoded clean"
}

Fields that don't apply — like engine_displacement_l for an electric vehicle — come back as null. The error_code field tells you if the decode was clean. Always check error_code before trusting the other fields.

Error handling
Invalid VINs (wrong length, bad check digit, unknown pattern) still return HTTP 200 with error_code and error_text explaining what went wrong. Your code should always check error_code before using the data.

Code Examples

curl

# Decode a 2003 Honda Accord
curl -s https://mcp.vin/api/vin/1HGCM82633A004352 | jq .

# Just grab make, model, and year
curl -s https://mcp.vin/api/vin/1HGCM82633A004352 | jq '{make, model, year}'

JavaScript (fetch)

async function decodeVin(vin) {
  const res = await fetch(`https://mcp.vin/api/vin/${vin}`);
  const data = await res.json();

  if (data.error_code !== "0") {
    throw new Error(`VIN decode failed: ${data.error_text}`);
  }
  return data;
}

const vehicle = await decodeVin("5YJSA1DG9DFP14705");
console.log(`${vehicle.year} ${vehicle.make} ${vehicle.model}`);
// Output: "2013 TESLA Model S"

Python (requests)

import requests

def decode_vin(vin: str) -> dict:
    resp = requests.get(f"https://mcp.vin/api/vin/{vin}")
    resp.raise_for_status()
    data = resp.json()

    if data["error_code"] != "0":
        raise ValueError(f"VIN decode failed: {data['error_text']}")
    return data

vehicle = decode_vin("1HGCM82633A004352")
print(f"{vehicle['year']} {vehicle['make']} {vehicle['model']}")
# Output: "2003 HONDA Accord"

Python (standard library only)

import json, urllib.request

def decode_vin(vin: str) -> dict:
    url = f"https://mcp.vin/api/vin/{vin}"
    with urllib.request.urlopen(url) as resp:
        return json.loads(resp.read())

vehicle = decode_vin("5YJSA1DG9DFP14705")
print(vehicle["make"], vehicle["model"], vehicle["year"])

Using mcp.vin as an MCP Server

mcp.vin implements the Model Context Protocol (MCP), which means AI assistants like Claude can connect to it and call VIN decode tools natively. The agent sends a VIN, receives structured JSON, and can reason about the vehicle data without any custom integration code.

Claude Code (stdio)

Add to your project's .mcp.json:

{
  "mcpServers": {
    "vin-mcp": {
      "command": "npx",
      "args": ["-y", "vin-mcp"]
    }
  }
}

Claude Desktop / Remote (HTTP)

{
  "mcpServers": {
    "vin-mcp": {
      "url": "https://mcp.vin/mcp"
    }
  }
}

Four tools are available: decode_vin (full decode), validate_vin (quick check), lookup_recalls (recall search), and batch_decode (up to 50 VINs).

Real-World Use Cases

Used car marketplaces
Auto-populate listing fields when a seller enters a VIN. Catches typos, fills in specs, and ensures listings are accurate without manual data entry.
Fleet management
Decode VINs for an entire vehicle fleet to build a specs database. Track which vehicles are due for recall repairs. The batch endpoint handles up to 50 VINs per request.
Insurance quoting
Pull vehicle specs from a VIN to pre-fill quote forms. Engine size, body type, safety features, and safety ratings all affect premiums.
Parts catalogs
Map a VIN to the exact engine, transmission, and body configuration to show compatible parts. Eliminates the "does this fit my car?" guesswork.
AI agents and chatbots
Connect via MCP and let your AI agent decode VINs, check recalls, and answer vehicle questions without building a custom integration.

How It Compares to Other VIN APIs

Feature mcp.vin Typical paid APIs
Price Free $0.01–$0.50 per request
API key required No Yes
Signup required No Yes
Data source NHTSA vPIC + EPA NHTSA + proprietary
Safety ratings Yes (NHTSA) Varies
Recalls Yes Varies
Vehicle photos Yes Rare
MCP support Yes (stdio + HTTP) No
Batch decode Up to 50 Varies
Open source Yes Rarely

The main thing you won't get from mcp.vin is vehicle history data (accident reports, title changes, odometer records). That requires paid databases like Carfax or AutoCheck. For factory specs, recalls, safety ratings, and fuel economy, the free API covers everything you need.

Try the API now — no signup needed.

Decode a VIN

Related articles on mcp.vin:

Built by Andy · Build a microsite · Generate QR codes · WebMCP Directory