Połączenie ClinicalTrials.gov v2 + openFDA + ChEMBL w czysty licencyjnie endpoint wywiadu lekowego

Dział badań i rozwoju w farmacji, startupy z medycznej AI oraz zespoły nadzoru nad bezpieczeństwem farmakoterapii chcą tego samego: jednego endpointu, który pobiera badania, etykiety, zdarzenia niepożądane i bioaktywność w sposób czysty licencyjnie. Oto działająca architektura wraz z zapadniami, które zaskoczyły zespoły na produkcji.
TL;DR
- •ClinicalTrials.gov v2 (REST + JSON) zastąpił w 2024 roku starszą wersję v1 — schemat jest czystszy, ale paginacja, pola opcjonalne i historyczny dryf zaskakują nowych integratorów.
- •openFDA obejmuje etykiety leków (SPL), zgłoszenia zdarzeń niepożądanych FAERS oraz dane o wycofaniach, za darmo; z limitem 240 zapytań/min bez uwierzytelnienia i 120 tys./dzień z kluczem.
- •ChEMBL daje bioaktywność (IC50, Ki, Kd, EC50), cele molekularne i testy — wymiar strukturalny / mechanistyczny, którego brakuje innym bazom danych.
- •Licencja komercyjna DrugBank to pułapka: użytek akademicki jest dozwolony; każdy produkt, nawet mały SaaS, podlega warunkom licencji komercyjnej, których większość twórców nie czyta, dopóki nie dostanie wezwania.
- •API Pick Clinical Search opakowuje ClinicalTrials, openFDA, ChEMBL i farmakologię DrugBank w jednym endpoincie POST — 30 kredytów za wywołanie, czysto licencyjnie, rozliczane tylko przy sukcesie.
Kształt problemu
Trzy grupy odbiorców, z różnych powodów, ostatecznie potrzebują mniej więcej tego samego potoku danych o lekach:
- Zespoły biofarmaceutycznego R&D i repozycjonowania leków chcą połączonych danych o bioaktywności (ChEMBL), historii badań (ClinicalTrials.gov) i sygnałów zdarzeń niepożądanych (FAERS), aby ocenić kandydata.
- Startupy z medycznej AI budujące chatboty lub warstwy wspomagania decyzji klinicznych potrzebują połączonych etykiet leków (SPL z openFDA) i danych z badań, aby osadzić odpowiedzi LLM w źródłach regulacyjnych.
- Zespoły nadzoru nad bezpieczeństwem leków chcą FAERS plus ustrukturyzowanych pól etykiet leków plus informacji o mechanizmie z ChEMBL/DrugBank, aby ocenić wiarygodność sygnału.
Każda z tych grup ostatecznie łączy ze sobą cztery bazy danych: ClinicalTrials.gov, openFDA, ChEMBL i DrugBank. Każda baza ma własny schemat, limity zapytań i warunki licencji. To DrugBank gryzie — jego klauzula o użytku komercyjnym łapie zespoły, które zintegrowały go na etapie developmentu bez przeczytania licencji, a wysyłanie wezwań założycielom małych SaaS-ów to rzeczywistość.
Oto architektura, którą rekomendujemy, wraz z czystą licencyjnie ścieżką alternatywną, która omija pułapkę DrugBank.
Cztery źródła, po jednym akapicie na każde
ClinicalTrials.gov v2
US National Library of Medicine. Ostateczny rejestr badań klinicznych zarejestrowanych w USA i faktyczny standard globalny. v2 pojawił się w 2024 roku — REST + JSON, zastępując CSV/XML ze starszej v1. Darmowy, z limitem zapytań (10 zapytań/s). Dokumentacja pod adresem clinicaltrials.gov/data-api/api. Mocne strony: autorytatywny, kompleksowy, brak problemów z licencją. Słabe strony: rzadkie wypełnienie pól opcjonalnych w starszych badaniach, tarcie migracji schematu dla zespołów wciąż na v1.
openFDA
Publiczne API prowadzone przez FDA. Obejmuje etykiety leków (SPL — Structured Product Labels), FAERS (Adverse Event Reporting System), dane o wycofaniach oraz odpowiedniki dla żywności/wyrobów. Darmowe, z limitem 240 zapytań/min bez uwierzytelnienia i 120 000 zapytań/dzień z kluczem API. Mocne strony: autorytatywne źródło regulacyjne, dane ustrukturyzowane, szeroki zakres. Słabe strony: parsowanie SPL wymaga rozumienia konwencji HL7; deduplikacja FAERS jest problemem użytkownika.
ChEMBL
EBI / EMBL-EBI. Kuratorowana baza bioaktywności — pomiary IC50, Ki, Kd, EC50 dla związków, celów molekularnych i testów. Darmowa, REST + JSON, bez bólu głowy związanego z limitami zapytań przy umiarkowanym wolumenie. Mocne strony: dane strukturalne i mechanistyczne, których nic innego nie obejmuje. Słabe strony: nacisk na poziom badawczy; mapowania terapeutyczne/kliniczne są częściowe.
DrugBank
Powstał na University of Alberta, obecnie komercyjny. Mapowania lek-cel, farmakologia, interakcje lek-lek, polifarmakologia. Użytek akademicki jest darmowy; użytek komercyjny wymaga płatnej licencji. Licencja dotyczy każdego produktu komercyjnego, w tym darmowych narzędzi SaaS — przeczytaj warunki przed integracją.
API Pick Clinical Search (czysta licencyjnie alternatywa)
Wyszukiwanie semantyczne w ClinicalTrials.gov, etykietach leków FDA, bioaktywności ChEMBL oraz metadanych farmakologicznych DrugBank, które licencjonujemy. JSON na wejściu / JSON na wyjściu, 30 kredytów za wywołanie (~$0,03), rozliczanie tylko przy sukcesie. Wynik jest spójny z warunkami dla danych regulacyjnych i strukturalnych; brak pułapki licencji komercyjnej dla użytkowników końcowych.
Zestawienie obok siebie
| ClinicalTrials.gov v2 | openFDA | ChEMBL | DrugBank | API Pick Clinical | |
|---|---|---|---|---|---|
| Zakres | Rejestr badań | Etykiety + FAERS + wycofania | Bioaktywność, cele, testy | Leki + cele + interakcje | Wszystkie cztery, semantycznie |
| Format | REST + JSON | REST + JSON | REST + JSON | REST + JSON / zrzuty SQL | JSON, gotowe fragmenty |
| Limit zapytań | 10 zapytań/s | 240/min bez uwierzytelnienia, 120 tys./dzień z kluczem | Hojny | Zależny od poziomu licencji | Na wywołanie (bez limitu na użytkownika) |
| Licencja | Domena publiczna | Domena publiczna | CC-BY-SA | Akademicka darmowa / komercyjna płatna | TOS API Pick |
| Najlepsze zastosowanie | Protokoły badań, ujednoznacznienie sponsorów | Etykiety regulacyjne, sygnały ZN | Mechanistyczne / strukturalne | Interakcje lek-lek, polifarm. | Wyszukiwanie agentem AI po wszystkim |
Działający kod: każde źródło
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: etykieta leku + sygnał 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: bioaktywność celu molekularnego
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: jedno wywołanie, wszystkie źródła
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.Trzy wzorce, które pojawiają się na produkcji
1. Przesiew pod kątem repozycjonowania leków
Weź zatwierdzony lek. Pobierz jego mechanizm (cele ChEMBL), jego obecne wskazania (etykieta openFDA) oraz wszelkie badania testujące go w nowych wskazaniach (ClinicalTrials.gov). Skrzyżuj z FAERS w poszukiwaniu sygnałów bezpieczeństwa w nowym wskazaniu. Agent składa wszystkie cztery elementy i wydobywa kandydatów wartych czasu farmakologa.
2. Triaż sygnałów nadzoru nad bezpieczeństwem leków
Godzinny cron pobiera nowe zgłoszenia FAERS dla listy obserwowanych leków. Oblicz Reporting Odds Ratio względem reszty bazy danych. Oznacz każdy sygnał, w którym ROR > 2 z 95% CI wykluczającym 1. Sparuj z ClinicalTrials.gov, aby sprawdzić, czy wskazanie do stosowania jest zgodne z etykietą (on-label) czy poza nią (off-label). Wynik: uszeregowana lista na poranny przegląd zespołu — analogicznie do wzorca porannego briefingu dla wiadomości.
3. Osadzanie asystenta medycznego AI
Dla każdej odpowiedzi asystenta związanej z lekiem pobierz etykietę openFDA i użyj jej jako autorytatywnej prawdy bazowej. Cytuj sekcję etykiety FDA wprost. Odmawiaj odpowiedzi na pytania dotyczące dawkowania, gdy etykiety nie można pobrać. To wzorzec osadzania na cytatach z artykułu o brytyjskim orzecznictwie zastosowany do medycyny — przy jeszcze wyższej stawce.
Pułapka DrugBank
Warto to podkreślić jeszcze raz. Licencja akademicka DrugBank jest dobrze znana, ale jej warunki zmieniają się w chwili, gdy pobierasz od kogokolwiek pieniądze za cokolwiek, co korzysta z danych — w tym za darmowy produkt, którego użytkowników zamierzasz później przekonwertować na płatnych. Kilku założycieli małych SaaS-ów odkryło to boleśnie po tym, jak w ich skrzynce wylądowało wezwanie.
Dwie czyste ścieżki:
- Zapłać za licencję komercyjną. Standardowy cennik jest nieprzejrzysty; nastaw się na negocjacje. Dla dojrzałych produktów z finansowaniem to właściwa odpowiedź, ponieważ dane o interakcjach lek-lek z DrugBank są trudne do dorównania.
- Używaj czystych licencyjnie alternatyw na wczesnych etapach. ChEMBL obejmuje większość danych mechanistycznych. RxNorm + DailyMed (NIH) obejmują normalizację nazw leków i etykiety. FAERS obejmuje zdarzenia niepożądane. Ta kombinacja pomija część danych specyficznych dla DrugBank (bogate tabele interakcji, polifarmakologia), ale wystarcza dla większości produktów na wczesnym etapie. API Pick Clinical Search opakowuje dla ciebie czysty licencyjnie podzbiór.
Gdzie to się uogólnia
Wzorzec 'połącz ze sobą cztery publiczne bazy danych z obsługą limitów zapytań i dyscypliną licencyjną' pojawia się w wielu regulowanych branżach — sprawozdania finansowe (SEC + transkrypcje wyników + statystyki akcji), patenty (USPTO + EPO + WIPO + JPO + KIPO + CNIPA), prawo (Find Case Law + legislation.gov.uk + odpowiedniki zagraniczne). Wariant danych o lekach jest nietypowy głównie dlatego, że podstawa licencyjna jest bardziej sporna. Każda inna oś — różnorodność schematów, limity zapytań, deduplikacja, mapowanie identyfikatorów między źródłami — uogólnia się.
Do wyszukiwania w jednym wywołaniu po czystych licencyjnie źródłach danych o lekach API Pick Clinical Search zajmuje się połączeniem. W przypadku głębszych integracji (pełne parsowanie SPL, obliczanie sygnałów FAERS, drzewa celów ChEMBL) nadal sięgasz bezpośrednio do każdego źródła. Wybierz właściwy poziom abstrakcji dla każdej części potoku.
Najczęściej zadawane pytania
Co zmieniło się w ClinicalTrials.gov v2, co psuje potoki?
Trzy rzeczy. (1) Struktura endpointu — v2 to REST + JSON zamiast CSV/XML z v1. (2) Nazwy pól — nowy wrapper protocolSection oraz przejście ze snake_case na camelCase to najczęstsza refaktoryzacja. (3) Wypełnienie pól opcjonalnych — wiele pól udokumentowanych jako 'dostępne' jest wypełnionych rzadko, zwłaszcza w starszych badaniach. Migracja zwykle zajmuje 2-3 dni plus tydzień poprawiania błędów, w miarę jak pojawiają się badania z przypadkami brzegowymi.
O co chodzi z licencjonowaniem DrugBank?
DrugBank jest darmowy do badań akademickich i osobistych. Każde użycie komercyjne — w tym darmowy produkt SaaS, MVP startupu czy narzędzie używane w płatnym doradztwie — podlega warunkom licencji komercyjnej DrugBank. Wpis Thinklab 'Sounding the alarm on DrugBank's new license' sprzed kilku lat wciąż jest kanonicznym omówieniem. Wielu twórców integruje DrugBank na etapie developmentu, nie zdając sobie sprawy, że w momencie wydania produktu licencja zaczyna obowiązywać. Przeczytaj warunki przed integracją albo użyj czystej licencyjnie alternatywy.
Jak przeprowadzić podstawowe wykrywanie sygnałów w nadzorze nad bezpieczeństwem leków?
Standardowe miary dysproporcjonalności — Reporting Odds Ratio (ROR), Proportional Reporting Ratio (PRR), bayesowskie BCPNN — na bazie zdarzeń niepożądanych FAERS. Biblioteki open source, takie jak vigipy, je implementują. Pułapką jest deduplikacja FAERS: wiele zgłoszeń to duplikaty tego samego przypadku składane przez różne strony; biblioteki takie jak VigiMatch WHO to obsługują, ale trzeba za to zapłacić. W większości zastosowań medycznej AI endpoint FAERS z openFDA plus proste obliczenie ROR wystarczy, by wydobyć sygnały warte zbadania.
Czy API Pick Clinical Search jest zgodne z HIPAA?
Źródła danych, które opakowujemy (ClinicalTrials.gov, openFDA, ChEMBL, metadane farmakologiczne DrugBank), nie zawierają chronionych informacji zdrowotnych — obejmują protokoły badań, etykiety leków, zagregowane zdarzenia niepożądane oraz dane strukturalne/bioaktywności. Zgodność z HIPAA dotyczy PHI, które nie pojawiają się w naszym indeksie. Jeśli budujesz produkt niższego poziomu, który jednak przetwarza PHI (np. wspomaganie decyzji klinicznych na podstawie dokumentacji pacjentów), musisz zająć się tym osobno. Dane przepływające przez nasz endpoint są spójne z publicznymi danymi regulacyjnymi.
Czy wynik z tego można wykorzystać do decyzji klinicznych?
Nie. Wynik dowolnego API wyszukiwania ma charakter informacyjny; nie stanowi porady medycznej ani wspomagania decyzji klinicznych. Wykorzystuj dane do wspierania wykwalifikowanego personelu — farmaceuty, lekarza, specjalisty ds. regulacyjnych — a nie do jego zastępowania. Dotyczy to API Pick Clinical Search oraz każdego innego API w tej dziedzinie.
API użyte w tym artykule
Sarah Choy jest CEO API Pick. Pisze o budowaniu produkcyjnych API dla agentów AI i przepływów pracy z LLM.