API and MCP

The same data the app shows, for your own code or your own agent: FDA actions, SEC filings and ClinicalTrials.gov records for life-science companies, cleaned, linked to one company id and classified. One key works for the REST API and the MCP server. Informational only; every record links to its public source.

Get a key on your profile page (any account, free plan included). Agent-readable copy of this page: /developers.md.

Why this and not openFDA

The records are free. What costs weeks is the wiring: six openFDA endpoints, the FDA Data Dashboard behind an issued key, four FDA HTML tables with no feed, the Federal Register, the eCFR versioner, EDGAR full-text search plus XBRL frames plus the Form D data sets, the ClinicalTrials.gov API, a Purple Book CSV, a DECRS zip and a device-registration bulk export, each on its own schedule and its own idea of a company name. We poll all of it, put every record in one shape, resolve the company once (FDA name, SEC filer, trial sponsor, FEI numbers), classify it, map every CFR citation to its GxP area, and say when each source was last read.

  • Supplier and site vetting in your own system. One call for a CDMO or CRO: every registered site, every inspection outcome, 483, letter, recall and import alert, with the agency's record linked.
  • Sales triggers. A nightly job over your account list: who was just inspected, cited, funded or cleared. Your CRM gets the row; your rep gets the reason.
  • Research by an agent. “Which of these forty companies has an OAI inspection, a CRL or a clinical hold since January, and what did FDA cite?” is one conversation with the MCP server, not a week of tabs.
  • Diligence and screening. Trials, runway, raises, licensed products and the compliance record on one company id, so a screen written once runs every morning.

Records, links and our classification, never a verdict. The conclusion stays yours.

Use it from your agent (MCP)

Remote MCP server at https://app.approvesuite.com/api/mcp, Streamable HTTP, bearer key. Claude Code:

claude mcp add --transport http approvesuite https://app.approvesuite.com/api/mcp \
  --header "Authorization: Bearer $APPROVE_SUITE_KEY"

Claude Desktop, ChatGPT and Cursor take the same URL as a custom connector or in their MCP settings:

{
  "mcpServers": {
    "approvesuite": {
      "url": "https://app.approvesuite.com/api/mcp",
      "headers": { "Authorization": "Bearer as_live_…" }
    }
  }
}

Or paste this into your agent and let it do the setup:

Read https://approvesuite.com/developers.md, then help me set up the Approve Suite MCP server.

Tools: search_events, get_event, count_events*, find_company, resolve_company, company_detail, explore_companies*, search_trials, analytics_rollup*, search_facilities, taxonomy, sources. * Pro and API plans.

Use it from code (REST)

Base URL https://app.approvesuite.com/api/v1. GET only, JSON in and out, the same filters as the MCP tools. OpenAPI 3.1.

curl -H "Authorization: Bearer $APPROVE_SUITE_KEY" \
  "https://app.approvesuite.com/api/v1/events?event_types=warning_letter,inspection_classification&from=2026-10-01"
GET /eventsevents by type, source, severity, GxP area, product type, modality, stage, company, text, date
GET /events/{id}one event: summary, why it matters, tags, CFR references with GxP area, confirmed companies, source link
GET /events/facetscounts by type and severity, optionally per company
GET /companiesscreen companies by trials, stage, headquarters, cash, runway, recent raises
GET /companies/resolve?name=a name to a canonical company id, with the basis of the match
GET /companies/search?name=name or alias contains
GET /companies/{id}identity, trials since 2021, financials and runway, raises, licensed biologics, recent events
GET /companies/{id}/events | /trials | /facilitiesthat company's records
GET /trialsClinicalTrials.gov mirror: status, phase, area, modality, dates
GET /facilitiesFDA-registered establishments by FEI, name, country, state, kind
GET /analytics/{slice}pre-aggregated counts: events-over-time, inspections, warning-letters-by-cfr, trials, recalls
GET /taxonomyevery code the filters accept
GET /sourceseach source's schedule, health and last successful read
Python
import requests
r = requests.get("https://app.approvesuite.com/api/v1/companies/resolve", params={"name": "Lonza"},
                 headers={"Authorization": f"Bearer {KEY}"})
company = r.json()["company"]
events = requests.get(f"https://app.approvesuite.com/api/v1/companies/{company['id']}/events",
                      headers={"Authorization": f"Bearer {KEY}"}).json()["events"]
TypeScript
const headers = { Authorization: `Bearer ${process.env.APPROVE_SUITE_KEY}` };
const { company } = await fetch("https://app.approvesuite.com/api/v1/companies/resolve?name=Lonza", { headers }).then((r) => r.json());
const { events } = await fetch(`https://app.approvesuite.com/api/v1/companies/${company.id}/events`, { headers }).then((r) => r.json());

What you get

  • Events from every source the app reads (FDA warning letters, inspection outcomes and citations, Form 483s, recalls, drug shortages, safety communications, OPDP letters, debarments, import alerts, approvals, CRLs, 510(k)s and PMAs, Federal Register rules and guidance, eCFR amendments, ClinicalTrials.gov changes, SEC 8-Ks), each with a one-line summary, why it matters, severity, GxP area, product type, modality, stage, CFR references mapped to GxP area and citing guidances, and the companies confirmed as named in it.
  • Companies: one id across FDA, SEC and ClinicalTrials.gov, with aliases, FEI numbers, CIK and ticker; trials since 2021; cash, burn and runway; Form D and public-offering raises; licensed biologics; FDA-registered establishments.
  • Reference: the taxonomy, and each source's schedule and last successful read, so you know how fresh a row is.

Not in the API: candidate (unreviewed) company links, classifier internals, full source documents (links instead), anything a subscriber created.

Plans

PlanRequests a monthPer minuteWindow
Free key1,00010last 7 days of events; the full company graphAny account, no card. Core tools.
Included in Pro ($79/mo)10,00060full archiveEvery tool. For one person's own agent.
API plan ($99/mo, $990/yr)100,000300full archiveEverything in Pro plus the quota. For systems and products: internal use, and display to your own users with attribution.

Only successful calls count: errors, refusals and rate-limited requests do not. Past the quota the API answers 402 until the month resets. Redistribution, bulk snapshots or an OEM licence: email info@approvesuite.com.

Conventions

  • Authorization: Bearer as_live_…. Keys are created and revoked on your profile page; up to five at a time.
  • Errors are RFC 9457 problem documents: 401 bad key, 402 quota or plan, 429 rate limit with Retry-After, 400 invalid parameters.
  • Lists accept comma-separated values (event_types=recall,warning_letter); dates are YYYY-MM-DD; limit is at most 100.
  • Every response carries as_of and rate-limit headers. Ids never change.
  • Licence: use the data in your own products and systems; show the source and Approve Suite when you display it; do not re-serve the dataset as such or train models on our summaries without an agreement. Terms.

Start with a free key. No card.

Create an account