FDA Recall Search API: Drug, device and food recalls by firm, state, class or window — openFDA
Drug, device and food recalls by firm, state, class or window, with FDA's hazard classification and days-since-report. One call instead of openFDA query syntax. Free, no key.
Free — no key, no signup, rate-limited to 60 calls per minute per client.
How do you call it?
GET /v1/fda/recalls — product id
fda_recalls. Over MCP, call answerpool_get with
product_id=fda_recalls.
curl "https://answerpool.io/v1/fda/recalls?category=drug&days=90"
Live call: https://answerpool.io/v1/fda/recalls?category=drug&days=90 · JSON sample: /v1/samples/fda_recalls
What does the answer look like?
A representative response, the same static sample served at /v1/samples/fda_recalls.
as_of | 2026-09-03T17:00:00Z |
|---|---|
category | drug |
window_days | 90 |
matched | 214 |
count | 1 |
class_i_in_page | 0 |
note | Class I means a reasonable probability of serious harm or death, Class II temporary or reversible harm, Class III unlikely harm. Classification is FDA's; day-c… |
source | openFDA (US Food and Drug Administration), CC0 |
refresh_after | 2026-09-18T00:00:00.000Z |
recalls
| recall_number | classification | status | recalling_firm | state | country | product_type | reason | product_description | report_date | initiation_date | days_since_report |
|---|---|---|---|---|---|---|---|---|---|---|---|
| D-0123-2026 | Class II | Ongoing | Example Pharma Inc | NJ | United States | Drugs | Lack of Assurance of Sterility | Example Injection USP, 10 mg/mL | 2026-08-12 | 2026-07-30 | 22 |
The same sample as raw JSON
{
"as_of": "2026-09-03T17:00:00Z",
"category": "drug",
"window_days": 90,
"matched": 214,
"count": 1,
"class_i_in_page": 0,
"recalls": [
{
"recall_number": "D-0123-2026",
"classification": "Class II",
"status": "Ongoing",
"recalling_firm": "Example Pharma Inc",
"state": "NJ",
"country": "United States",
"product_type": "Drugs",
"reason": "Lack of Assurance of Sterility",
"product_description": "Example Injection USP, 10 mg/mL",
"report_date": "2026-08-12",
"initiation_date": "2026-07-30",
"days_since_report": 22,
"voluntary_or_mandated": "Voluntary: Firm initiated"
}
],
"note": "Class I means a reasonable probability of serious harm or death, Class II temporary or reversible harm, Class III unlikely harm. Classification is FDA's; day-counts are ours.",
"source": "openFDA (US Food and Drug Administration), CC0",
"refresh_after": "2026-09-18T00:00:00.000Z"
}How fresh is it, and where does the data come from?
The fastest source behind this answer can change daily, so every response carries a refresh_after timestamp — right now it would be 2026-09-18T00:00:00.000Z. Schedule the next call on that value rather than on a guess.
- openFDA (US Food and Drug Administration) (CC0) — upstream:
https://api.fda.gov
Method version 0.1.0 ·
serving cache 1 day ·
every response carries a result_id you can resolve at
/v1/provenance.
When should you use it?
You need the recall records themselves for a firm, state or window.
What you skip building
- openFDA Lucene query syntax
- YYYYMMDD date handling
- hazard class lookup
When should you not use it?
The distribution across many recalls — /v1/fda/recall-trends.
Where else can you find this?
- Catalog entry (JSON, free)
- OpenAPI schema — input and output types, prices, the 402 flow
- llms.txt — every product in one plain-text document