FDA drug recalls (enforcement reports) API
FDA drug recall enforcement reports from openFDA, newest report first, filtered by optional drug, brand or firm text (every word must match; brand names also match their RxNorm ingredients), look-back months and FDA classification (I, II, III). Entries include recall number, classification, status, product description, reason, recalling firm, distribution pattern, initiation and report dates (ISO) and voluntary or mandated status, plus counts by classification.
$0.01 per call USDC over x402 v2 on Base, Polygon, Arbitrum, Avalanche or Sei. No signup, no API key. Requests that fail or match nothing are not charged.
Endpoint
GET https://api.kit-rx.com/v1/rx/recalls
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
q | string | no | Drug name, brand or recalling firm text. Omit for all recent drug recalls. e.g. metformin |
months | integer | no | Look-back window on report date, 1 to 120 months (default 24 with q, 3 without). e.g. 24 |
classification | string: I, II, III | no | FDA recall classification filter. e.g. II |
limit | integer | no | Entries to return, 1 to 50 (default 20). e.g. 10 |
Example request
https://api.kit-rx.com/v1/rx/recalls?q=metformin&months=24&limit=5
Without payment the server answers 402 Payment Required with the price (10000 atomic USDC) in the PAYMENT-REQUIRED header. Any x402 v2 client pays and retries automatically. A request with no parameters runs this example.
curl -i "https://api.kit-rx.com/v1/rx/recalls?q=metformin&months=24&limit=5"
Pay from an agent
AgentCash: fetch the URL. OpenDexter MCP: x402_fetch. Kit Rx MCP server: https://api.kit-rx.com/mcp. Code:
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { wrapFetchWithPayment } from "@x402/fetch";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client();
registerExactEvmScheme(client, { signer: privateKeyToAccount(process.env.BUYER_KEY) });
const pay = wrapFetchWithPayment(fetch, client);
const res = await pay("https://api.kit-rx.com/v1/rx/recalls?q=metformin&months=24&limit=5");
console.log(await res.json());
Example response
{
"query": {
"q": "metformin",
"months": 24,
"classification": null,
"limit": 5
},
"result": {
"window": {
"field": "report_date",
"from": "2024-11-13",
"to": "2026-11-13"
},
"total_matching": 4,
"returned": 4,
"counts_by_classification": {
"Class I": 0,
"Class II": 4,
"Class III": 0
},
"match_basis": "all words of \"metformin\" …",
"entries": [
{
"recall_number": "D-0657-2026",
"classification": "Class II",
"status": "Ongoing",
"product_description": "Synjardy XR Tablets …",
"reason_for_recall": "CGMP Deviations: An …",
"recalling_firm": "Boehringer Ingelheim …",
"distribution_pattern": "OH",
"recall_initiation_date": "2026-06-12",
"report_date": "2026-07-08",
"voluntary_mandated": "Voluntary: Firm initiated"
}
]
},
"sources": [
{
"name": "openFDA Drug Enforcement …",
"url": "https://open.fda.gov/apis/drug/enforcement/"
}
],
"notes": [
"Matching is text based on …"
],
"attribution": [
"Data provided by the U.S. …"
],
"generated_at": "2026-11-13T21:50:08.468Z"
}
Kit Rx: Composed public-data reports for AI agents, paid per call in USDC over x402. Machine-readable: OpenAPI, llms.txt, /.well-known/x402, agent skills.