RecallRadar

API and MCP reference

The RecallRadar API returns the same recalls as this site as structured JSON, with filters, cursors, history, and change feeds. Paid endpoints accept an API key from a Pro plan or a per-call x402 payment in USDC.

Endpoints

Base URL: https://recallradar.withglint.app

EndpointAccessPrice
GET /v1/healthfreenone
GET /v1/freshnessfreenone
GET /v1/openapi.jsonfreenone
GET /v1/agenciesfreenone
GET /v1/recallsAPI key or x402Pro: one call or rows returned, whichever is higher (x402: $0.01 per call plus $0.0002 per row returned)
GET /v1/recalls/{id}API key or x402Pro: one call (x402: $0.01 per call); includes raw_payload and status_history
GET /v1/diff?since=API key or x402Pro: one call or rows returned, whichever is higher (x402: $0.02 per call)
GET /v1/export?since=&cursor=API key onlyrows returned; NDJSON, up to 10,000 rows per page
GET/POST /v1/watchlistsAPI key onlyincluded in Pro
GET/PATCH/DELETE /v1/watchlists/{id}API key onlyincluded in Pro
POST /v1/keys/rotateAPI key onlynone

Filters for /v1/recalls

ParameterValues
brandBrand, firm, or co-packer name, whole-word match. Repeatable.
companyCompany slug, as in /company/{slug}.
qFree text over product, reason, and firm.
agencyfda_food, fda_drug, fda_device, fsis, cpsc
classI, II, III, PHA. Repeatable. Rows with no class (CPSC) are included.
statusongoing, terminated, completed, unknown
activetrue for ongoing, or unknown for agencies without status
since, untilYYYY-MM-DD on published date
cursorThe next_cursor from the previous page
limit1 to 1000, default 100

Response shape

{
  "data": [ { "id": "…", "slug": "…", "agency": "fda_food", "official_id": "H-1266-2026", "class": "II", "status": "ongoing",
              "product_raw": "…", "firm_norm": "…", "reason": "…", "published_at": "2026-09-02", "source_url": "https://…", "url": "https://recallradar.withglint.app/recalls/…" } ],
  "next_cursor": "…",
  "meta": { "count": 100, "disclaimer": "…", "freshness_url": "https://recallradar.withglint.app/v1/freshness" }
}

Errors: { "error": { "code": "invalid_filter", "message": "…", "retryable": false } } with a matching HTTP status.

Authentication

API key

Subscribe on the pricing page to get a key, then send it as a bearer token:

curl -H "Authorization: Bearer rk_…" "https://recallradar.withglint.app/v1/recalls?brand=Publix&since=2026-08-01&class=I&limit=50"

x402 (pay per call)

Agents without an account can pay per call with USDC on Base Sepolia (testnet) using x402 version 2. A request with no key or payment returns HTTP 402. The PAYMENT-REQUIRED header (base64 JSON) lists what the route accepts. Retry with a PAYMENT-SIGNATURE header; on success the response carries PAYMENT-RESPONSE. Single-recall and diff calls use the exact scheme at a fixed price. Search uses upto: you authorize limit rows and are settled only for the rows returned. Nothing is charged for an error response.

curl -i "https://recallradar.withglint.app/v1/recalls/00e71dc849275243dea29eb5e0dbbcaa"
HTTP/1.1 402 Payment Required
PAYMENT-REQUIRED: eyJ4NDAyVmVyc2lvbiI6Mi…

Change feed

curl -H "Authorization: Bearer rk_…" "https://recallradar.withglint.app/v1/diff?since=2026-09-12T06:00:00Z"

Returns created and updated recalls. Only a real change at the agency (a new payload or a status change) counts as updated.

MCP

RecallRadar is an MCP server at POST https://recallradar.withglint.app/mcp (Streamable HTTP, protocol version 2026-07-28, stateless). Authenticate with Authorization: Bearer rk_… or pay with x402.

Tool or resourceWhat it doesAccess
search_recallsSame filters as /v1/recallspaid, per row
get_recallOne recall with raw payload and status historypaid
diff_sinceNew and updated recalls since a timestamppaid, fixed price
list_agenciesAgencies and what they coverfree
recall://{id}Resource form of get_recallpaid
brief://{date}A published daily brieffree
curl -X POST https://recallradar.withglint.app/mcp -H "Content-Type: application/json" -H "Authorization: Bearer rk_…" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_recalls","arguments":{"brands":["Publix"],"limit":10}}}'

Free alternatives

Every recall has a public page on this site, and the daily brief is free as RSS and JSON Feed.

RecallRadar indexes public recall notices from the FDA, USDA FSIS, and CPSC. The official agency notice is the authoritative source. Always confirm details at the linked source before acting. Every row includes source_url, which is the authoritative record.