carstat-app VIN Decoding API

Decode a VIN into its manufacturer, model, model year, origin and build plant. It answers for vehicle classes the specification catalog does not cover.

Operations 1

GET /v1/vin-decode/{vin} Decode a VIN #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/carstat-app:carstat-app-vin-decoding-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

carstat-app-vin-decoding-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: REST API Reference VIN Decoding API
  version: v1
  description: 'API for accessing vehicle specifications, NHTSA recalls, and NHTSA safety ratings. All three data verticals share the same discoverable browsing pattern: list available years → list makes for a year → list models for a year + make → fetch data.'
  x-rate-limit:
    requests: 120
    period: minute
    description: shared by REST and MCP across all account credentials
  x-logo:
    url: logo.svg
    backgroundColor: '#FFFFFF'
    href: /
  contact:
    name: Carstat API Support
    email: support@carstat.app
servers:
- url: https://api.carstat.app
  description: Production server
security:
- bearer_auth: []
tags:
- name: VIN Decoding
  description: Decode a VIN into its manufacturer, model, model year, origin and build plant. It answers for vehicle classes the specification catalog does not cover.
paths:
  /v1/vin-decode/{vin}:
    get:
      summary: Decode a VIN
      tags:
      - VIN Decoding
      description: Decodes a VIN into the vehicle it identifies — manufacturer, model, model year, country of manufacture, vehicle class, series/trim labels and the build plant.
      operationId: decodeVin
      security:
      - bearer_auth: []
      parameters:
      - name: vin
        in: path
        description: Vehicle Identification Number (VIN), a 17-character string that uniquely identifies a vehicle
        required: true
        example: 4T1BF1FK5CU123456
        schema:
          type: string
      responses:
        '200':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/vin_decode_response'
        '402':
          description: Insufficient prepaid credits; the query is not charged
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/insufficient_credits_error'
        '503':
          description: Query pricing is temporarily unavailable; the query is not charged
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '401':
          description: unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '403':
          description: No activated prepaid credits or account under review
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '422':
          description: Returned when the VIN cannot be decoded at all, for example an unrecognised manufacturer prefix or an incorrect VIN length
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '400':
          description: VIN could not be decoded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
components:
  schemas:
    error:
      type: object
      properties:
        error:
          type: string
          description: Error message
      required:
      - error
    insufficient_credits_error:
      type: object
      properties:
        error:
          type: string
          description: Error message
          example: Insufficient credits. Please top up your balance.
        code:
          type: string
          enum:
          - insufficient_credits
          description: Top up your prepaid balance to continue querying
      required:
      - error
      - code
    vin_decode_response:
      type: object
      description: 'A decoded VIN. Returned by GET /v1/vin-decode/{vin}, which performs no specification lookup: use it to identify or validate a VIN cheaply, and for vehicles the specification catalog does not cover. Every field is decoded from the VIN itself: the vehicle it identifies, the registered manufacturer and origin, the vehicle class, the VIN''s own series/trim labels, the engine manufacturer, the check-digit verification and the manufacturing (build) plant. Body type, doors, drivetrain, fuel and engine specifications are not included: those are vehicle specifications, available from the specification endpoints. Each field is null when it cannot be determined from the VIN.'
      properties:
        vin:
          type: string
          description: The VIN that was decoded, upper-cased.
        errors:
          type: array
          items:
            type: string
          description: Non-fatal VIN validation warnings, if any.
        make:
          type:
          - string
          - 'null'
          description: Manufacturer decoded from the VIN
        model:
          type:
          - string
          - 'null'
          description: Model decoded from the VIN, normalised to the name used in the catalog. Null when the VIN identifies the manufacturer but not a specific model.
        year:
          type:
          - integer
          - 'null'
          description: Model year decoded from VIN position 10
        wmi:
          type:
          - string
          - 'null'
          description: World Manufacturer Identifier (VIN positions 1-3).
        manufacturer:
          type:
          - string
          - 'null'
          description: Registered manufacturer name, e.g. "TESLA, INC." — distinct from the vehicle make/brand.
        region:
          type:
          - string
          - 'null'
          description: Geographic region of manufacture, e.g. "ASIA", "NORTH AMERICA", "EUROPE".
        country:
          type:
          - string
          - 'null'
          description: Manufacturing country decoded from the VIN/WMI.
        vehicle_type:
          type:
          - string
          - 'null'
          description: Vehicle class registered for this VIN, e.g. "Passenger Car", "Truck", "Multipurpose Passenger Vehicle (MPV)". A broader classification than the body type in the spec candidates.
        series:
          type:
          - string
          - 'null'
          description: Vehicle series / sub-model as decoded from the VIN.
        trim:
          type:
          - string
          - 'null'
          description: Trim level as decoded from the VIN.
        engine_manufacturer:
          type:
          - string
          - 'null'
          description: Company that built the engine, which is not always the vehicle's make. Not available for all manufacturers.
        check_digit:
          type:
          - object
          - 'null'
          description: Verification of the VIN's check digit (position 9), which is derived from the other 16 characters. A mismatch usually means the VIN was mistyped or transcribed incorrectly; `expected` gives the character the rest of the VIN implies. Decoding still proceeds, since some regions do not use a check digit.
          properties:
            actual:
              type:
              - string
              - 'null'
              description: Check digit character present in the supplied VIN (VIN position 9).
            expected:
              type:
              - string
              - 'null'
              description: Check digit character the rest of the VIN implies.
            is_valid:
              type:
              - boolean
              - 'null'
              description: Whether the supplied check digit matches the expected one.
        plant:
          type:
          - object
          - 'null'
          description: Manufacturing (build) plant decoded from the VIN. Null when the VIN does not encode a plant for this vehicle (not available for all manufacturers).
          properties:
            country:
              type:
              - string
              - 'null'
              description: Plant country.
            city:
              type:
              - string
              - 'null'
              description: Plant city.
            state:
              type:
              - string
              - 'null'
              description: Plant state or province. Not available for all plants.
            code:
              type:
              - string
              - 'null'
              description: Plant code (VIN position 11).
            manufacturer:
              type:
              - string
              - 'null'
              description: Plant operator/manufacturer.
      required:
      - vin
      - errors
      - make
      - model
      - year
      - wmi
      - manufacturer
      - region
      - country
      - vehicle_type
      - series
      - trim
      - engine_manufacturer
      - check_digit
      - plant
  securitySchemes:
    bearer_auth:
      type: http
      scheme: bearer
      bearerFormat: API Token
      description: API token authentication. Get your token from the dashboard.