FDA Recall Trends API: Recall counts by hazard class, firm, state and status over your window — openFDA
Recall counts by hazard class, firm, state and status over your window, with the Class I share computed. The aggregate, not a record dump. 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/recall-trends — product id
fda_recall_trends. Over MCP, call answerpool_get with
product_id=fda_recall_trends.
curl "https://answerpool.io/v1/fda/recall-trends?category=drug&days=365"
Live call: https://answerpool.io/v1/fda/recall-trends?category=drug&days=365 · JSON sample: /v1/samples/fda_recall_trends
What does the answer look like?
A representative response, the same static sample served at /v1/samples/fda_recall_trends.
as_of | 2026-09-03T17:00:00Z |
|---|---|
category | drug |
window_days | 365 |
total_in_window | 1291 |
class_i_share_pct | 5.7 |
note | Counts come from FDA's own server-side aggregation over the window; shares are computed by AnswerPool. Counts are recall events, not units or exposure. |
source | openFDA (US Food and Drug Administration), CC0 |
refresh_after | 2026-09-18T00:00:00.000Z |
by_classification
| term | count |
|---|---|
| Class II | 1113 |
| Class III | 104 |
| Class I | 73 |
The same sample as raw JSON
{
"as_of": "2026-09-03T17:00:00Z",
"category": "drug",
"window_days": 365,
"total_in_window": 1291,
"by_classification": [
{
"term": "Class II",
"count": 1113
},
{
"term": "Class III",
"count": 104
},
{
"term": "Class I",
"count": 73
}
],
"class_i_share_pct": 5.7,
"top_recalling_firms": [
{
"term": "Example Pharma Inc",
"count": 44
}
],
"by_state": [
{
"term": "NJ",
"count": 190
}
],
"by_status": [
{
"term": "Terminated",
"count": 806
}
],
"note": "Counts come from FDA's own server-side aggregation over the window; shares are computed by AnswerPool. Counts are recall events, not units or exposure.",
"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 want the distribution of recall activity across a category or window.
What you skip building
- paging thousands of enforcement records
- hand-grouping by class or firm
When should you not use it?
Individual recall records — /v1/fda/recalls.
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