docs / recall

Product Recall & Safety API

Product Recall & Safety API

base /recall/v110 endpoints
post/recall/v1/recall_detail1 credit

Full detail for one recall by its FDA recall_number (category auto-detected from prefix).

ParameterAllowed / rangeDescription
recall_numberrequiredThe 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.
categoryoptionalfood · drug · device · allFDA 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.)
Try in playground →
post/recall/v1/by_company1 credit

All recalls for a recalling firm / manufacturer, newest first, paginated.

ParameterAllowed / rangeDescription
companyrequiredRecalling firm / company name (matched against openFDA recalling_firm). Case-insensitive, partial words allowed.
category = alloptionalfood · drug · device · allFDA 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.)
classificationoptionalClass I · Class II · Class IIIFDA hazard classification. Case-insensitive. Filters to recalls of that seriousness tier.
statusoptionalOngoing · Completed · Terminated · PendingRecall lifecycle status. Case-insensitive; unknown values are ignored rather than rejected.
date_fromoptionalFilter by recall report_date from (on or after). ISO YYYY-MM-DD (or YYYYMMDD). Pair date_from + date_to for a range.
date_tooptionalFilter by recall report_date to (on or before). ISO YYYY-MM-DD (or YYYYMMDD). Pair date_from + date_to for a range.
limit = 20optional1–100Results per page (1-100, default 20). Larger values are clamped.
skip = 0optional0–25000Pagination offset (skip N results). Page forward with meta.next_skip. openFDA ceiling: skip+limit <= 25000.
include_severity = trueoptionalInclude the 0-100 severity_score on each recall (default true).
Try in playground →
post/recall/v1/latest1 credit

Most recent recalls across all categories (or one), within the last N days.

ParameterAllowed / rangeDescription
category = alloptionalfood · drug · device · allFDA 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.)
classificationoptionalClass I · Class II · Class IIIFDA hazard classification. Case-insensitive. Filters to recalls of that seriousness tier.
days = 90optional1–3650`latest` window: recalls reported in the last N days (default 90).
limit = 20optional1–100Results per page (1-100, default 20). Larger values are clamped.
skip = 0optional0–25000Pagination offset (skip N results). Page forward with meta.next_skip. openFDA ceiling: skip+limit <= 25000.
include_severity = trueoptionalInclude the 0-100 severity_score on each recall (default true).
Try in playground →
post/recall/v1/batch1 credit

Run multiple keyword searches in one call (compliance-watch over a product list).

ParameterAllowed / rangeDescription
queriesrequiredUp to 20 keyword queries; each is searched and returned with its own results. A JSON array or a comma/newline-separated string.
category = alloptionalfood · drug · device · allFDA 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.)
classificationoptionalClass I · Class II · Class IIIFDA hazard classification. Case-insensitive. Filters to recalls of that seriousness tier.
limit = 20optional1–100Results per page (1-100, default 20). Larger values are clamped.
Try in playground →
post/recall/v1/stats1 credit

Aggregate recall counts grouped by a field (classification/status/firm/state/type).

ParameterAllowed / rangeDescription
category = alloptionalfood · drug · device · allFDA 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 = classificationoptionalclassification · status · recalling_firm · state · product_typeAggregate recall counts grouped by this field (openFDA count). Returns term→count buckets.
queryoptionalFree-text product/keyword search over the recall's product description and reason . e.g. 'peanut butter', 'listeria', 'airbag'. Combine with category/classification/date.
date_fromoptionalFilter by recall report_date from (on or after). ISO YYYY-MM-DD (or YYYYMMDD). Pair date_from + date_to for a range.
date_tooptionalFilter by recall report_date to (on or before). ISO YYYY-MM-DD (or YYYYMMDD). Pair date_from + date_to for a range.
Try in playground →
post/recall/v1/categories1 credit

The recall taxonomy: FDA categories + EU Safety Gate product-category & risk-type enums + EU country list (reference data for filters).

Try in playground →
post/recall/v1/eu_recall1 credit

One EU Safety Gate (RAPEX) recall/alert by notification id — product, risk, measure, traceability, reacting countries.

ParameterAllowed / rangeDescription
idrequiredEU Safety Gate notification id (from a safety-gate-alerts URL).
language = enoptionalPreferred language for the EU notification text (e.g. en, de, fr).
Try in playground →
post/recall/v1/eu_recalls1 credit

Search/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.

ParameterAllowed / rangeDescription
queryoptionalFree-text filter over the EU alert's product name/description, brand, category and risk description (case-insensitive substring).
categoryoptionalEU Safety Gate product category to filter on (e.g. Toys, Motor vehicles, Electrical appliances). See the `categories` action for the full enum. Substring match.
countryoptionalFilter to alerts whose notifying country OR country of origin matches (e.g. Germany, China). Substring, case-insensitive.
risk_typeoptionalFilter by risk type / hazard (e.g. Chemical, Choking, Suffocation, Injuries, Electric shock). Substring over the alert's risk types.
weeks = 12optionalHow many of the most-recent weekly reports to scan (1-12; each carries ~80-100 alerts). Larger = more coverage + more upstream fetches.
limit = 20optional1–100Results per page (1-100, default 20). Larger values are clamped.
skip = 0optional0–25000Pagination offset (skip N results). Page forward with meta.next_skip. openFDA ceiling: skip+limit <= 25000.
Try in playground →
post/recall/v1/eu_latest1 credit

The newest EU Safety Gate weekly report fully expanded into its ~80-100 product alerts (newest-published recalls across the EU/EEA).

ParameterAllowed / rangeDescription
limit = 20optional1–100Results per page (1-100, default 20). Larger values are clamped.
Try in playground →