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

NameTypeRequiredDescription
qstringnoDrug name, brand or recalling firm text. Omit for all recent drug recalls. e.g. metformin
monthsintegernoLook-back window on report date, 1 to 120 months (default 24 with q, 3 without). e.g. 24
classificationstring: I, II, IIInoFDA recall classification filter. e.g. II
limitintegernoEntries 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.