NHTSA vPIC API

Vehicle Product Information Catalog. Decode VINs and look up makes, models, manufacturers, and World Manufacturer Identifiers.

OpenAPI Specification

nhtsa-vpic-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: NHTSA vPIC (Vehicle Product Information Catalog) API
  description: >-
    The National Highway Traffic Safety Administration's Vehicle Product
    Information Catalog (vPIC) API decodes Vehicle Identification Numbers
    (VINs) and provides catalog data on makes, models, manufacturers, World
    Manufacturer Identifiers (WMI), and Canadian vehicle specifications. The
    service returns JSON, XML, or CSV via a public, key-less endpoint.
  version: '1'
  contact:
    name: NHTSA vPIC
    url: https://vpic.nhtsa.dot.gov/api/
  license:
    name: Public Domain
    url: https://creativecommons.org/publicdomain/mark/1.0/
externalDocs:
  description: vPIC API documentation
  url: https://vpic.nhtsa.dot.gov/api/
servers:
  - url: https://vpic.nhtsa.dot.gov/api
    description: Production
tags:
  - name: VIN Decode
    description: Decode VINs into structured vehicle data
  - name: Makes
    description: Vehicle makes
  - name: Models
    description: Vehicle models
  - name: Manufacturers
    description: Vehicle manufacturers
  - name: WMI
    description: World Manufacturer Identifier (WMI) decoding
  - name: Vehicle Variables
    description: Vehicle variable definitions
paths:
  /vehicles/DecodeVin/{vin}:
    get:
      tags: [VIN Decode]
      summary: Decode a VIN into key-value pairs
      operationId: decodeVin
      parameters:
        - name: vin
          in: path
          required: true
          schema:
            type: string
            minLength: 1
            maxLength: 17
        - name: modelyear
          in: query
          schema:
            type: integer
        - $ref: '#/components/parameters/Format'
      responses:
        '200':
          description: Decoded VIN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VinDecodeResponse'
  /vehicles/DecodeVinValues/{vin}:
    get:
      tags: [VIN Decode]
      summary: Decode a VIN as a flat (single-row) record
      operationId: decodeVinValues
      parameters:
        - name: vin
          in: path
          required: true
          schema:
            type: string
        - name: modelyear
          in: query
          schema:
            type: integer
        - $ref: '#/components/parameters/Format'
      responses:
        '200':
          description: Flat decoded VIN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VinDecodeFlatResponse'
  /vehicles/DecodeVINValuesBatch/:
    post:
      tags: [VIN Decode]
      summary: Decode up to 50 VINs in a single request
      operationId: decodeVinBatch
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                data:
                  type: string
                  description: Semicolon-delimited list of VINs (each followed by optional comma+modelyear)
                format:
                  type: string
                  enum: [json, csv, xml]
                  default: json
      responses:
        '200':
          description: Batch decode response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VinDecodeFlatResponse'
  /vehicles/GetAllMakes:
    get:
      tags: [Makes]
      summary: Get all vehicle makes
      operationId: getAllMakes
      parameters:
        - $ref: '#/components/parameters/Format'
      responses:
        '200':
          description: All vehicle makes
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MakesResponse'
  /vehicles/GetModelsForMake/{makeName}:
    get:
      tags: [Models]
      summary: Get models for a make
      operationId: getModelsForMake
      parameters:
        - name: makeName
          in: path
          required: true
          schema:
            type: string
        - $ref: '#/components/parameters/Format'
      responses:
        '200':
          description: Models
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelsResponse'
  /vehicles/GetModelsForMakeYear/make/{make}/modelyear/{year}:
    get:
      tags: [Models]
      summary: Get models for a make in a given model year
      operationId: getModelsForMakeYear
      parameters:
        - name: make
          in: path
          required: true
          schema:
            type: string
        - name: year
          in: path
          required: true
          schema:
            type: integer
        - $ref: '#/components/parameters/Format'
      responses:
        '200':
          description: Models
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelsResponse'
  /vehicles/GetAllManufacturers:
    get:
      tags: [Manufacturers]
      summary: Get all manufacturers (paged 100 per page)
      operationId: getAllManufacturers
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - $ref: '#/components/parameters/Format'
      responses:
        '200':
          description: Manufacturers
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ManufacturersResponse'
  /vehicles/DecodeWMI/{wmi}:
    get:
      tags: [WMI]
      summary: Decode a World Manufacturer Identifier
      operationId: decodeWmi
      parameters:
        - name: wmi
          in: path
          required: true
          schema:
            type: string
            minLength: 3
            maxLength: 6
        - $ref: '#/components/parameters/Format'
      responses:
        '200':
          description: WMI decode result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VinDecodeFlatResponse'
  /vehicles/GetVehicleVariableList:
    get:
      tags: [Vehicle Variables]
      summary: List vehicle variables
      operationId: getVehicleVariableList
      parameters:
        - $ref: '#/components/parameters/Format'
      responses:
        '200':
          description: Variable list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleVariablesResponse'
components:
  parameters:
    Format:
      name: format
      in: query
      schema:
        type: string
        enum: [json, csv, xml]
        default: json
  schemas:
    VinDecodeResponse:
      type: object
      properties:
        Count:
          type: integer
        Message:
          type: string
        SearchCriteria:
          type: string
        Results:
          type: array
          items:
            type: object
            properties:
              Value:
                type: ["string", "null"]
              ValueId:
                type: ["string", "null"]
              Variable:
                type: string
              VariableId:
                type: integer
    VinDecodeFlatResponse:
      type: object
      properties:
        Count:
          type: integer
        Message:
          type: string
        Results:
          type: array
          items:
            type: object
            additionalProperties: true
    MakesResponse:
      type: object
      properties:
        Count:
          type: integer
        Results:
          type: array
          items:
            type: object
            properties:
              Make_ID:
                type: integer
              Make_Name:
                type: string
    ModelsResponse:
      type: object
      properties:
        Count:
          type: integer
        Results:
          type: array
          items:
            type: object
            properties:
              Make_ID:
                type: integer
              Make_Name:
                type: string
              Model_ID:
                type: integer
              Model_Name:
                type: string
    ManufacturersResponse:
      type: object
      properties:
        Count:
          type: integer
        Results:
          type: array
          items:
            type: object
            properties:
              Mfr_ID:
                type: integer
              Mfr_Name:
                type: string
              Country:
                type: string
              VehicleTypes:
                type: array
                items:
                  type: object
    VehicleVariablesResponse:
      type: object
      properties:
        Count:
          type: integer
        Results:
          type: array
          items:
            type: object
            properties:
              ID:
                type: integer
              Name:
                type: string
              Description:
                type: string
              DataType:
                type: string
              GroupName:
                type: ["string", "null"]