Câbler ClinicalTrials.gov v2 + openFDA + ChEMBL dans un endpoint d'intelligence pharmaceutique au licensing propre

La R&D pharma, les startups de medical-AI et les équipes de pharmacovigilance veulent toutes la même chose : un endpoint unique qui agrège essais, étiquettes, événements indésirables et bioactivité de façon licensing-propre. Voici l'architecture qui fonctionne, avec les chausse-trappes qui ont surpris des équipes en production.
L'essentiel
- •ClinicalTrials.gov v2 (REST + JSON) a remplacé l'ancien v1 en 2024 — le schéma est plus propre mais la pagination, les champs optionnels et la dérive historique piègent les nouveaux intégrateurs.
- •openFDA couvre les étiquettes médicamenteuses (SPL), les rapports d'événements indésirables FAERS et les données de rappel, gratuitement ; limité à 240 req/min sans authentification, 120k/jour avec une clé.
- •ChEMBL vous donne la bioactivité (IC50, Ki, Kd, EC50), les cibles et les essais — la dimension structurelle / mécanistique qui manque aux autres bases.
- •La licence commerciale de DrugBank est le piège : l'usage académique est autorisé ; tout produit, même un petit SaaS, relève de conditions de licence commerciale que la plupart des développeurs ne lisent pas avant de recevoir une mise en demeure.
- •API Pick Clinical Search enveloppe la pharmacologie de ClinicalTrials, openFDA, ChEMBL et DrugBank dans un seul endpoint POST — 30 crédits par appel, licensing propre, facturation uniquement en cas de succès.
La forme du problème
Trois publics finissent par avoir besoin à peu près du même pipeline de données médicamenteuses, pour des raisons différentes :
- Les équipes de R&D biopharma et de repositionnement de médicaments veulent les données de bioactivité (ChEMBL), l'historique des essais (ClinicalTrials.gov) et les signaux d'événements indésirables (FAERS) reliés pour évaluer un candidat.
- Les startups de medical-AI qui construisent des chatbots ou des couches d'aide à la décision clinique ont besoin des étiquettes médicamenteuses (SPL openFDA) et des données d'essais reliées pour ancrer les réponses des LLM dans des sources réglementaires.
- Les équipes de pharmacovigilance veulent FAERS plus les champs structurés des étiquettes médicamenteuses plus les informations de mécanisme de ChEMBL/DrugBank pour évaluer la plausibilité d'un signal.
Chacun de ces publics finit par câbler ensemble quatre bases de données : ClinicalTrials.gov, openFDA, ChEMBL et DrugBank. Chaque base a son propre schéma, ses limites de débit et ses conditions de licence. DrugBank est celle qui mord — sa clause d'usage commercial attrape les équipes qui l'ont intégrée en dev sans lire la licence, et les mises en demeure envoyées aux fondateurs de petits SaaS sont une réalité.
Voici l'architecture que nous recommandons, avec une voie alternative au licensing propre qui évite le piège DrugBank.
Les quatre sources, un paragraphe chacune
ClinicalTrials.gov v2
US National Library of Medicine. Registre de référence des essais cliniques enregistrés aux États-Unis et standard mondial de facto. v2 lancé en 2024 — REST + JSON, remplaçant l'ancien CSV/XML de v1. Gratuit, limité en débit (10 req/sec). Documentation sur clinicaltrials.gov/data-api/api. Forces : faisant autorité, exhaustif, aucun problème de licence. Faiblesses : champs optionnels peu renseignés pour les études anciennes, frictions de migration de schéma pour les équipes encore sur v1.
openFDA
API publique gérée par la FDA. Couvre les étiquettes médicamenteuses (SPL — Structured Product Labels), FAERS (Adverse Event Reporting System), les données de rappel, et les équivalents alimentaires/dispositifs. Gratuit, limité à 240 req/min sans authentification et 120 000 req/jour avec une clé API. Forces : source réglementaire faisant autorité, données structurées, couverture large. Faiblesses : le parsing des SPL demande de comprendre les conventions HL7 ; la déduplication de FAERS est à la charge de l'utilisateur.
ChEMBL
EBI / EMBL-EBI. Base de bioactivité curée — mesures d'IC50, Ki, Kd, EC50 sur des composés, des cibles et des essais. Gratuit, REST + JSON, sans casse-tête de limite de débit à volume modéré. Forces : des données structurelles et mécanistiques que rien d'autre ne couvre. Faiblesses : l'orientation est research-grade ; les correspondances thérapeutiques/cliniques sont partielles.
DrugBank
Né à l'University of Alberta, désormais commercial. Correspondances médicament-cible, pharmacologie, interactions médicamenteuses, polypharmacologie. L'usage académique est gratuit ; l'usage commercial nécessite une licence payante. La licence s'applique à tout produit commercial, y compris les outils SaaS gratuits — lisez les conditions avant d'intégrer.
API Pick Clinical Search (alternative au licensing propre)
Recherche sémantique sur ClinicalTrials.gov, les étiquettes médicamenteuses de la FDA, la bioactivité ChEMBL et les métadonnées pharmacologiques de DrugBank que nous licençons. JSON en entrée / JSON en sortie, 30 crédits par appel (~$0.03), facturation uniquement en cas de succès. La sortie est cohérente avec les conditions des données réglementaires et structurelles ; aucun piège de licence commerciale pour les utilisateurs finaux.
Côte à côte
| ClinicalTrials.gov v2 | openFDA | ChEMBL | DrugBank | API Pick Clinical | |
|---|---|---|---|---|---|
| Couverture | Registre d'essais | Étiquettes + FAERS + rappels | Bioactivité, cibles, essais | Médicaments + cibles + interactions | Les quatre, en sémantique |
| Format | REST + JSON | REST + JSON | REST + JSON | REST + JSON / dumps SQL | JSON, snippets pré-mis en forme |
| Limite de débit | 10 req/sec | 240/min sans auth, 120k/jour avec clé | Généreuse | Dépend du palier de licence | Par appel (pas par utilisateur) |
| Licence | Domaine public | Domaine public | CC-BY-SA | Académique gratuit / commercial payant | CGU API Pick |
| Meilleur usage | Protocoles d'essais, désambiguïsation de sponsor | Étiquettes réglementaires, signaux d'EI | Mécanistique / structurel | Interactions médicamenteuses, polypharm | Retrieval d'agent IA sur l'ensemble |
Code qui tourne : chaque source
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 : étiquette médicamenteuse + signal 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 : bioactivité d'une cible
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 : un appel, toutes les sources
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.Trois patterns qui reviennent en production
1. Criblage pour le repositionnement de médicaments
Prenez un médicament approuvé. Récupérez son mécanisme (cibles ChEMBL), ses indications actuelles (étiquette openFDA) et tout essai le testant dans de nouvelles indications (ClinicalTrials.gov). Croisez avec FAERS pour repérer les signaux de sécurité dans la nouvelle indication. L'agent assemble les quatre pièces et fait remonter les candidats qui méritent le temps d'un pharmacologue.
2. Triage de signaux de pharmacovigilance
Un cron horaire récupère les nouveaux rapports FAERS pour une watchlist de médicaments. Calculez le Reporting Odds Ratio par rapport au reste de la base. Signalez tout signal où le ROR > 2 avec un IC à 95 % excluant 1. Couplez avec ClinicalTrials.gov pour vérifier si l'indication d'usage est on-label ou off-label. Sortez une liste classée pour la revue matinale de l'équipe — analogue au pattern de briefing matinal pour l'actualité.
3. Ancrage d'un assistant médical IA
Pour toute réponse liée à un médicament que donne l'assistant, récupérez l'étiquette openFDA et utilisez-la comme vérité de référence faisant autorité. Citez explicitement la section concernée de l'étiquette FDA. Refusez de répondre aux questions de posologie quand l'étiquette ne peut pas être récupérée. C'est le pattern d'ancrage par citation décrit dans l'article sur la jurisprudence britannique, appliqué à la médecine — avec des enjeux encore plus élevés.
Le piège DrugBank
Ça vaut la peine d'y revenir. La licence académique de DrugBank est bien connue, mais ses conditions basculent dès l'instant où vous facturez à quiconque quoi que ce soit qui utilise les données — y compris un produit gratuit dont vous comptez convertir les utilisateurs en payants plus tard. Plusieurs fondateurs de petits SaaS l'ont découvert à leurs dépens après qu'une mise en demeure a atterri dans leur boîte mail.
Deux voies propres :
- Payer la licence commerciale. Les tarifs standards sont opaques ; attendez-vous à négocier. Pour des produits matures et financés, c'est la bonne réponse car les données d'interactions médicamenteuses de DrugBank sont difficiles à égaler.
- Utiliser des alternatives au licensing propre pour les premières phases. ChEMBL couvre l'essentiel des données mécanistiques. RxNorm + DailyMed (NIH) couvrent la normalisation des noms de médicaments et les étiquettes. FAERS couvre les événements indésirables. La combinaison rate certaines données spécifiques à DrugBank (tables d'interactions riches, polypharmacologie) mais suffit pour la plupart des produits en phase précoce. API Pick Clinical Search enveloppe pour vous le sous-ensemble au licensing propre.
Où ça se généralise
Le pattern « câbler ensemble quatre bases de données publiques avec gestion des limites de débit et discipline de licence » apparaît dans beaucoup de verticales régulées — dépôts financiers (SEC + transcripts de résultats + stats actions), brevets (USPTO + EPO + WIPO + JPO + KIPO + CNIPA), juridique (Find Case Law + legislation.gov.uk + équivalents étrangers). La version données-médicamenteuses est inhabituelle surtout parce que le terrain du licensing y est plus contesté. Tous les autres axes — diversité des schémas, limites de débit, déduplication, mapping d'identifiants inter-sources — se généralisent.
Pour du retrieval en un appel sur les sources de données médicamenteuses au licensing propre, API Pick Clinical Search fait le câblage. Pour les intégrations plus profondes (parsing complet des SPL, calcul de signal FAERS, arbres de cibles ChEMBL), vous passez encore directement par chaque source. Choisissez le bon niveau d'abstraction pour chaque partie du pipeline.
Questions fréquentes
Qu'est-ce qui a changé dans ClinicalTrials.gov v2 et casse les pipelines ?
Trois choses. (1) La structure des endpoints — v2 est en REST + JSON au lieu du CSV/XML de v1. (2) Les noms de champs — le nouveau wrapper protocolSection et le passage de snake_case à camelCase sont le refactoring le plus courant. (3) Le remplissage des champs optionnels — beaucoup de champs documentés comme « disponibles » sont peu renseignés, surtout pour les études anciennes. La migration prend en général 2 à 3 jours, plus une semaine de correction de bugs à mesure que les études limites ressortent.
C'est quoi le problème avec le licensing de DrugBank ?
DrugBank est gratuit pour la recherche académique et personnelle. Tout usage commercial — y compris un produit SaaS gratuit, le MVP d'une startup, ou un outil utilisé dans un conseil payant — relève des conditions de licence commerciale de DrugBank. Le billet de Thinklab « Sounding the alarm on DrugBank's new license » d'il y a quelques années reste la référence sur le sujet. Beaucoup de développeurs intègrent DrugBank en phase de dev sans réaliser qu'au moment où ils livrent un produit, la licence s'applique. Lisez les conditions avant d'intégrer, ou utilisez une alternative au licensing propre.
Comment faire de la détection de signal de base en pharmacovigilance ?
Les mesures de disproportionnalité standard — Reporting Odds Ratio (ROR), Proportional Reporting Ratio (PRR), BCPNN bayésien — sur la base d'événements indésirables FAERS. Des bibliothèques open-source comme vigipy les implémentent. Le piège est la déduplication de FAERS : beaucoup de rapports sont des déclarations en double du même cas par des parties différentes ; des bibliothèques comme VigiMatch de l'OMS gèrent ça mais vous le payez. Pour la plupart des cas d'usage med-AI, l'endpoint FAERS d'openFDA plus un simple calcul de ROR suffit à faire remonter les signaux qui méritent d'être investigués.
API Pick Clinical Search est-il conforme HIPAA ?
Les sources de données que nous enveloppons (ClinicalTrials.gov, openFDA, ChEMBL, métadonnées pharmacologiques de DrugBank) ne contiennent aucune information de santé protégée — elles couvrent des protocoles d'essais, des étiquettes médicamenteuses, des agrégats d'événements indésirables et des données structurelles/de bioactivité. La conformité HIPAA s'applique aux PHI, qui n'apparaissent pas dans notre index. Si vous construisez un produit en aval qui, lui, traite des PHI (par ex. de l'aide à la décision clinique sur des dossiers patients), vous devrez gérer cela séparément. Les données qui transitent par notre endpoint sont cohérentes avec des données réglementaires publiques.
La sortie de tout ça peut-elle servir à des décisions cliniques ?
Non. La sortie de n'importe quelle API de retrieval est informative ; elle ne constitue ni un avis médical ni une aide à la décision clinique. Utilisez les données pour épauler du personnel qualifié — pharmacien, médecin, spécialiste réglementaire — pas pour le remplacer. Cela vaut pour API Pick Clinical Search comme pour toute autre API de ce domaine.
APIs utilisées dans cet article
Sarah Choy est CEO d'API Pick. Elle écrit sur la création d'APIs prêtes pour la production destinées aux agents IA et aux workflows LLM.