Accurate FDA PDUFA decision dates for US-listed biotechs — extracted from primary SEC filings, accuracy-tested, and served to your agent per call over x402.
A PDUFA date is the day the FDA is scheduled to decide on a drug — a binary, market-moving event. Biotech Catalyst Sentinel watches both US 8-K filings and foreign-issuer 6-K filings the moment they're published, uses an LLM to extract the decision date, and keeps only dates whose exact wording is quoted verbatim from the filing. The result is a clean, machine-readable feed of upcoming catalysts and their change history — two paid endpoints, plus a free, independently auditable accuracy track record.
And what it doesn't cover. A PDUFA date is public only because a company chose to announce it — the FDA doesn't publish goal dates in advance. Reading SEC filings means we see the issuers who disclose, which skews to small- and mid-caps where one decision is material, and misses large-cap sponsors who never file an 8-K about a single drug. Our measured coverage is published, unflattered, right next to the accuracy numbers on the track record page — we'd rather you read it there than discover it later.
Every record links to the exact SEC filing it came from. No press-release telephone game, no aggregated guesses.
Tracks both US 8-K filers and foreign issuers that disclose PDUFA dates via 6-K — two filing types, one feed, straight from EDGAR.
Most trackers only note approvals. We capture FDA Complete Response Letters — rejections, the outcome a short position lives or dies on — from the company's own filing and the FDA's records, and put them on the public scorecard next to the approvals.
openFDA's main drug dataset omits many CBER-regulated biologics (gene and cell therapies, blood factors). We recover their approvals from the FDA Purple Book — so the newest, highest-stakes modalities aren't a blind spot.
A date is published only if its source quote appears word-for-word in the filing text. Anything uncertain is held back for human review, never shipped.
Each catalyst is one entity with an event timeline. When the FDA pushes a date back or a decision lands, the record updates and keeps the change on file — so your agent acts on the current date, not a superseded one.
JSON only, no account, no signup, no subscription. Discoverable and payable autonomously via the x402 standard.
Being right is the entire product. One wrong date on a binary event and an agent operator silently churns forever — so accuracy is measured, published, and free to check before you ever pay.
A 2023–2025 historical backtest plus every live decision since (n=99 matched FDA decisions, including captured rejections), self-updating as new decisions resolve.
Three endpoints. Two paid, one free. Base URL https://api.biotechcatalystsentinel.com
# Without payment you get the x402 challenge: curl https://api.biotechcatalystsentinel.com/v1/catalysts/upcoming # → HTTP 402 Payment Required (accepts: Base or Solana USDC, $0.02) # Response after payment (one record shown): { "data": [{ "drug_name": "ONS-5010/LYTENAVA (bevacizumab-vikg)", "company": "Outlook Therapeutics, Inc.", "ticker": "OTLK", "indication": "wet AMD", "pdufa_date": "2026-07-29", "stage": "set", "confidence": "high", "source_url": "https://www.sec.gov/Archives/edgar/..." }], "meta": { "total": 1 } }
# One event (a resolved decision shown); upcoming events carry their forward date + link too: { "data": [{ "event_type": "decision_outcome", "drug_name": "ONS-5010/LYTENAVA (bevacizumab-vikg)", "ticker": "OTLK", "new_date": "2025-08-27", "outcome": "approved", "source_url": "https://www.sec.gov/Archives/edgar/..." }], "meta": { "total": 1 } }
Agents can auto-discover pricing and schema at /.well-known/x402.
Built on x402, the open HTTP micropayment standard. Any x402-aware client handles the 402 → pay → retry handshake for you — your agent just makes a GET and gets data back.
# Python — an x402 client signs & settles automatically from x402 import x402ClientSync from x402.http.clients.requests import x402_requests # ...register your Base or Solana signer, then: resp = session.get("https://api.biotechcatalystsentinel.com/v1/catalysts/upcoming") print(resp.json()["data"]) # settled in USDC; ~$0.02
Payer pays only the stablecoin — gas is handled by the facilitator. Works with any x402 client (Python, JS x402-fetch, etc.).