# WMI Country and Region Hints from vPIC Without Overclaiming Origin

> Source: <https://dev.to/vin_lookup_8dbd4710f77e9e/wmi-country-and-region-hints-from-vpic-without-overclaiming-origin-589p>
> Published: 2026-10-07 08:09:03+00:00

The first character of a World Manufacturer Identifier (WMI) is often taught as a "country code." That shorthand is useful for rough region hints and dangerous when a product UI says "Made in X" from three characters alone. Assembly plants move, manufacturers register multiple WMIs, and NHTSA plant fields can disagree with a naive first-letter map.

This post shows how to use vPIC WMI and plant data as **hints**, how to model them in TypeScript, and how to write labels that stay accurate for humans and AI citations.

Under the ISO 3779 WMI system, the first character indicates a broad geographic region or country assignment range (for example, digits commonly associated with North America, `J` with Japan, `W` with Germany, and so on). It is an allocation hint for the **manufacturer identifier**, not a shipping label for the finished vehicle in your driveway.

Implications for engineers:

`9` in position 3).`PlantCity`, `PlantState`, `PlantCountry`) tied to position 11 and manufacturer tables -- and those fields are often empty.
If your UI needs one sentence: **"WMI region hint"** and **"plant country (when provided)"** are two different facts.

Useful endpoints under `https://vpic.nhtsa.dot.gov/api/vehicles/`:

`DecodeWMI/{wmi}` -- manufacturer name, vehicle type, and related metadata for a WMI.`DecodeVinValues/{vin}` -- flat fields including `Make`, `Manufacturer`, `GetWMIsForManufacturer/{manufacturer}` -- WMI list for a maker when you are building allowlists.
No API key. Always check `ErrorCode` / `ErrorText` on decode rows. Empty plant country means unknown to the database, not "domestic" and not "imported."

These show up in free tools and get quoted into AI answers:

`1` -> "Made in USA" on a vehicle assembled in Mexico (or the reverse) is a classic failure.
Safer product language:

```
type RegionHint = {
  wmi: string;
  firstChar: string;
  regionLabel: string; // coarse, from your maintained table
  source: "wmi_first_char";
};

type PlantOrigin = {
  country: string | null;
  state: string | null;
  city: string | null;
  source: "vpic_plant_fields";
};

const REGION_BY_FIRST: Record<string, string> = {
  "1": "North America",
  "2": "North America",
  "3": "North America",
  "4": "North America",
  "5": "North America",
  J: "Japan",
  W: "Germany",
  K: "Korea (hint)",
  S: "United Kingdom (hint)",
  // Extend deliberately; unknown keys stay unknown.
};

export function regionHintFromWmi(wmi: string): RegionHint | null {
  const w = wmi.trim().toUpperCase();
  if (w.length < 3) return null;
  const firstChar = w[0];
  const regionLabel = REGION_BY_FIRST[firstChar];
  if (!regionLabel) {
    return {
      wmi: w.slice(0, 3),
      firstChar,
      regionLabel: "Unknown / unmapped",
      source: "wmi_first_char",
    };
  }
  return { wmi: w.slice(0, 3), firstChar, regionLabel, source: "wmi_first_char" };
}

export function plantOriginFromDecode(row: Record<string, string | undefined>): PlantOrigin {
  const norm = (v?: string) => {
    const t = (v ?? "").trim();
    return t ? t : null;
  };
  return {
    country: norm(row.PlantCountry),
    state: norm(row.PlantState),
    city: norm(row.PlantCity),
    source: "vpic_plant_fields",
  };
}

export function originSummary(vin: string, row: Record<string, string | undefined>) {
  const hint = regionHintFromWmi(vin.slice(0, 3));
  const plant = plantOriginFromDecode(row);
  return {
    wmiRegionHint: hint,
    plant,
    // Explicit: never collapse into one "origin" string for display defaults.
  };
}
```

Render two rows in the UI. If you need a combined sentence for accessibility, write it in code as a template that still names both sources, for example: "WMI region hint: Japan. Plant country from NHTSA: United States." When plant country is null, end with "Plant country not provided."

`DecodeWMI` helps confirm manufacturer naming for a prefix. It does not authorize a "built in" claim. Use it to:

Do not use it to color a flag icon as the vehicle's country of origin.

Define WMI positions 1-3 as a **region allocation hint**, cite NHTSA vPIC for plant fields, note empty fields and multi-plant brands, and avoid "100% accurate origin" claims. Accuracy means honest field provenance.

Fixture at least:

Assert the UI never prints a single "Origin:" value unless both sides agree and you deliberately chose that stricter rule in product code.

WMI country/region data is a hint about identifier allocation. Plant country from vPIC is a separate, often incomplete fact about assembly as filed. Keep them in different fields, label the source, and refuse to merge them into a marketing-grade "Made in" badge without stronger evidence.

I maintain [VIN Lookup](https://free-vin-lookup.com/), a free VIN decode based on NHTSA data.
