recallsapi-com Vehicles API
The Vehicles API from recallsapi-com — 2 operation(s) for vehicles.
The Vehicles API from recallsapi-com — 2 operation(s) for vehicles.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/recallsapi-com:recallsapi-com-vehicles-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 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.