[ blog · tutorial ]11 min read

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

Sarah ChoyPublié le 3 mai 202611 min de lecture
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

Instantané au moment de la rédaction. Vérifiez les limites de débit et le licensing actuels avant une intégration commerciale.
ClinicalTrials.gov v2openFDAChEMBLDrugBankAPI Pick Clinical
CouvertureRegistre d'essaisÉtiquettes + FAERS + rappelsBioactivité, cibles, essaisMédicaments + cibles + interactionsLes quatre, en sémantique
FormatREST + JSONREST + JSONREST + JSONREST + JSON / dumps SQLJSON, snippets pré-mis en forme
Limite de débit10 req/sec240/min sans auth, 120k/jour avec cléGénéreuseDépend du palier de licencePar appel (pas par utilisateur)
LicenceDomaine publicDomaine publicCC-BY-SAAcadémique gratuit / commercial payantCGU API Pick
Meilleur usageProtocoles d'essais, désambiguïsation de sponsorÉtiquettes réglementaires, signaux d'EIMécanistique / structurelInteractions médicamenteuses, polypharmRetrieval 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
Écrit par
Sarah Choy
CEO, API Pick

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.