Recalls
by FDA Drug Recalls in Other
FDA drug recall lookup — enforcement reports naming a drug, newest first, with recall class and its meaning, status, reason, product description, recalling firm, dates, distribution and quantity. Use to check whether a drug or lot has been recalled and why.
https://fda-drugs.use.x402atlas.com/recalls- Price
- $0.01
- per call in USDC
- Uptime
- 100%
- last 30 days
- Response time
- 451 ms
- 675 ms slowest 5%
- Last check
- Passed
- 4 h ago, next any minute now
Reliability
Status and outage history · Atom feed · Watch with other listings
How to call it
GET https://fda-drugs.use.x402atlas.com/recalls
Each call costs $0.01 in USDC on Polygon, paid with the request over x402.
Run a free test callOne unpaid request, the way an agent sends it. You see the payment challenge it gets back. Nothing is charged.
Example request
From the listing.
GET https://fda-drugs.use.x402atlas.com/recalls?drug=metformin&limit=3Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
drug | string | Yes | Brand or generic name, or text from the product description; omitted runs the example |
limit | integer | No | Default: 10. |
status | string | No | One of: all, ongoing, completed, terminated. Default: "all". |
Example response
The provider's example. We can't check it without paying.
Example response, 84 lines
{
"as_of": "2026-10-21T09:00:00Z",
"caveat": "FDA enforcement reports; FDA does not update a recall's status after classification and this feed is not a source for public alerts. Not medical advice.",
"count": 3,
"drug": "metformin",
"modified": true,
"recalls": [
{
"brand_names": [
"METFORMIN HYDROCHLORIDE"
],
"classification": "Class II",
"classification_meaning": "may cause temporary or medically reversible adverse health consequences",
"distribution": "Nationwide in U.S.",
"event_id": "96313",
"generic_names": [
"METFORMIN HYDROCHLORIDE"
],
"initiated": "2025-02-25",
"location": "Libertyville, IL, United States",
"product_description": "METFORMIN HYDROCHLORIDE EXTENDED- RELEASE 500MG, 180 TABLETS, Packaged BY: A-S Medication Solutions, Libertyville, IL 60048 NDC 50090-1494-3.",
"quantity": "411 180-count bottles",
"reason": "Presence of Foreign Tablets/Capsules.",
"recall_number": "D-0292-2025",
"recalling_firm": "A-S Medication Solutions LLC",
"reported": "2025-04-02",
"status": "ongoing",
"voluntary_mandated": "Voluntary: Firm initiated"
},
{
"brand_names": [
"METFORMIN ER 500 MG"
],
"classification": "Class II",
"classification_meaning": "may cause temporary or medically reversible adverse health consequences",
"distribution": "Distributor in OH.",
"event_id": "96082",
"generic_names": [
"METFORMIN ER 500 MG"
],
"initiated": "2024-12-30",
"location": "Chantilly, VA, United States",
"product_description": "Metformin Hydrochloride Extended-Release Tablets, USP, 500 mg, 1000-count bottles, Rx Only, Manufactured by: Granules India Limited, Hyderabad- 500 081, India, Manufactured for: Quallent Pharmaceuticals Health LLC, Grand Cayman, Grand Cayman Islands, NDC 82009-117-10",
"quantity": "6,804 bottles",
"reason": "Presence of Foreign Tablets/Capsules: A Paracetamol 500 mg tablet was found in a 1000-count bottle of Metformin HCL ER Tablets USP, 500 mg.",
"recall_number": "D-0192-2025",
"recalling_firm": "Granules Pharmaceuticals Inc.",
"reported": "2025-01-15",
"status": "terminated",
"terminated": "2026-01-15",
"voluntary_mandated": "Voluntary: Firm initiated"
},
{
"brand_names": [
"JANUMET"
],
"classification": "Class II",
"classification_meaning": "may cause temporary or medically reversible adverse health consequences",
"distribution": "Nationwide in the USA",
"event_id": "89893",
"generic_names": [
"SITAGLIPTIN AND METFORMIN HYDROCHLORIDE"
],
"initiated": "2022-03-31",
"location": "Whitehouse Station, NJ, United States",
"product_description": "Janumet (sitagliptin and metformin HCl) tablets, 50 mg/500 mg, 14-count bottle, packaged as 2 bottles per carton , Sample-Not For Sale, Rx Only, Manufactured for Merck Sharp & Dohme Corp., a subsidiary of Merck & Co., Inc. Whitehouse Station, NJ 08889, USA, by Patheon Puerto Rico, Inc. Manati, Puerto Rico, 00674 Bottle (NDC 0006-0575-02), Carton (NDC 0006-0575-03)",
"quantity": "3600 cartons",
"reason": "Presence of foreign substance: Presence of stainless steel particulates in tablets.",
"recall_number": "D-0746-2022",
"recalling_firm": "MERCK SHARP & DOHME CORP",
"reported": "2022-04-13",
"status": "terminated",
"terminated": "2023-08-15",
"voluntary_mandated": "Voluntary: Firm initiated"
}
],
"source": {
"citation": "Data provided by the U.S. Food and Drug Administration (https://open.fda.gov). Normalized by x402 Atlas; not the agency's verbatim record.",
"name": "openFDA (U.S. Food and Drug Administration)",
"url": "https://open.fda.gov"
},
"status": "all",
"total": 33
}Call it from code
The curl command shows the payment challenge. The JavaScript and Python versions pay and call, and never pay more than $0.01.
curl: see the payment challenge
# bash or zsh: see the payment challenge. Nothing is charged.
curl -sS -g -i 'https://fda-drugs.use.x402atlas.com/recalls?drug=metformin&limit=3'
# x402 v2 sends the challenge base64-encoded in the PAYMENT-REQUIRED header (v1 sends it in the body).
# To read the header:
curl -sS -g -o /dev/null -D - 'https://fda-drugs.use.x402atlas.com/recalls?drug=metformin&limit=3' \
| grep -i '^payment-required:' | cut -d' ' -f2 | tr -d '\r' | base64 --decodeJavaScript: pay and call
// npm i @x402/fetch @x402/evm viem
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
// Pays at most $0.01 per call.
const client = new x402Client().setSpendControls({ maxAmountPerPayment: "$0.01" });
registerExactEvmScheme(client, { signer: privateKeyToAccount(process.env.EVM_PRIVATE_KEY) });
const pay = wrapFetchWithPayment(fetch, client);
// Not sure it's safe to pay? ToolVet checks it first for $0.005. Pay for that from a separate
// client: this one is capped at $0.01 per payment. GET https://toolvet.app/api/v1/check?url=https%3A%2F%2Ffda-drugs.use.x402atlas.com%2Frecalls
const res = await pay("https://fda-drugs.use.x402atlas.com/recalls?drug=metformin&limit=3");
console.log(res.status, await res.text());Python: pay and call
# pip install "x402[requests,evm]"
import os
from eth_account import Account
from x402 import x402ClientSync
from x402.http.clients import x402_requests
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client
# Pays at most $0.01 per call.
client = x402ClientSync().set_spend_controls({"max_amount_per_payment": "$0.01"})
register_exact_evm_client(client, EthAccountSigner(Account.from_key(os.environ["EVM_PRIVATE_KEY"])))
with x402_requests(client) as session:
res = session.get("https://fda-drugs.use.x402atlas.com/recalls?drug=metformin&limit=3")
print(res.status_code, res.text)Security scan
No findings
We scan names, descriptions and tool definitions for hidden instructions and other prompt-injection patterns.
Recent checks
| When | Result | HTTP | Time | Price |
|---|---|---|---|---|
| 4 h ago | Passed | 402 | 441 ms | $0.01 |
| 9 h ago | Passed | 402 | 501 ms | $0.01 |
| 14 h ago | Passed | 402 | 394 ms | $0.01 |
| 18 h ago | Passed | 402 | 461 ms | $0.01 |
| 23 h ago | Passed | 402 | 487 ms | $0.01 |
Show 5 older checks
| 27 h ago | Passed | 402 | 393 ms | $0.01 |
| 32 h ago | Passed | 402 | 675 ms | $0.01 |
| 36 h ago | Passed | 402 | 133 ms | $0.01 |
| 40 h ago | Passed | 402 | 451 ms | $0.01 |
| 44 h ago | Passed | 402 | 451 ms | $0.01 |