Changelog

One entry per day, newest first. Only changes that affect developers; data refreshes are on status. Atom feed.

  • Change: new recalls now reach GET /v1/new, GET /v1/search and webhooks within minutes of the agency publishing them: each source is checked every 5 to 20 minutes instead of once a day (Canada and the weekly EU reports stay daily). Use GET /v1/new?since=<ISO time> to poll.
  • FDA recalls can now appear first from FDA's announcement, with an id like fda-n-1a2b3c4d5e6f; when the enforcement report arrives it is added to that same recall, and GET /v1/recalls/fda-<event> returns it.
  • Changed: the free tier is now Free (beta), for non-commercial use: 1,000 requests a month, 10 a minute, 1 watchlist of up to 10 values, 1 webhook delivered in an hourly batch, /v1/new up to 1 hour old, no bulk downloads. Keys created before 2026-11-15 keep the earlier limits until 2026-12-15, and their responses carry a notice (X-RecallDB-Notice: limits-change) until then.
  • New: GET /v1/usage returns a limits object; 429 answers include X-RateLimit-* headers and say which limit was reached; X-RateLimit-Policy now lists the monthly quota and the burst. New docs: tutorials (Python VIN check, JavaScript barcode lookup, webhook alerts, MCP with Claude, n8n and Zapier) and an all-endpoints page with curl.
  • New: POST /v1/vins/batch checks many VINs in one call (5 per call on a free key, each VIN counts as one request): check digit, NHTSA vPIC decode, and the recalls filed for each make, model and year with the remedy. It never says a vehicle has no recall; each result links NHTSA's VIN check. Also: a Try it panel on endpoint docs (no key, 20 calls a day), /fleet-check for up to 50 VINs, webhook test, delivery log and redeliver on Manage my key (message bodies kept 7 days), and the changelog as RSS (/changelog.rss) and JSON Feed (/changelog.json).

  • New: GET /v1/vehicles and the car pages now cover model years back to 1966 (NHTSA's pre-2010 recall file) and 89 car makes, including makes no longer sold such as Plymouth, Oldsmobile and American Motors.
  • New: Australia. category au_product and agency accc (Product Safety Australia consumer product recalls, ids au-<name-from-the-official-address>). The official feed holds only the latest 100 recalls, so coverage starts from when we began reading it. Licence: CC BY 4.0, source ACCC © Commonwealth of Australia.
  • Changed: the stats line on recalldb.app counts recall notices (one per official announcement), and leaves out USDA public health alerts, which are not recalls.
  • New: GET /v1/new, a new-recalls feed for polling tools (Zapier, Make, n8n): recalls first seen since a date, newest first, with category, agency and limit filters and stable ids.
  • New: GET /v1/companies/{id}, every U.S. agency recall filed under one company name across NHTSA, CPSC, FDA and USDA, newest 100 with counts by agency.
  • New: /v1/search corrects misspelled names when nothing matches (toyta becomes toyota) and says so in meta.corrected_query; fuzzy=false turns it off. Recall numbers, UPCs, model numbers and VINs are always exact.
  • New: GET /v1/recalls/{id} for NHTSA recalls has completion (percent fixed) and owner_notification_date when NHTSA lists them.
  • New: monthly research snapshots (gzipped CSV and JSON) at GET /v1/downloads and /v1/downloads/{name}, free key required. Also: JavaScript and Python SDKs, a Postman collection at /postman.json, and /integrations for Zapier, Make and n8n.
  • Changed: fast request bursts alone no longer flag a key as machine speed (normal apps batch); the rule now needs sequential or very wide use alongside the speed, or 150 fast requests in a row.
  • New: EU Safety Gate alerts. category eu_product and agency eusg (alerts from the EU rapid alert system for non-food products since 2005, ids eu-<case number>, for example eu-sr-03143-26). FDA medical device recalls now go back to 2002 (category medical_device).
  • New: UK OPSS and MHRA notices. category uk_product with agency opss (product recalls, safety alerts and safety reports, ids uk-opss-<address name>) and category uk_medicine with agency mhra (medicine recall and defect notices, device field safety notices and safety information; ids uk-mhra-<code>). NHTSA child car seat, tire and equipment lists now include recalls back to 1966.
  • Change: search words are now counted anonymously (words only, with whether the search found nothing and whether a spelling was fixed; no IP, key or session, and VINs, barcodes, recall numbers, codes, emails and phone numbers are never recorded). GET /v1/search counts the same way and not per key. Spelling correction now also fixes swapped letters (hnoda finds honda).
  • Change: GET /v1/search now finds vehicle recalls by the make and model of the vehicles (chevrolet, silverado, gmc), not only by the manufacturer named in the notice. meta.total is the real number of matches up to 10,000 (it was capped at 1,000); above that meta.total is 10000 and meta.capped is true. Paging still reaches the first 1,000 matches. Repeated misspelled searches are answered from the cache.

Breaking

  • The id in GET /v1/recalls/{id} is now exactly the id in the URL. CPSC and FDA recalls used to return the bare agency number ("27082"); they now return "cpsc-27082" and "fda-98506". NHTSA ids are unchanged. source.official_id still holds the agency's own number. This is the only breaking change; from now on /v1 follows the API policy (90 days' notice).
  • New: the state filter. GET /v1/search?state=TX keeps recalls sold nationwide, in that state, or with no clear distribution, and only drops a recall whose notice clearly lists other states. Search results and GET /v1/recalls/{id} have a distribution object (type nationwide, states or not_specified, with the state codes) for FDA, USDA and CPSC recalls; it is null for vehicles and others.
  • New: GET /v1/search?q= finds recalls by product name, brand, model number, recall number or UPC. Filters: category, agency, from, to. Up to 50 results a page, 20 pages.
  • New: GET /v1/barcode/{code} returns recalls whose notice lists a barcode (UPC-A, EAN-13, GTIN-14, UPC-E, EAN-8), with the lot codes, best-by dates and serial numbers written near it. A wrong check digit returns 400 bad_barcode.
  • New: GET /v1/recalls/{id}/history shows what an agency changed in a recall (field, old, new, day). Free keys get the latest change.
  • New: GET /v1/usage returns your usage, limit and reset date. It does not use quota.
  • New: watchlists and webhooks. POST and GET /v1/watchlists, GET and DELETE /v1/watchlists/{id}, POST and GET /v1/webhooks, DELETE /v1/webhooks/{id}, POST /v1/webhooks/{id}/test, GET /v1/webhooks/{id}/deliveries. Messages are signed (HMAC-SHA256), retried up to 6 times, and the delivery log is kept 30 days. Free keys: 1 watchlist, 1 webhook.
  • New: an MCP server at https://recalldb.app/mcp with the tools search_recalls, get_recall, barcode_lookup and vehicle_recalls. It uses your key and quota.
  • New data: motorcycles and RVs (motorcycle, rv), car equipment (equipment), other NHTSA vehicles (other_vehicle), supplements (dietary_supplement, was in food), drugs (drug), medical devices (medical_device), pet food (pet_food) and cosmetics (cosmetic). Pet food and cosmetic ids look like fda-n-<8 characters> (a hash, because FDA gives no number).
  • New data: USDA FSIS recalls (meat_poultry) and public health alerts (public_health_alert, which are not recalls). Ids: fsis-027-2026, fsis-pha-11062026-01. Search with agency=usda. Imported by hand, so updated periodically, not daily.
  • New data: Canada (ca_vehicle, ca_product, ca_food) and the UK (uk_food). Ids: ca-tc-2026517, ca-hc-82932, ca-cfia-<number>, uk-fsa-aa-52-2026. Search agency values: tc, hc, cfia, fsa. Canadian dates are the agency's last-updated date. Attribution: Open Government Licence – Canada and v3.0 (UK).
  • New fields in GET /v1/recalls/{id}: category, units_affected (an integer, or null when the wording is not a clear single count), and details (CPSC: where sold, injuries, remedy options, where made, contact; medical devices: root cause and recall status from FDA).
  • Changed: GET /v1/vehicles covers every model year NHTSA lists and 69 car makes (was 30 makes, 2017 to 2026).
  • Changed: every keyed response has X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset and X-RateLimit-Policy.
  • Changed: your request is counted just after the response is sent. A fair-use flag raised by a request shows in the next response, not that one.
  • Changed: /v1/health and the docs can be up to 5 minutes old. Keyed endpoints are never cached.
  • New: /status.json has latency per endpoint (endpoints_latency_ms).
  • New: Manage my key at recalldb.app/manage (rotate your key, or delete it and its data, by emailed link). OpenAPI 3.1 at /openapi.json and /llms.txt for AI tools.

  • Launch: GET /v1/recalls/{id}, GET /v1/vehicles/{make}/{model}/{year}, POST /v1/vin and GET /v1/health.
  • Data: NHTSA vehicle, car seat and tire recalls; CPSC consumer product recalls; FDA food recall events.
  • Free keys by email confirmation: 1,000 requests a month, 60 a minute, attribution required.
  • Automatic fair-use checks: warning, then a slower limit, then suspension.
  • Published terms, privacy, acceptable use, attribution, and API policy pages.