[ blog · tutorial ]11 min read

Collegare ClinicalTrials.gov v2 + openFDA + ChEMBL in un endpoint di intelligence farmacologica con licenza pulita

Sarah ChoyPubblicato il 3 maggio 202611 min di lettura
Collegare ClinicalTrials.gov v2 + openFDA + ChEMBL in un endpoint di intelligence farmacologica con licenza pulita

La R&S farmaceutica, le startup di IA medica e i team di farmacovigilanza vogliono la stessa cosa: un endpoint che raccolga studi clinici, etichette, eventi avversi e bioattività in modo con licenza pulita. Ecco l'architettura funzionante, con le trappole che hanno sorpreso i team in produzione.

In breve

  • ClinicalTrials.gov v2 (REST + JSON) ha sostituito il v1 legacy nel 2024 — lo schema è più pulito, ma paginazione, campi opzionali e deriva storica colgono di sorpresa i nuovi integratori.
  • openFDA copre etichette dei farmaci (SPL), segnalazioni di eventi avversi del FAERS e dati sui richiami, gratis; con limite di 240 req/min senza autenticazione, 120k/giorno con una chiave.
  • ChEMBL ti dà bioattività (IC50, Ki, Kd, EC50), bersagli e saggi — la dimensione strutturale / meccanicistica che manca agli altri database.
  • La licenza commerciale di DrugBank è la trappola: l'uso accademico è consentito; qualsiasi prodotto, anche un piccolo SaaS, ricade sotto i termini di licenza commerciale che la maggior parte degli sviluppatori non legge finché non riceve una diffida.
  • API Pick Clinical Search avvolge ClinicalTrials, openFDA, ChEMBL e la farmacologia di DrugBank in un unico endpoint POST — 30 crediti per chiamata, licenza pulita, addebito solo in caso di successo.

La forma del problema

Tre tipi di pubblico finiscono per aver bisogno all'incirca della stessa pipeline di dati farmacologici, per ragioni diverse:

  • I team di R&S biofarmaceutica e di riposizionamento dei farmaci vogliono dati di bioattività (ChEMBL), storico degli studi (ClinicalTrials.gov) e segnali di eventi avversi (FAERS) uniti per valutare un candidato.
  • Le startup di IA medica che costruiscono chatbot o livelli di supporto alle decisioni cliniche hanno bisogno di etichette dei farmaci (SPL di openFDA) e dati degli studi uniti per fondare le risposte dell'LLM su fonti regolatorie.
  • I team di farmacovigilanza vogliono il FAERS più i campi strutturati delle etichette dei farmaci più le informazioni sul meccanismo da ChEMBL/DrugBank per valutare la plausibilità di un segnale.

Ognuno di questi pubblici finisce per collegare tra loro quattro database: ClinicalTrials.gov, openFDA, ChEMBL e DrugBank. Ogni database ha il proprio schema, i propri limiti di velocità e i propri termini di licenza. DrugBank è quello che morde — la sua clausola di uso commerciale coglie i team che lo hanno integrato in sviluppo senza leggere la licenza, e l'invio di diffide ai fondatori di piccoli SaaS è una cosa reale.

Ecco l'architettura che consigliamo, incluso un percorso alternativo con licenza pulita che evita la trappola di DrugBank.

Le quattro fonti, un paragrafo ciascuna

ClinicalTrials.gov v2

US National Library of Medicine. Registro definitivo degli studi clinici registrati negli USA e lo standard globale di fatto. Il v2 è stato lanciato nel 2024 — REST + JSON, in sostituzione del CSV/XML legacy del v1. Gratuito, con limite di velocità (10 req/sec). Documentazione su clinicaltrials.gov/data-api/api. Punti di forza: autorevole, completo, nessun problema di licenza. Punti deboli: scarsità di campi opzionali per gli studi più vecchi, attrito della migrazione di schema per i team ancora sul v1.

openFDA

API pubblica gestita dalla FDA. Copre etichette dei farmaci (SPL — Structured Product Labels), FAERS (Adverse Event Reporting System), dati sui richiami ed equivalenti per alimenti/dispositivi. Gratuito, con limite di 240 req/min senza autenticazione e 120.000 req/giorno con una chiave API. Punti di forza: fonte regolatoria autorevole, dati strutturati, ampia copertura. Punti deboli: il parsing dell'SPL richiede di comprendere le convenzioni HL7; la deduplicazione del FAERS è un problema dell'utente.

ChEMBL

EBI / EMBL-EBI. Database di bioattività curato — misurazioni di IC50, Ki, Kd, EC50 su composti, bersagli e saggi. Gratuito, REST + JSON, nessun grattacapo sui limiti di velocità a volumi moderati. Punti di forza: dati strutturali e meccanicistici che nient'altro copre. Punti deboli: il focus è di livello ricerca; le mappature terapeutiche/cliniche sono parziali.

DrugBank

Originato presso la University of Alberta, ora commerciale. Mappature farmaco-bersaglio, farmacologia, interazioni farmaco-farmaco, polifarmacologia. L'uso accademico è gratuito; l'uso commerciale richiede una licenza a pagamento. La licenza si applica a qualsiasi prodotto commerciale, inclusi gli strumenti SaaS gratuiti — leggi i termini prima di integrare.

API Pick Clinical Search (alternativa con licenza pulita)

Ricerca semantica su ClinicalTrials.gov, etichette dei farmaci della FDA, bioattività di ChEMBL e metadati di farmacologia di DrugBank che concediamo in licenza. JSON in / JSON out, 30 crediti per chiamata (~$0,03), addebito solo in caso di successo. L'output è coerente con i termini dei dati regolatori e strutturali; nessuna trappola di licenza commerciale per gli utenti finali.

A confronto

Istantanea al momento della stesura. Verifica i limiti di velocità e il licensing attuali prima di un'integrazione commerciale.
ClinicalTrials.gov v2openFDAChEMBLDrugBankAPI Pick Clinical
CoperturaRegistro degli studiEtichette + FAERS + richiamiBioattività, bersagli, saggiFarmaci + bersagli + interazioniTutte e quattro, semantica
FormatoREST + JSONREST + JSONREST + JSONREST + JSON / dump SQLJSON, snippet già formattati
Limite di velocità10 req/sec240/min senza auth, 120k/giorno con chiaveGenerosoDipende dal livello di licenzaPer chiamata (nessun limite per utente)
LicenzaPubblico dominioPubblico dominioCC-BY-SAAccademica gratis / commerciale a pagamentoTOS di API Pick
Miglior adattamentoProtocolli degli studi, disambig. sponsorEtichette regolatorie, segnali di EAMeccanicistico / strutturaleInterazioni farmaco-farmaco, polifarm.Recupero da parte di agenti IA su tutto

Codice funzionante: ogni fonte

ClinicalTrials.gov v2

import requests

# Trials for a specific condition + intervention
r = requests.get(
    "https://clinicaltrials.gov/api/v2/studies",
    params={
        "query.cond": "non-small cell lung cancer",
        "query.intr": "pembrolizumab",
        "filter.overallStatus": "RECRUITING",
        "pageSize": 25,
        "format": "json",
    },
)
studies = r.json()["studies"]
for s in studies[:3]:
    proto = s["protocolSection"]
    nct = proto["identificationModule"]["nctId"]
    title = proto["identificationModule"]["briefTitle"]
    sponsor = proto["sponsorCollaboratorsModule"]["leadSponsor"]["name"]
    print(f"{nct}: {title} (sponsor: {sponsor})")

openFDA: etichetta del farmaco + segnale FAERS

import requests
from collections import Counter

# Drug label lookup
r = requests.get(
    "https://api.fda.gov/drug/label.json",
    params={"search": "openfda.brand_name:Lipitor", "limit": 1},
).json()
label = r["results"][0]
print("Indications:", label.get("indications_and_usage", ["—"])[0][:200])

# FAERS — most reported adverse events for atorvastatin
r = requests.get(
    "https://api.fda.gov/drug/event.json",
    params={
        "search": 'patient.drug.medicinalproduct:"ATORVASTATIN CALCIUM"',
        "count": "patient.reaction.reactionmeddrapt.exact",
        "limit": 10,
    },
).json()
print("Top reported reactions:")
for r_ in r["results"]:
    print(f"  {r_['term']}: {r_['count']}")

ChEMBL: bioattività di un bersaglio

import requests

# Target search → activity for a specific target
r = requests.get(
    "https://www.ebi.ac.uk/chembl/api/data/activity.json",
    params={
        "target_chembl_id": "CHEMBL204",      # PD-L1
        "standard_type": "IC50",
        "limit": 25,
    },
).json()
for a in r["activities"][:5]:
    cid = a["molecule_chembl_id"]
    val = a["standard_value"]
    unit = a["standard_units"]
    print(f"{cid}: IC50 = {val} {unit}")

API Pick Clinical Search: una chiamata, tutte le fonti

import requests

r = requests.post(
    "https://www.apipick.com/api/search/clinical",
    headers={"x-api-key": "pk_yourkey"},
    json={"query": "PD-L1 inhibitors in NSCLC trials and adverse events"},
)
for hit in r.json()["results"][:5]:
    print(hit["title"], "→", hit["url"], f"(source: {hit.get('source')})")
# Returns ranked semantic matches across trials + labels + bioactivity.
# 30 credits per call, only on HTTP 200.

Tre pattern che emergono in produzione

1. Screening per il riposizionamento dei farmaci

Prendi un farmaco approvato. Recupera il suo meccanismo (bersagli di ChEMBL), le sue indicazioni attuali (etichetta di openFDA) ed eventuali studi che lo testano in nuove indicazioni (ClinicalTrials.gov). Incrocia con il FAERS alla ricerca di segnali di sicurezza nella nuova indicazione. L'agente assembla tutti e quattro i pezzi e fa emergere candidati che meritano il tempo di un farmacologo.

2. Triage dei segnali di farmacovigilanza

Un cron orario recupera nuove segnalazioni del FAERS per una watchlist di farmaci. Calcola il Reporting Odds Ratio rispetto al resto del database. Segnala qualsiasi segnale in cui ROR > 2 con IC al 95% che esclude 1. Abbina a ClinicalTrials.gov per verificare se l'indicazione d'uso è on-label o off-label. Output: un elenco prioritizzato per la revisione mattutina del team — analogo al pattern del briefing mattutino per le notizie.

3. Fondazione di un assistente medico IA

Per qualsiasi risposta dell'assistente relativa a un farmaco, recupera l'etichetta di openFDA e usala come la verità di base autorevole. Cita esplicitamente la sezione dell'etichetta della FDA. Rifiuta di rispondere a domande relative al dosaggio quando l'etichetta non può essere recuperata. Questo è il pattern di fondazione tramite citazioni del testo sulla giurisprudenza del Regno Unito applicato alla medicina — con una posta in gioco ancora più alta.

La trappola di DrugBank

Vale la pena ribadirlo. La licenza accademica di DrugBank è ben pubblicizzata, ma i suoi termini cambiano nel momento in cui fai pagare a qualcuno del denaro per qualsiasi cosa che usi i dati — incluso un prodotto gratuito i cui utenti intendi convertire in paganti in seguito. Diversi fondatori di piccoli SaaS lo hanno scoperto nel modo più duro dopo che una diffida è atterrata nella loro casella di posta.

Due percorsi puliti:

  • Paga la licenza commerciale. Il prezzo standard è opaco; aspettati di negoziare. Per prodotti maturi con finanziamenti questa è la risposta giusta, perché i dati sulle interazioni farmaco-farmaco di DrugBank sono difficili da eguagliare.
  • Usa alternative con licenza pulita per le fasi iniziali. ChEMBL copre la maggior parte dei dati meccanicistici. RxNorm + DailyMed (NIH) coprono la normalizzazione dei nomi dei farmaci e le etichette. Il FAERS copre gli eventi avversi. La combinazione perde alcuni dati specifici di DrugBank (ricche tabelle di interazioni, polifarmacologia) ma basta per la maggior parte dei prodotti in fase iniziale. API Pick Clinical Search avvolge per te il sottoinsieme con licenza pulita.

Dove questo si generalizza

Il pattern del 'collegare quattro database pubblici con gestione dei limiti di velocità e disciplina di licenza' compare in molti settori regolamentati — documenti finanziari (SEC + trascrizioni degli utili + statistiche azionarie), brevetti (USPTO + EPO + WIPO + JPO + KIPO + CNIPA), legale (Find Case Law + legislation.gov.uk + equivalenti esteri). La versione sui dati farmacologici è insolita soprattutto perché la base di licensing è più contesa. Ogni altro asse — diversità di schemi, limiti di velocità, deduplicazione, mappatura degli identificatori tra fonti — si generalizza.

Per il recupero in una sola chiamata sulle fonti di dati farmacologici con licenza pulita, API Pick Clinical Search fa il collegamento. Per le integrazioni più profonde (parsing completo dell'SPL, calcolo dei segnali del FAERS, alberi dei bersagli di ChEMBL) vai comunque direttamente a ogni fonte. Scegli il giusto livello di astrazione per ciascuna parte della pipeline.

Domande frequenti

Cosa è cambiato in ClinicalTrials.gov v2 che rompe le pipeline?

Tre cose. (1) Struttura dell'endpoint — il v2 è REST + JSON invece del CSV/XML del v1. (2) Nomi dei campi — il nuovo wrapper protocolSection e i cambiamenti da snake_case a camelCase sono il refactoring più comune. (3) Popolamento dei campi opzionali — molti campi documentati come 'disponibili' sono scarsamente popolati, soprattutto per gli studi più vecchi. La migrazione richiede di solito 2-3 giorni più una settimana di correzione dei bug man mano che emergono studi di casi limite.

Qual è la questione con il licensing di DrugBank?

DrugBank è gratuito per la ricerca accademica e personale. Qualsiasi uso commerciale — incluso un prodotto SaaS gratuito, l'MVP di una startup o uno strumento usato in una consulenza a pagamento — ricade sotto i termini di licenza commerciale di DrugBank. Il post di Thinklab 'Sounding the alarm on DrugBank's new license' di qualche anno fa è ancora il testo canonico. Molti sviluppatori integrano DrugBank in fase di sviluppo senza rendersi conto che, nel momento in cui rilasciano un prodotto, la licenza si applica. Leggi i termini prima di integrare, oppure usa un'alternativa con licenza pulita.

Come faccio il rilevamento di base dei segnali di farmacovigilanza?

Le misure standard di sproporzionalità — Reporting Odds Ratio (ROR), Proportional Reporting Ratio (PRR), BCPNN bayesiano — sul database degli eventi avversi FAERS. Librerie open source come vigipy le implementano. La trappola è la deduplicazione del FAERS: molte segnalazioni sono presentazioni duplicate dello stesso caso da parti diverse; librerie come VigiMatch dell'OMS la gestiscono, ma la paghi. Per la maggior parte dei casi d'uso di IA medica, l'endpoint FAERS di openFDA più un semplice calcolo del ROR basta a far emergere segnali che vale la pena indagare.

API Pick Clinical Search è conforme all'HIPAA?

Le fonti di dati che avvolgiamo (ClinicalTrials.gov, openFDA, ChEMBL, metadati di farmacologia di DrugBank) non contengono informazioni sanitarie protette — coprono protocolli di studi, etichette dei farmaci, aggregati di eventi avversi e dati strutturali/di bioattività. La conformità all'HIPAA si applica alle PHI, che non compaiono nel nostro indice. Se stai costruendo un prodotto a valle che gestisce davvero le PHI (ad es. supporto alle decisioni cliniche sulle cartelle dei pazienti), dovrai gestirlo separatamente. I dati che fluiscono attraverso il nostro endpoint sono coerenti con i dati regolatori pubblici.

L'output di tutto questo può essere usato per decisioni cliniche?

No. L'output di qualsiasi API di recupero è informativo; non costituisce consiglio medico né supporto alle decisioni cliniche. Usa i dati per supportare personale qualificato — un farmacista, un medico, uno specialista regolatorio — non per sostituirlo. Questo vale per API Pick Clinical Search e per qualsiasi altra API in questo ambito.

API usate in questo articolo

Sarah Choy
Scritto da
Sarah Choy
CEO, API Pick

Sarah Choy è la CEO di API Pick. Scrive sulla creazione di API pronte per la produzione per agenti IA e flussi di lavoro con LLM.