Send a GET request to https://api.fda.gov/drug/event.json with a search parameter using Lucene query syntax, e.g. search=patient.drug.medicinalproduct:aspirin to find adverse event reports mentioning a drug.
Use limit (max 1000 per request) and skip for pagination; for large result sets, iterate using skip offsets up to the total count returned in meta.results.total.
To aggregate counts by reaction, use the count endpoint: https://api.fda.gov/drug/event.json?search=...&count=patient.reaction.reactionmeddrapt.exact to get a frequency breakdown by MedDRA preferred term.
Apply an API key (obtained free from https://open.fda.gov/apis/authentication/) to get higher rate limits (240 requests/minute vs 40 without a key); include it as the api_key query parameter.
Filter by seriousness flags (e.g. serious:1, seriousnesslifethreatening:1) to focus on clinically significant reports.
Supplement openFDA data with results.safetyreportid and results.reportduplicate fields to identify and exclude duplicate reports when doing quantitative analysis.
Known gotchas
openFDA adverse event data is self-reported and reflects reports submitted to FDA FAERS; it is subject to significant reporting biases, duplicate records, and inconsistent drug name spelling—do not use raw counts as an indicator of true incidence rates.
Drug names in FAERS are free-text and inconsistently spelled; search by active ingredient or use the openfda.generic_name or openfda.brand_name nested fields, which are FDA-normalized, rather than the raw medicinalproduct field alone.
openFDA data is not real-time; there is a lag between adverse event submission and database availability, and historical data corrections occur regularly—treat exports as point-in-time snapshots.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp