Product Recall & Safety API
Product Recall & Safety API
/recall/v1/search1 creditSearch FDA recalls by keyword, category, classification, status, company, and date range with skip/limit pagination. Pass category=all (default) to span food+drug+device.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | optional | — | Free-text product/keyword search over the recall's product description and reason . e.g. 'peanut butter', 'listeria', 'airbag'. Combine with category/classification/date. |
| category = all | optional | food · drug · device · all | FDA recall category. food / drug / device, or 'all' to search every category at once. (CPSC consumer-product & NHTSA vehicle recalls are out of scope — see docs; vehicle recalls live in the `vehicle` API.) |
| classification | optional | Class I · Class II · Class III | FDA hazard classification. Case-insensitive. Filters to recalls of that seriousness tier. |
| status | optional | Ongoing · Completed · Terminated · Pending | Recall lifecycle status. Case-insensitive; unknown values are ignored rather than rejected. |
| company | optional | — | Optional recalling-firm filter to narrow a search. |
| date_from | optional | — | Filter by recall report_date from (on or after). ISO YYYY-MM-DD (or YYYYMMDD). Pair date_from + date_to for a range. |
| date_to | optional | — | Filter by recall report_date to (on or before). ISO YYYY-MM-DD (or YYYYMMDD). Pair date_from + date_to for a range. |
| sort = report_date:desc | optional | report_date:desc · report_date:asc · recall_initiation_date:desc · recall_initiation_date:asc | Result ordering by date field. |
| limit = 20 | optional | 1–100 | Results per page (1-100, default 20). Larger values are clamped. |
| skip = 0 | optional | 0–25000 | Pagination offset (skip N results). Page forward with meta.next_skip. openFDA ceiling: skip+limit <= 25000. |
| include_severity = true | optional | — | Include the 0-100 severity_score on each recall (default true). |
/recall/v1/recall_detail1 creditFull detail for one recall by its FDA recall_number (category auto-detected from prefix).
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| recall_number | required | — | The FDA recall_number (e.g. F-0001-2018, D-1234-2025, Z-1234-2025) from a search result. Category is auto-detected from the prefix (F=food, D=drug, Z=device) but pass category to be explicit. |
| category | optional | food · drug · device · all | FDA recall category. food / drug / device, or 'all' to search every category at once. (CPSC consumer-product & NHTSA vehicle recalls are out of scope — see docs; vehicle recalls live in the `vehicle` API.) |
/recall/v1/by_company1 creditAll recalls for a recalling firm / manufacturer, newest first, paginated.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| company | required | — | Recalling firm / company name (matched against openFDA recalling_firm). Case-insensitive, partial words allowed. |
| category = all | optional | food · drug · device · all | FDA recall category. food / drug / device, or 'all' to search every category at once. (CPSC consumer-product & NHTSA vehicle recalls are out of scope — see docs; vehicle recalls live in the `vehicle` API.) |
| classification | optional | Class I · Class II · Class III | FDA hazard classification. Case-insensitive. Filters to recalls of that seriousness tier. |
| status | optional | Ongoing · Completed · Terminated · Pending | Recall lifecycle status. Case-insensitive; unknown values are ignored rather than rejected. |
| date_from | optional | — | Filter by recall report_date from (on or after). ISO YYYY-MM-DD (or YYYYMMDD). Pair date_from + date_to for a range. |
| date_to | optional | — | Filter by recall report_date to (on or before). ISO YYYY-MM-DD (or YYYYMMDD). Pair date_from + date_to for a range. |
| limit = 20 | optional | 1–100 | Results per page (1-100, default 20). Larger values are clamped. |
| skip = 0 | optional | 0–25000 | Pagination offset (skip N results). Page forward with meta.next_skip. openFDA ceiling: skip+limit <= 25000. |
| include_severity = true | optional | — | Include the 0-100 severity_score on each recall (default true). |
/recall/v1/latest1 creditMost recent recalls across all categories (or one), within the last N days.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| category = all | optional | food · drug · device · all | FDA recall category. food / drug / device, or 'all' to search every category at once. (CPSC consumer-product & NHTSA vehicle recalls are out of scope — see docs; vehicle recalls live in the `vehicle` API.) |
| classification | optional | Class I · Class II · Class III | FDA hazard classification. Case-insensitive. Filters to recalls of that seriousness tier. |
| days = 90 | optional | 1–3650 | `latest` window: recalls reported in the last N days (default 90). |
| limit = 20 | optional | 1–100 | Results per page (1-100, default 20). Larger values are clamped. |
| skip = 0 | optional | 0–25000 | Pagination offset (skip N results). Page forward with meta.next_skip. openFDA ceiling: skip+limit <= 25000. |
| include_severity = true | optional | — | Include the 0-100 severity_score on each recall (default true). |
/recall/v1/batch1 creditRun multiple keyword searches in one call (compliance-watch over a product list).
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| queries | required | — | Up to 20 keyword queries; each is searched and returned with its own results. A JSON array or a comma/newline-separated string. |
| category = all | optional | food · drug · device · all | FDA recall category. food / drug / device, or 'all' to search every category at once. (CPSC consumer-product & NHTSA vehicle recalls are out of scope — see docs; vehicle recalls live in the `vehicle` API.) |
| classification | optional | Class I · Class II · Class III | FDA hazard classification. Case-insensitive. Filters to recalls of that seriousness tier. |
| limit = 20 | optional | 1–100 | Results per page (1-100, default 20). Larger values are clamped. |
/recall/v1/stats1 creditAggregate recall counts grouped by a field (classification/status/firm/state/type).
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| category = all | optional | food · drug · device · all | FDA recall category. food / drug / device, or 'all' to search every category at once. (CPSC consumer-product & NHTSA vehicle recalls are out of scope — see docs; vehicle recalls live in the `vehicle` API.) |
| field = classification | optional | classification · status · recalling_firm · state · product_type | Aggregate recall counts grouped by this field (openFDA count). Returns term→count buckets. |
| query | optional | — | Free-text product/keyword search over the recall's product description and reason . e.g. 'peanut butter', 'listeria', 'airbag'. Combine with category/classification/date. |
| date_from | optional | — | Filter by recall report_date from (on or after). ISO YYYY-MM-DD (or YYYYMMDD). Pair date_from + date_to for a range. |
| date_to | optional | — | Filter by recall report_date to (on or before). ISO YYYY-MM-DD (or YYYYMMDD). Pair date_from + date_to for a range. |
/recall/v1/categories1 creditThe recall taxonomy: FDA categories + EU Safety Gate product-category & risk-type enums + EU country list (reference data for filters).
Try in playground →/recall/v1/eu_recall1 creditOne EU Safety Gate (RAPEX) recall/alert by notification id — product, risk, measure, traceability, reacting countries.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| id | required | — | EU Safety Gate notification id (from a safety-gate-alerts URL). |
| language = en | optional | — | Preferred language for the EU notification text (e.g. en, de, fr). |
/recall/v1/eu_recalls1 creditSearch/list EU Safety Gate alerts (the EU analogue of `search`): pages over recent weekly reports (open-data XML) and filters by query, product category, country and risk type, with skip/limit pagination. Each alert carries product, barcode, brand, risk, measures, notifying country and country of origin.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | optional | — | Free-text filter over the EU alert's product name/description, brand, category and risk description (case-insensitive substring). |
| category | optional | — | EU Safety Gate product category to filter on (e.g. Toys, Motor vehicles, Electrical appliances). See the `categories` action for the full enum. Substring match. |
| country | optional | — | Filter to alerts whose notifying country OR country of origin matches (e.g. Germany, China). Substring, case-insensitive. |
| risk_type | optional | — | Filter by risk type / hazard (e.g. Chemical, Choking, Suffocation, Injuries, Electric shock). Substring over the alert's risk types. |
| weeks = 12 | optional | — | How many of the most-recent weekly reports to scan (1-12; each carries ~80-100 alerts). Larger = more coverage + more upstream fetches. |
| limit = 20 | optional | 1–100 | Results per page (1-100, default 20). Larger values are clamped. |
| skip = 0 | optional | 0–25000 | Pagination offset (skip N results). Page forward with meta.next_skip. openFDA ceiling: skip+limit <= 25000. |
/recall/v1/eu_latest1 creditThe newest EU Safety Gate weekly report fully expanded into its ~80-100 product alerts (newest-published recalls across the EU/EEA).
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| limit = 20 | optional | 1–100 | Results per page (1-100, default 20). Larger values are clamped. |
curl -X POST https://api.reefapi.com/recall/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"listeria","category":"food","limit":3}'{
"ok": true,
"data": { /* the result */ },
"meta": {
"latency_ms": 240,
"record_count": 12,
"completeness_pct": 100
},
"error": null
}