recallsapi-com Vehicles API

The Vehicles API from recallsapi-com — 2 operation(s) for vehicles.

Operations 2

GET /v1/vehicles/{vin} NHTSA campaigns for a VIN #
GET /v1/vehicles NHTSA campaigns for a VIN, or by make, model and year #

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/recallsapi-com:recallsapi-com-vehicles-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

recallsapi-com-vehicles-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: recallsapi.com Vehicles API
  version: 0.1.0
  summary: 'Recall records from 9 US agencies (CPSC, FDA, NHTSA, US Coast Guard, FAA and more), plus 5 early-warning sources, in one API, with product matching and catalog monitoring. USDA FSIS: 2013 to October 6, 2026 loaded; daily updates coming soon.'
  description: Every record links to its agency source with an as-of date. Matches carry a confidence level and the reasons behind it; a match is information to review, not a legal or safety determination. Sold by PrimeZen LLC.
  contact:
    name: recallsapi.com support
    email: hello@recallsapi.com
    url: https://recallsapi.com
  x-guidance: 'recallsapi.com answers whether a product or vehicle is under a US recall, from the records of 9 US agencies (CPSC, FDA, NHTSA, US Coast Guard, FAA and more). Every record carries its agency source and an as-of date.


    Start with GET /v1/check: give any of upc (UPC, EAN or GTIN barcode), model, ndc, lot, brand and name. Each match has a confidence (exact, strong or possible) and the reasons for it. A match is information to review, not a legal or safety determination, and no match does not mean a product is safe.


    GET /v1/vehicles takes vin, or make, model and year, and returns NHTSA campaigns with live NHTSA complaint counts. GET /v1/recalls searches records with q, category, source, since and until, newest first; page with next_cursor.


    Pay per call with x402, no account needed: call a paid route without an API key and it answers 402 with a PAYMENT-REQUIRED header (x402 v2, scheme exact, USDC on Base). Sign the payment and repeat the call with the PAYMENT-SIGNATURE header. Prices per call: GET /v1/check $0.02, GET /v1/recalls $0.01, GET /v1/vehicles $0.01. A call that does not succeed (any answer that is not 2xx) is not charged.


    Prepaid credit: POST /v1/credits/topup?amount=1, 5 or 20 (USD; the $1 top-up when amount is left out) is one x402 payment that returns credit_token, shown once. Send it as the X-Credit-Token header on the paid routes to draw each call from the balance with no further on-chain payment; read the balance at GET /v1/credits (free). Credit is not refundable and does not expire.


    With an API key the routes work within the plan''s limits and no payment is asked: get a free key with POST /v1/keys and an email address (the key is sent to that inbox), then send Authorization: Bearer <key> or X-API-Key: <key>. Catalog monitoring (/v1/catalogs) and the MCP server tools (POST /mcp) need a key. GET /v1/health shows each source''s freshness and is free.


    Docs: recallsapi.com/docs/agents. Contact: hello@recallsapi.com.'
  termsOfService: https://recallsapi.com/terms
servers:
- url: https://api.recallsapi.com
security:
- bearer: []
- apiKey: []
tags:
- name: Vehicles
paths:
  /v1/vehicles/{vin}:
    get:
      operationId: checkVin
      summary: NHTSA campaigns for a VIN
      description: 'Decodes the VIN with NHTSA vPIC, then answers like /v1/vehicles: campaigns plus live NHTSA consumer complaint counts (`complaints`).'
      parameters:
      - name: vin
        in: path
        required: true
        schema:
          type: string
          minLength: 17
          maxLength: 17
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  vehicle:
                    type: object
                    description: The vehicle as asked; for a VIN, as NHTSA vPIC decoded it.
                    properties:
                      make:
                        type: string
                      model:
                        type: string
                      year:
                        type: string
                      vin:
                        type:
                        - string
                        - 'null'
                        description: The VIN as checked (uppercase); null for a make, model and year lookup
                      check_digit_ok:
                        type: boolean
                        description: 'VIN lookups only: whether the 9th character matches the North American check digit (a false value does not block the lookup)'
                      canonical:
                        type: object
                        description: 'The vehicle as recallsapi.com lists it, whichever spelling was asked: every spelling of a make and model answers the same.'
                        properties:
                          make:
                            type: string
                            description: The make as its records print it (Mercedes-Benz, Ford)
                          model:
                            type:
                            - string
                            - 'null'
                            description: '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:
                            type: string
                          key:
                            type: string
                            description: The canonical make|model|year key, as in the reasons of each match
                          page:
                            type:
                            - string
                            - 'null'
                            description: The make, model and year page on recallsapi.com; null when no campaign is on record for it
                  note:
                    type: string
                  matches:
                    type: array
                    items:
                      $ref: '#/components/schemas/Match'
                  candidates:
                    type: array
                    description: '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).'
                    items:
                      type: object
                      properties:
                        make:
                          type: string
                        model:
                          type:
                          - string
                          - 'null'
                          description: Null for records that do not state the model
                        year:
                          type: string
                        key:
                          type: string
                          description: The canonical make|model|year key
                        page:
                          type: string
                          description: The model-year page on recallsapi.com
                        campaigns:
                          type: integer
                          description: Campaigns filed for that model and year (model level)
                  complaints:
                    type: object
                    nullable: true
                    description: 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.
                    properties:
                      source:
                        type: string
                      make:
                        type: string
                      model:
                        type: string
                      year:
                        type: string
                      complaints_total:
                        type: integer
                      complaints_last_12_months:
                        type: integer
                        description: By the date each complaint was filed
                      last_complaint_date:
                        type: string
                        nullable: true
                        description: ISO date the newest complaint was filed
                      components:
                        type: object
                        additionalProperties:
                          type: integer
                        description: The 5 most-complained-about components, lowercased, with complaint counts
                      crashes:
                        type: integer
                      fires:
                        type: integer
                      injuries:
                        type: integer
                      deaths:
                        type: integer
                      url:
                        type: string
                        description: The public api.nhtsa.gov complaints URL for this vehicle
                      truncated:
                        type: boolean
                        description: Present and true only if NHTSA sent fewer records than its own count; per-record counts then cover the records sent
                      note:
                        type: string
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Daily quota reached
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Vehicles
  /v1/vehicles:
    get:
      operationId: checkVehicle
      security:
      - bearer: []
      - apiKey: []
      - credit: []
      - {}
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.010000'
        protocols:
        - x402: {}
      summary: NHTSA campaigns for a VIN, or by make, model and year
      description: '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.'
      parameters:
      - name: vin
        in: query
        schema:
          type: string
          minLength: 17
          maxLength: 17
        description: 17-character VIN, decoded with NHTSA vPIC; or give make, model and year instead
      - name: make
        in: query
        schema:
          type: string
        description: Vehicle make, with the other two (when no vin is given)
      - name: model
        in: query
        schema:
          type: string
        description: Vehicle model, with the other two (when no vin is given)
      - name: year
        in: query
        schema:
          type: string
        description: Vehicle year, with the other two (when no vin is given)
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  vehicle:
                    type: object
                    description: The vehicle as asked; for a VIN, as NHTSA vPIC decoded it.
                    properties:
                      make:
                        type: string
                      model:
                        type: string
                      year:
                        type: string
                      vin:
                        type:
                        - string
                        - 'null'
                        description: The VIN as checked (uppercase); null for a make, model and year lookup
                      check_digit_ok:
                        type: boolean
                        description: 'VIN lookups only: whether the 9th character matches the North American check digit (a false value does not block the lookup)'
                      canonical:
                        type: object
                        description: 'The vehicle as recallsapi.com lists it, whichever spelling was asked: every spelling of a make and model answers the same.'
                        properties:
                          make:
                            type: string
                            description: The make as its records print it (Mercedes-Benz, Ford)
                          model:
                            type:
                            - string
                            - 'null'
                            description: '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:
                            type: string
                          key:
                            type: string
                            description: The canonical make|model|year key, as in the reasons of each match
                          page:
                            type:
                            - string
                            - 'null'
                            description: The make, model and year page on recallsapi.com; null when no campaign is on record for it
                  note:
                    type: string
                  matches:
                    type: array
                    items:
                      $ref: '#/components/schemas/Match'
                  candidates:
                    type: array
                    description: '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).'
                    items:
                      type: object
                      properties:
                        make:
                          type: string
                        model:
                          type:
                          - string
                          - 'null'
                          description: Null for records that do not state the model
                        year:
                          type: string
                        key:
                          type: string
                          description: The canonical make|model|year key
                        page:
                          type: string
                          description: The model-year page on recallsapi.com
                        campaigns:
                          type: integer
                          description: Campaigns filed for that model and year (model level)
                  complaints:
                    type: object
                    nullable: true
                    description: 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.
                    properties:
                      source:
                        type: string
                      make:
                        type: string
                      model:
                        type: string
                      year:
                        type: string
                      complaints_total:
                        type: integer
                      complaints_last_12_months:
                        type: integer
                        description: By the date each complaint was filed
                      last_complaint_date:
                        type: string
                        nullable: true
                        description: ISO date the newest complaint was filed
                      components:
                        type: object
                        additionalProperties:
                          type: integer
                        description: The 5 most-complained-about components, lowercased, with complaint counts
                      crashes:
                        type: integer
                      fires:
                        type: integer
                      injuries:
                        type: integer
                      deaths:
                        type: integer
                      url:
                        type: string
                        description: The public api.nhtsa.gov complaints URL for this vehicle
                      truncated:
                        type: boolean
                        description: Present and true only if NHTSA sent fewer records than its own count; per-record counts then cover the records sent
                      note:
                        type: string
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: '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'
          headers:
            PAYMENT-REQUIRED:
              description: base64 JSON of the x402 v2 PaymentRequired object
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  x402Version:
                    type: integer
                    const: 2
                  error:
                    type: string
                  resource:
                    type: object
                  accepts:
                    type: array
                    items:
                      type: object
                  extensions:
                    type: object
        '429':
          description: Daily quota reached
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Vehicles
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
            details: {}
    Recall:
      type: object
      properties:
        id:
          type: string
          examples:
          - fda-H-1339-2026
        agency:
          type: string
          enum:
          - CPSC
          - FDA
          - NHTSA
          - USDA FSIS
          - US Coast Guard
          - FAA
          - HUD
          - NIOSH
          - MSHA
        source:
          type: string
          enum:
          - cpsc
          - fda_food
          - fda_drug
          - fda_device
          - nhtsa
          - fsis
          - uscg
          - faa
          - hud
          - niosh
          - msha
          - fda_press
          - fda_hfcs
          - fda_ires
        source_id:
          type: string
          description: The agency recall number, Federal Register document number, or a stable slug for notices without a number
        category:
          type: string
          enum:
          - 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:
          type: string
        description:
          type:
          - string
          - 'null'
        hazard:
          type:
          - string
          - 'null'
        remedy:
          type:
          - string
          - 'null'
        classification:
          type:
          - string
          - 'null'
          description: 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:
          type:
          - string
          - 'null'
        firms:
          type: array
          items:
            type: string
        products:
          type: array
          items:
            type: string
        distribution:
          type:
          - string
          - 'null'
        units:
          type:
          - string
          - 'null'
        flags:
          type: array
          items:
            type: string
            enum:
            - do_not_drive
            - park_outside
            - public_health_alert
            - outbreak
            - fda_mandated
            - lots_truncated
            - press_release
            - medwatch
            - detail_pending
            - health_fraud
        recall_date:
          type:
          - string
          - 'null'
          format: date
        report_date:
          type:
          - string
          - 'null'
          format: date
        url:
          type: string
          format: uri
          description: Agency notice
        source_url:
          type: string
          format: uri
          description: Machine-readable source record
        first_seen:
          type: string
          format: date-time
          description: When recallsapi.com first stored this record
        as_of:
          type: string
          format: date-time
          description: When recallsapi.com last saw this record change
        identifiers:
          type: array
          items:
            type: object
            properties:
              kind:
                type: string
              value:
                type: string
              raw:
                type: string
    Match:
      type: object
      properties:
        confidence:
          type: string
          enum:
          - exact
          - strong
          - possible
          description: '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:
          type: array
          items:
            type: string
        recall:
          $ref: '#/components/schemas/Recall'
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: API key from POST /v1/keys
    apiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: 'The same API key from POST /v1/keys, sent as the X-API-Key header instead of Authorization: Bearer'
    credit:
      type: apiKey
      in: header
      name: X-Credit-Token
      description: x402 prepaid credit token from POST /v1/credits/topup (shown once). Pays /v1/check, /v1/recalls and /v1/vehicles from its balance, only while x402 payments are switched on.