---
title: "NHTSA campaigns for a VIN, or by make, model and year"
method: GET
path: "/v1/vehicles"
---

# NHTSA campaigns for a VIN, or by make, model and year

`GET /v1/vehicles`

## Request

- Base URL: `https://api.recallsapi.com`
- URL: `https://api.recallsapi.com/v1/vehicles`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`
  - API key in header `X-Credit-Token`
  - none

Give `vin`, or `make`, `model` and `year`. `complaints` holds live NHTSA consumer complaint counts for the make, model and year: total, last 12 months, last complaint date, top 5 components, crash, fire, injury and death counts, and the public api.nhtsa.gov link. Complaints are not verified by NHTSA and a count is not a safety determination; null when NHTSA holds none or the live lookup fails or takes over 4 seconds.

## Query parameters

- `vin` string
- `make` string
- `model` string
- `year` string

## Response `200`

OK

- object
  - `vehicle` object: The vehicle as asked; for a VIN, as NHTSA vPIC decoded it.
    - `make` string
    - `model` string
    - `year` string
    - `vin` string, nullable: The VIN as checked (uppercase); null for a make, model and year lookup
    - `check_digit_ok` boolean: VIN lookups only: whether the 9th character matches the North American check digit (a false value does not block the lookup)
    - `canonical` object: The vehicle as recallsapi.com lists it, whichever spelling was asked: every spelling of a make and model answers the same.
      - `make` string: The make as its records print it (Mercedes-Benz, Ford)
      - `model` string, nullable: The model in its canonical spelling: NHTSA vPIC's when vPIC lists the model (F-250), else the spelling the records print most; null for records that do not state the model
      - `year` string
      - `key` string: The canonical make|model|year key, as in the reasons of each match
      - `page` string, nullable: The make, model and year page on recallsapi.com; null when no campaign is on record for it
  - `note` string
  - `matches` Match[]
    - `confidence` 'exact' | 'strong' | 'possible': exact: barcode or NDC package code; strong: identifier confirmed by brand or a distinctive model; possible: brand and name overlap or a weak identifier
    - `reasons` string[]
    - `recall` Recall
      - `id` string
      - `agency` 'CPSC' | 'FDA' | 'NHTSA' | 'USDA FSIS' | 'US Coast Guard' | 'FAA' | 'HUD' | 'NIOSH' | 'MSHA'
      - `source` 'cpsc' | 'fda_food' | 'fda_drug' | 'fda_device' | 'nhtsa' | 'fsis' | 'uscg' | 'faa' | 'hud' | 'niosh' | 'msha' | 'fda_press' | 'fda_hfcs' | 'fda_ires'
      - `source_id` string: The agency recall number, Federal Register document number, or a stable slug for notices without a number
      - `category` 'consumer_product' | 'food' | 'drug' | 'device' | 'vehicle' | 'vehicle_equipment' | 'tire' | 'child_seat' | 'meat_poultry' | 'boat' | 'aircraft' | 'manufactured_home' | 'respirator' | 'mine_equipment' | 'unclassified' | 'cosmetic' | 'tobacco' | 'biologic' | 'veterinary'
      - `title` string
      - `description` string, nullable
      - `hazard` string, nullable
      - `remedy` string, nullable
      - `classification` string, nullable: FDA and FSIS class (Class I, II, III), NHTSA recall type, Coast Guard recall type (Boat, Engine or equipment), Federal Register document type, or notice type
      - `status` string, nullable
      - `firms` string[]
      - `products` string[]
      - `distribution` string, nullable
      - `units` string, nullable
      - `flags` string[]
      - `recall_date` string, date, nullable
      - `report_date` string, date, nullable
      - `url` string, uri: Agency notice
      - `source_url` string, uri: Machine-readable source record
      - `first_seen` string, date-time: When recallsapi.com first stored this record
      - `as_of` string, date-time: When recallsapi.com last saw this record change
      - `identifiers` object[]
        - `kind` string
        - `value` string
        - `raw` string
  - `candidates` object[]: Empty unless matches is empty. Then: the models of the same year whose names start with the vehicle's model (or match vPIC's series) in the recall records, model level, each with its campaign count that year and its page on recallsapi.com. No campaign under the vehicle's own name does not mean the vehicle has no recall (see note).
    - `make` string
    - `model` string, nullable: Null for records that do not state the model
    - `year` string
    - `key` string: The canonical make|model|year key
    - `page` string: The model-year page on recallsapi.com
    - `campaigns` integer: Campaigns filed for that model and year (model level)
  - `complaints` object, nullable: Live consumer complaint counts from NHTSA for this make, model and year. Complaints are submitted by consumers and not verified by NHTSA; a count is not a safety determination. Null when NHTSA holds none or the live lookup fails or takes over 4 seconds.
    - `source` string
    - `make` string
    - `model` string
    - `year` string
    - `complaints_total` integer
    - `complaints_last_12_months` integer: By the date each complaint was filed
    - `last_complaint_date` string, nullable: ISO date the newest complaint was filed
    - `components` object: The 5 most-complained-about components, lowercased, with complaint counts
    - `crashes` integer
    - `fires` integer
    - `injuries` integer
    - `deaths` integer
    - `url` string: The public api.nhtsa.gov complaints URL for this vehicle
    - `truncated` boolean: Present and true only if NHTSA sent fewer records than its own count; per-record counts then cover the records sent
    - `note` string

## Other responses

- `400`: Invalid input
- `401`: Missing or invalid API key
- `402`: Payment Required: x402 v2 payment requirements (scheme exact, USDC on Base, amount in base units, payTo) in the PAYMENT-REQUIRED header as base64 JSON, and the same object as the body
- `429`: Daily quota reached

---

[API](https://skmtc.dev/recallsapi/apis/recallsapi-com.md) · [All operations](https://skmtc.dev/recallsapi/apis/recallsapi-com/llms.txt) · [OpenAPI document](https://skmtc.dev/recallsapi/apis/recallsapi-com/revisions/2501df40ea54?raw)
