AnswerPool

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_of2026-09-03T17:00:00Z
categorydrug
window_days365
total_in_window1291
class_i_share_pct5.7
noteCounts come from FDA's own server-side aggregation over the window; shares are computed by AnswerPool. Counts are recall events, not units or exposure.
sourceopenFDA (US Food and Drug Administration), CC0
refresh_after2026-09-18T00:00:00.000Z

by_classification

termcount
Class II1113
Class III104
Class I73
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.

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

When should you not use it?

Individual recall records — /v1/fda/recalls.

Where else can you find this?