Docs / Get a recall
Get a recall
One recall by its official number.
GET/v1/recalls/{id} · API key required
Returns one recall with the agency's own text, a plain-English summary, and where the data came from. Use the NHTSA campaign number for vehicles and car equipment (21V215000), cpsc- plus the CPSC recall number for consumer products (cpsc-27064), and fda- plus the FDA event number for food (fda-98506).
Parameters
| Name | In | Required | Description |
|---|---|---|---|
id | path | yes | NHTSA campaign number, cpsc-<number> or fda-<event number>. Not case sensitive. Example: 21V215000 |
Request
curl https://recalldb.app/v1/recalls/21V215000 \
-H "Authorization: Bearer $RECALLDB_KEY"const res = await fetch('https://recalldb.app/v1/recalls/21V215000', {
headers: { Authorization: `Bearer ${process.env.RECALLDB_KEY}` },
})
const { data, source } = await res.json()
console.log(data, source.official_url)import os, requests
r = requests.get("https://recalldb.app/v1/recalls/21V215000", headers={"Authorization": f"Bearer {os.environ['RECALLDB_KEY']}"})
r.raise_for_status()
body = r.json()
print(body["data"], body["source"]["official_url"])Try it
Runs a real request with no signup (20 a day per network, read-only). VINs you try are used only for this call and never stored.
Request
Response
curl (with your own key)
JavaScript
Python
Get your own key Free: 1,000 requests a month.
Response
200 OK
{
"data": {
"id": "21V215000",
"category": "vehicle",
"issued_by": "Honda",
"issuer_note": null,
"severity": "standard",
"date": "2021-03-25",
"units": 624552,
"units_affected": 624552,
"official_text": {
"problem": "Honda is recalling certain 2018-2020 vehicles. The low-pressure fuel pump inside the fuel tank may fail.",
"consequence": "Fuel pump failure can cause an engine stall while driving, increasing the risk of a crash.",
"remedy": "Dealers will replace the fuel pump assembly, free of charge.",
"notes": ""
},
"components": [
"FUEL SYSTEM, GASOLINE:DELIVERY:FUEL PUMP"
],
"codes_as_listed": [],
"plain_summary": {
"whatsWrong": "The low-pressure fuel pump inside the fuel tank may fail.",
"danger": "Fuel pump failure can cause an engine stall while driving, increasing the risk of a crash.",
"whatToDo": "Dealers will replace the fuel pump assembly, free of charge.",
"advisory": ""
},
"distribution": null,
"page_url": "https://checkrecalls.org/recall/21v215000"
},
"source": {
"agency": "NHTSA",
"official_id": "21V215000",
"official_url": "https://www.nhtsa.gov/recalls?nhtsaId=21V215000",
"last_updated": "2026-11-13"
},
"attribution": {
"text": "Data from RecallDB",
"url": "https://recalldb.app"
}
}Every response includes source (agency, official ID, official URL, last updated) and attribution. Attribution rules.
Notes
- distribution says where the notice says it was sold: type is nationwide, states (with state codes) or not_specified, and as_listed is the notice's own wording. It is null for recalls with no distribution (vehicles, tires and others). A state list is only what the notice names: never a statement that an item was or was not sold to you.
- The id in the response is exactly the id in the URL: NHTSA numbers in capitals (21V215000), cpsc-<number> and fda-<event number> in lower case. source.official_id is the agency's own number (for CPSC and FDA, without the prefix).
- units is the agency's wording (for example "About 265,000"). units_affected is the same count as a whole number, or null when the wording is not a clear single count (ranges, amounts in cases or pounds, no number). It is never a guess.
- Lot, serial and date codes appear only as codes_as_listed, copied exactly as the agency wrote them. RecallDB never compares them with anything and never says whether a particular item is affected.
- Recalls are added as they are published: NHTSA, CPSC and FDA food updates run every day.
Errors: error codes. Limits: rate limits.