open.fda.gov APIopen.fda.gov ↗
Access FDA food recall enforcement reports and CAERS adverse event data. Filter by status, classification, product name, or recall number across 6 endpoints.
curl -X GET 'https://api.parse.bot/scraper/8f43c093-11b3-4d20-a1da-b314591fb5f9/search_food_enforcement?sort=recall_initiation_date%3Adesc&limit=5' \ -H 'X-API-Key: $PARSE_API_KEY'
Search food recall enforcement reports from the FDA Recall Enterprise System (RES). Supports filtering by any field using the search parameter and sorting. Returns full recall records including recall_number, product_description, status, classification, recalling_firm, and more.
| Param | Type | Description |
|---|---|---|
| skip | integer | Number of results to skip (max 25000) |
| sort | string | Field to sort by with direction (e.g., 'recall_initiation_date:desc') |
| limit | integer | Max results to return (max 1000) |
| search | string | Lucene-style search query (e.g., 'status:"Ongoing"', 'classification:"Class I"') |
{
"type": "object",
"fields": {
"meta": "object containing disclaimer, terms, license, last_updated, and results pagination info (skip, limit, total)",
"results": "array of food recall enforcement records"
},
"sample": {
"data": {
"meta": {
"terms": "https://open.fda.gov/terms/",
"license": "https://open.fda.gov/license/",
"results": {
"skip": 0,
"limit": 5,
"total": 28784
},
"disclaimer": "Do not rely on openFDA to make decisions regarding medical care...",
"last_updated": "2026-04-29"
},
"results": [
{
"city": "Davie",
"state": "FL",
"status": "Terminated",
"country": "United States",
"product_type": "Food",
"recall_number": "F-0276-2017",
"classification": "Class II",
"recalling_firm": "Pharmatech LLC",
"reason_for_recall": "Recall initiated as a precautionary measure due to potential risk of product contamination with Burkholderia cepacia.",
"product_description": "CytoDetox, Hydrolyzed Clinoptilolite Fragments, 1 oz./30 mL",
"recall_initiation_date": "20160808"
}
]
},
"status": "success"
}
}About the open.fda.gov API
This API exposes 6 endpoints covering FDA food recall enforcement records and CFSAN Adverse Event Reporting System (CAERS) reports. Use search_food_enforcement to query the full recall database with Lucene-style filters across fields like classification, recalling_firm, and status, or use search_food_adverse_events to pull consumer demographics, reported reactions, and product details from adverse event submissions.
Food Recall Enforcement Endpoints
The search_food_enforcement endpoint queries the FDA Recall Enterprise System (RES) and returns full recall records including recall_number, product_description, classification (Class I, II, or III), recalling_firm, status, and recall_initiation_date. Results support Lucene-style search queries — for example, filtering to classification:"Class I" to isolate the most serious recalls — as well as sort by any field and pagination via skip and limit (up to 1,000 records per request, 25,000 max skip). get_food_enforcement_by_recall_number accepts a single recall_number like H-0659-2026 and returns the matching record. get_food_enforcement_by_status narrows results to Ongoing, Terminated, or Completed recalls directly.
Aggregation and Counting
count_food_enforcement_by_field returns term-count pairs for any field you specify — pass status.exact, classification.exact, or state.exact to get a frequency distribution across the entire enforcement dataset. This is useful for understanding the breakdown of recall classes or which states have the highest enforcement activity without fetching individual records.
Food Adverse Events Endpoints
search_food_adverse_events queries CAERS reports, returning objects with report_number, consumer demographics (age, gender), reactions (a list of reported symptoms), outcomes, and products (including brand name, industry code, and role in the event). get_food_adverse_events_by_product accepts a product brand name string and returns all matching CAERS reports for that product. Both endpoints use the same meta envelope with last_updated, total, skip, and limit pagination fields.
Data Currency and Scope
The meta object on every response includes a last_updated timestamp reflecting when the underlying FDA dataset was last refreshed. Coverage is limited to food-related enforcement and adverse events; drug, device, and dietary supplement datasets are separate openFDA endpoints not included in this API.
- Monitor all ongoing Class I food recalls by filtering
search_food_enforcementwithclassification:"Class I"andstatus:"Ongoing" - Look up a specific recall record by
recall_numberto retrieve the fullproduct_description,reason_for_recall, anddistribution_pattern - Aggregate recall counts by
state.exactto identify geographic concentrations of enforcement activity - Track adverse event reports for a specific brand using
get_food_adverse_events_by_productto review reportedreactionsandoutcomes - Build a food safety dashboard by periodically querying
count_food_enforcement_by_fieldonclassification.exactto track class distribution over time - Identify which firms have the most recall history by aggregating
recalling_firm.exactviacount_food_enforcement_by_field
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does openFDA have an official developer API?+
What does the `count_food_enforcement_by_field` endpoint actually return?+
term string and an integer count, representing how many enforcement records contain that value for the field you specified. For example, passing classification.exact returns one entry per class (Class I, Class II, Class III) with the total record count for each.How deep does pagination go in the enforcement endpoints?+
skip parameter has a hard cap of 25,000 and limit is capped at 1,000 per request. To page through more than 25,000 records you need to use date-range filters in the search parameter to partition the dataset into smaller slices.Does this API cover drug or medical device recalls?+
Are voluntary recalls and market withdrawals included in the enforcement results?+
status or classification fields, but not all informal voluntary actions are guaranteed to be represented. You can use count_food_enforcement_by_field with voluntary_mandated.exact to inspect what values are present in the dataset.