Search U.S. federal product recalls
search_recallsSearch the Recall Canary index of U.S. federal product recalls (FDA, FSIS, CPSC, NHTSA) by keyword, agency, severity, category, distribution state, hazard, firm, or date window. Returns up to 50 matching records per page with abbreviated content (title, firm, severity, date, and the canonical URL of each); call get_recall to fetch the full record. With a keyword, the best matches come first unless sort says otherwise. Unknown agency, severity, category, state and date values are rejected with an error message describing the allowed values. An unknown hazard or firm is also an error. Read-only.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text query over one index of canonical recalls and preliminary press releases: titles, firm, product name/brand/description, agency reason text, AI summary, hazard tags, and identifiers (UPC, NDC, lot codes, recall and campaign numbers; codes match as printed or as bare digits, including typed in spaced or dashed groups). Every word must match, in any order; words of 3+ characters also match as prefixes (a 2-letter word matches itself and its plural), a plural also matches its singular, and a double-quoted run is an exact phrase. The one operator is an uppercase OR between two words, binding tighter than the implicit AND (`salmonella OR listeria cheese` = (salmonella OR listeria) AND cheese); NOT and NEAR are ordinary words. If no record matches every word, the results fall back to records matching SOME of them and the response says `relaxed: true` (with a notice): those are not confirmed matches. A `q` with more than 10 distinct words or codes is refused with a tool error, not searched in part. Results are ranked by relevance by default. A `q` with no searchable word (only symbols, punctuation or the operators OR / AND) is refused with a tool error, not browsed: omit `q` to browse by filters. Zero results is never evidence a product is unaffected: agencies print codes inconsistently, so also search the brand or product name and compare codes on the record. | |
| to | No | Inclusive upper bound, YYYY-MM-DD at 23:59:59 UTC. | |
| date | No | Relative window, resolved against the request clock. Ignored when `from` or `to` is set. | |
| firm | No | Firm slug: the firm of one recall, as the `firm.slug` value of a get_recall record, or the last part of a /firm/ page URL (for example "acme-foods"). Matches that firm's recalls and press releases. An unknown or malformed slug is an error, not a dropped filter: no search is returned. | |
| from | No | Inclusive lower bound, YYYY-MM-DD at 00:00:00 UTC. | |
| page | No | 1-based page number, 50 records per page. Values above 200 clamp to 200; reach deeper archive by narrowing the date window instead. Pass the next page number in this parameter to navigate paginated results. | |
| sort | No | `relevance` (the default when `q` is set) puts the best matches first. `recent` orders by listing date descending (the default without `q`). `severity` puts CRITICAL then MODERATE first, date descending within each band. | |
| state | No | Two-letter USPS code for a U.S. state or DC. Matches records distributed there or flagged nationwide. Territories are not filterable. Note the round trip: this takes a bare code such as "TX", while `distribution.geos` in the response emits ISO 3166-2 ("US-TX"). | |
| agency | No | Issuing agencies; matches any. Case-insensitive; values are uppercase. | |
| hazard | No | Single-select hazard tag, lowercase and hyphenated, the same filter as the website hazard pages: matches records whose hazard_tags include it, press releases included. Anything else is an error. | |
| category | No | Single-select product category. Case-insensitive; values are uppercase. | |
| severity | No | Matches any. The issuing agency's own level (FDA/FSIS class, NHTSA do-not-drive or park-outside warning) on one scale by a fixed rule; null when the agency gave none. A record reporting null can still match MODERATE here. CPSC records are reachable only via UNKNOWN. Preliminary press releases count as UNKNOWN: a filter without UNKNOWN excludes them. Case-insensitive; values are uppercase. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| notes | Yes | The caveat that absence of a match is not a clearance. | |
| filters | Yes | The filters as applied, after normalization. An unapplied filter is echoed as null or []. | |
| license | Yes | Attribution and terms (DATA-LICENSE). | |
| notices | Yes | Rules that narrowed or widened the results, stated in band. Empty when none apply. | |
| relaxed | Yes | ||
| results | Yes | ||
| html_url | Yes | Absolute URL of the human-readable page. | |
| canonical | Yes | Absolute URL of this representation. | |
| pagination | Yes | ||
| api_version | Yes | ||
| snapshot_at | Yes | ISO-8601 UTC response-generation time, second precision. First key on purpose. |