When to use this skill
When the user asks whether a medical device was recalled, what recalls exist for a type of device, or what happened with a specific recall action — the FDA device recall endpoint is the authoritative source. It covers both voluntary and mandatory recalls, and links back to the device's original 510(k) clearance. For 510(k) clearance status or adverse event reports, use separate FDA device skills instead.
Your best first call
curl "https://api.fda.gov/device/recall.json?search=product_description:wound+therapy&limit=5"
No auth. No key. The search parameter uses Lucene query syntax — product_description:wound therapy narrows to devices whose description includes "wound therapy". You can search across product_description, recalling_firm, product_code, reason_for_recall, and root_cause_description. The seed tutorial doesn't cover all searchable fields, but the API supports any field in the recall record as a Lucene term.
Key response fields:
product_description — what the recalled device is (often a full product name with model details)
reason_for_recall — why it was recalled, in plain language
root_cause_description — category: "Device Design", "Manufacturing", etc.
recall_status — "Ongoing", "Completed", or "Terminated"
event_date_initiated — when the recall started (YYYYMMDD format)
k_numbers — links to the device's original 510(k) clearance, letting you trace the full regulatory lifecycle
product_quantity — how many units were affected
recalling_firm — the company that issued the recall
Fallbacks (when the best call isn't enough)
- Need 510(k) clearance status, not recall history →
device/510k.json with search=device_name:<keyword> — separate FDA device skill.
- Need adverse event reports, not recalls →
device/event.json with search=device.generic_name:<keyword> — separate FDA device skill.
Pitfalls
- The
search parameter is Lucene syntax, not simple keyword matching. Wrap phrases in double quotes: search=product_description:"negative pressure wound". To AND terms: search=recalling_firm:Accuro+AND+recall_status:Ongoing. The + in +AND+ must be URL-encoded as %2B if your HTTP client doesn't handle it.
- "Terminated" in
recall_status means the recall action was successfully completed and closed — it does not mean the device was destroyed or removed from the market permanently.
- Date formats are inconsistent across FDA device endpoints:
recall uses YYYYMMDD for event_date_initiated but YYYY-MM-DD for event_date_terminated. Check each field before constructing date-range queries.
- The API caps at 100 results per request. Use
skip and limit for pagination; meta.results.total gives the full match count. The maximum fetch per query is 25,000 records across all pages.
One-line summary for the user
I can search FDA device recalls by product description, firm, or reason — no auth required, but queries use Lucene syntax so phrase searches need quotes.
OpenFDA API for accessing medical device data including adverse events, classifications, 510(k) clearances, PMA approvals, recalls, and registration information. The API provides public access to FDA's MAUDE (Manufacturer and User Facility …
SKILL.md source (frontmatter + body)
---
name: search-fda-device-recalls
description: When the user asks whether a medical device was recalled, what recalls exist for a type of device, or what happened with a specific recall action — reach for the FDA device recall endpoint. No auth required; uses Lucene search syntax.
---
## When to use this skill
When the user asks whether a medical device was recalled, what recalls exist for a type of device, or what happened with a specific recall action — the FDA device recall endpoint is the authoritative source. It covers both voluntary and mandatory recalls, and links back to the device's original 510(k) clearance. For 510(k) clearance status or adverse event reports, use separate FDA device skills instead.
## Your best first call
```bash
curl "https://api.fda.gov/device/recall.json?search=product_description:wound+therapy&limit=5"
```
No auth. No key. The `search` parameter uses Lucene query syntax — `product_description:wound therapy` narrows to devices whose description includes "wound therapy". You can search across `product_description`, `recalling_firm`, `product_code`, `reason_for_recall`, and `root_cause_description`. The seed tutorial doesn't cover all searchable fields, but the API supports any field in the recall record as a Lucene term.
Key response fields:
- `product_description` — what the recalled device is (often a full product name with model details)
- `reason_for_recall` — why it was recalled, in plain language
- `root_cause_description` — category: "Device Design", "Manufacturing", etc.
- `recall_status` — "Ongoing", "Completed", or "Terminated"
- `event_date_initiated` — when the recall started (YYYYMMDD format)
- `k_numbers` — links to the device's original 510(k) clearance, letting you trace the full regulatory lifecycle
- `product_quantity` — how many units were affected
- `recalling_firm` — the company that issued the recall
## Fallbacks (when the best call isn't enough)
- **Need 510(k) clearance status, not recall history** → `device/510k.json` with `search=device_name:<keyword>` — separate FDA device skill.
- **Need adverse event reports, not recalls** → `device/event.json` with `search=device.generic_name:<keyword>` — separate FDA device skill.
## Pitfalls
- The `search` parameter is Lucene syntax, not simple keyword matching. Wrap phrases in double quotes: `search=product_description:"negative pressure wound"`. To AND terms: `search=recalling_firm:Accuro+AND+recall_status:Ongoing`. The `+` in `+AND+` must be URL-encoded as `%2B` if your HTTP client doesn't handle it.
- "Terminated" in `recall_status` means the recall action was successfully completed and closed — it does not mean the device was destroyed or removed from the market permanently.
- Date formats are inconsistent across FDA device endpoints: `recall` uses `YYYYMMDD` for `event_date_initiated` but `YYYY-MM-DD` for `event_date_terminated`. Check each field before constructing date-range queries.
- The API caps at 100 results per request. Use `skip` and `limit` for pagination; `meta.results.total` gives the full match count. The maximum fetch per query is 25,000 records across all pages.
## One-line summary for the user
I can search FDA device recalls by product description, firm, or reason — no auth required, but queries use Lucene syntax so phrase searches need quotes.