GALENAPI

Databases

Free

Query 10+ integrated biomedical databases through a unified API — real experimental measurements, not LLM interpretations.

Only in Galen

Query 10+ biomedical databases through one unified API. Each database is integrated locally — not scraped or proxied. Galen maintains verified, versioned copies of ChEMBL 36, cBioPortal (498 studies), GTEx v11, STRING v12, and more. Results are real experimental measurements, not LLM interpretations.

GET/chembl/compound/{name}
Free

Look Up Compound Bioactivity

Look up compound bioactivity from ChEMBL 36

Only in Galen

Direct queries against ChEMBL 36 (30.7 GB) — the world's largest open drug bioactivity database with 2.4M+ compounds. Returns structured activity measurements (IC50, Ki, EC50), mechanisms of action, and clinical indications. This is real experimental pharmacology data, not an LLM summary of a drug's Wikipedia page.

Parameters

Path Parameters
NameTypeReqDescription
namestring

Compound or drug name to look up

Example: erlotinib

Response Schema

compoundobjectCore compound metadata from ChEMBL
├──chembl_idstringChEMBL identifier (e.g. CHEMBL553)
├──namestringPreferred compound name
├──max_phaseintegerHighest clinical trial phase reached (4 = approved)
├──molecule_typestringMolecule classification (e.g. Small molecule, Antibody)
├──first_approvalintegerYear of first regulatory approval, if applicable
├──smilesstringCanonical SMILES structural representation
└──inchi_keystringInChIKey hash for structure-based lookups
activitiesarrayExperimental bioactivity measurements against biological targets
├──target_namestringHuman-readable target name
├──target_chembl_idstringChEMBL identifier for the target
├──activity_typestringMeasurement type (IC50, Ki, EC50, Kd)
├──valuefloatActivity measurement value
├──unitsstringUnits of measurement (typically nM)
├──pchembl_valuefloatStandardized -log10(molar) potency for cross-comparison
└──organismstringSource organism for the target (e.g. Homo sapiens)
mechanismsarrayKnown mechanisms of action
├──mechanismstringMechanism description
├──action_typestringAction type (e.g. INHIBITOR, ANTAGONIST)
├──target_namestringName of the molecular target
└──target_chembl_idstringChEMBL identifier for the mechanism target
indicationsarrayClinical indications (diseases the drug is approved or investigated for)
├──diseasestringDisease or condition name
├──mesh_idstringMeSH descriptor ID for the indication
├──max_phaseintegerHighest phase reached for this specific indication
└──efo_termstringExperimental Factor Ontology term

Example Request

import requests

resp = requests.get(
    "https://research.usegalen.com/api/v1/chembl/compound/erlotinib",
    headers={"X-API-Key": "YOUR_API_KEY"}
)
data = resp.json()

# Print primary target activities
for act in data["activities"][:5]:
    print(f"{act['target_name']}: {act['activity_type']} = {act['value']} {act['units']}")

Example Response

{
  "compound": {
    "chembl_id": "CHEMBL553",
    "name": "ERLOTINIB",
    "max_phase": 4,
    "molecule_type": "Small molecule",
    "first_approval": 2004,
    "smiles": "C=Cc1cccc(NC(=O)c2cc(OC)c(OC)c(OC)c2)c1",
    "inchi_key": "AAKJLRGGTJKAMG-UHFFFAOYSA-N"
  },
  "activities": [
    {
      "target_name": "Epidermal growth factor receptor erbB1",
      "target_chembl_id": "CHEMBL203",
      "activity_type": "IC50",
      "value": 2,
      "units": "nM",
      "pchembl_value": 8.7,
      "organism": "Homo sapiens"
    },
    {
      "target_name": "Epidermal growth factor receptor erbB1",
      "target_chembl_id": "CHEMBL203",
      "activity_type": "Ki",
      "value": 0.7,
      "units": "nM",
      "pchembl_value": 9.15,
      "organism": "Homo sapiens"
    },
    {
      "target_name": "Tyrosine-protein kinase ABL1",
      "target_chembl_id": "CHEMBL1862",
      "activity_type": "IC50",
      "value": 4200,
      "units": "nM",
      "pchembl_value": 5.38,
      "organism": "Homo sapiens"
    }
  ],
  "mechanisms": [
    {
      "mechanism": "Epidermal growth factor receptor (ErbB1) inhibitor",
      "action_type": "INHIBITOR",
      "target_name": "Epidermal growth factor receptor erbB1",
      "target_chembl_id": "CHEMBL203"
    }
  ],
  "indications": [
    {
      "disease": "Non-Small Cell Lung Cancer",
      "mesh_id": "D002289",
      "max_phase": 4,
      "efo_term": "non-small cell lung carcinoma"
    },
    {
      "disease": "Pancreatic Neoplasms",
      "mesh_id": "D010190",
      "max_phase": 4,
      "efo_term": "pancreatic carcinoma"
    }
  ]
}

Try It

Path Parameters

stringrequired

Compound or drug name to look up

GET https://research.usegalen.com/api/v1/chembl/compound/{name}
GET/cbioportal/mutations/{gene}
Free

Get Mutation Frequencies

Get mutation frequencies from cBioPortal

Only in Galen

Queries Galen's local copy of cBioPortal clinical genomics data — 498 cancer studies with 30.9M somatic mutations. Returns real patient mutation frequencies, not estimates. Each mutation includes its functional impact annotation and the number of independent studies that observed it.

Parameters

Path Parameters
NameTypeReqDescription
genestring

Gene symbol to query

Example: TP53

Query Parameters
NameTypeReqDescription
cancer_typestring

Filter by cancer type

Example: breast

Response Schema

genestringQueried gene symbol
mutationsarrayObserved somatic mutations ranked by frequency
├──variantstringMutation identifier (e.g. R248W, V600E)
├──frequencyfloatFraction of samples carrying this mutation
├──cancer_typesarrayCancer types where this mutation has been observed
├──study_countintegerNumber of independent studies reporting this mutation
├──sample_countintegerTotal number of patient samples with this mutation
└──functional_impactstringPredicted functional impact (e.g. high, medium, low, neutral)
total_studiesintegerTotal number of studies queried
total_samplesintegerTotal number of patient samples across studies

Example Request

import requests

resp = requests.get(
    "https://research.usegalen.com/api/v1/cbioportal/mutations/TP53",
    params={"cancer_type": "breast"},
    headers={"X-API-Key": "YOUR_API_KEY"}
)
data = resp.json()

print(f"Mutations across {data['total_samples']} samples in {data['total_studies']} studies")
for mut in data["mutations"][:5]:
    print(f"  {mut['variant']}: {mut['frequency']:.1%} ({mut['sample_count']} samples)")

Example Response

{
  "gene": "TP53",
  "mutations": [
    {
      "variant": "R248W",
      "frequency": 0.042,
      "cancer_types": [
        "Breast Cancer",
        "Ovarian Cancer",
        "Colorectal Cancer",
        "Lung Cancer"
      ],
      "study_count": 187,
      "sample_count": 3421,
      "functional_impact": "high"
    },
    {
      "variant": "R273H",
      "frequency": 0.038,
      "cancer_types": [
        "Breast Cancer",
        "Ovarian Cancer",
        "Colorectal Cancer",
        "Glioblastoma"
      ],
      "study_count": 174,
      "sample_count": 3106,
      "functional_impact": "high"
    },
    {
      "variant": "R175H",
      "frequency": 0.035,
      "cancer_types": [
        "Colorectal Cancer",
        "Breast Cancer",
        "Ovarian Cancer",
        "Gastric Cancer"
      ],
      "study_count": 168,
      "sample_count": 2847,
      "functional_impact": "high"
    },
    {
      "variant": "Y220C",
      "frequency": 0.018,
      "cancer_types": [
        "Breast Cancer",
        "Lung Cancer",
        "Hepatocellular Carcinoma"
      ],
      "study_count": 112,
      "sample_count": 1462,
      "functional_impact": "high"
    },
    {
      "variant": "G245S",
      "frequency": 0.015,
      "cancer_types": [
        "Breast Cancer",
        "Colorectal Cancer",
        "Hematologic Malignancies"
      ],
      "study_count": 98,
      "sample_count": 1213,
      "functional_impact": "high"
    }
  ],
  "total_studies": 498,
  "total_samples": 81249
}

Try It

Path Parameters

stringrequired

Gene symbol to query

Query Parameters

string

Filter by cancer type

GET https://research.usegalen.com/api/v1/cbioportal/mutations/{gene}
GET/gtex/expression/{gene}
Free

Get Tissue Expression Data

Get tissue expression data from GTEx

Only in Galen

Queries GTEx v11 — normal (non-cancerous) tissue gene expression across 54 human tissues. Provides the healthy baseline needed to identify aberrant cancer expression. These are real RNA-seq measurements from the Genotype-Tissue Expression project.

Parameters

Path Parameters
NameTypeReqDescription
genestring

Gene symbol to query

Example: BRCA1

Query Parameters
NameTypeReqDescription
tissuestring

Filter to a specific tissue

Example: breast

Response Schema

genestringQueried gene symbol
tissuesarrayPer-tissue expression measurements
├──tissue_namestringGTEx tissue name
├──median_tpmfloatMedian expression in transcripts per million across donors
└──sample_countintegerNumber of donor samples for this tissue
summaryobjectExpression summary across all tissues
├──highest_expressing_tissuestringTissue with the highest median TPM
├──lowest_expressing_tissuestringTissue with the lowest median TPM
└──mean_tpmfloatMean expression across all tissues

Example Request

import requests

resp = requests.get(
    "https://research.usegalen.com/api/v1/gtex/expression/BRCA1",
    headers={"X-API-Key": "YOUR_API_KEY"}
)
data = resp.json()

print(f"Highest expression: {data['summary']['highest_expressing_tissue']}")
for tissue in data["tissues"][:5]:
    print(f"  {tissue['tissue_name']}: {tissue['median_tpm']:.1f} TPM (n={tissue['sample_count']})")

Example Response

{
  "gene": "BRCA1",
  "tissues": [
    {
      "tissue_name": "Testis",
      "median_tpm": 28.4,
      "sample_count": 361
    },
    {
      "tissue_name": "Ovary",
      "median_tpm": 18.7,
      "sample_count": 180
    },
    {
      "tissue_name": "Spleen",
      "median_tpm": 14.2,
      "sample_count": 241
    },
    {
      "tissue_name": "Whole Blood",
      "median_tpm": 12.8,
      "sample_count": 755
    },
    {
      "tissue_name": "Breast - Mammary Tissue",
      "median_tpm": 9.3,
      "sample_count": 459
    },
    {
      "tissue_name": "Lung",
      "median_tpm": 7.1,
      "sample_count": 578
    },
    {
      "tissue_name": "Liver",
      "median_tpm": 3.4,
      "sample_count": 226
    },
    {
      "tissue_name": "Brain - Cortex",
      "median_tpm": 2.1,
      "sample_count": 255
    }
  ],
  "summary": {
    "highest_expressing_tissue": "Testis",
    "lowest_expressing_tissue": "Brain - Cerebellum",
    "mean_tpm": 8.6
  }
}

Try It

Path Parameters

stringrequired

Gene symbol to query

Query Parameters

string

Filter to a specific tissue

GET https://research.usegalen.com/api/v1/gtex/expression/{gene}
GET/string/interactions/{gene}
Free

Get Protein Interactions

Get protein-protein interactions from STRING

Only in Galen

Queries STRING v12 protein-protein interaction network with scored evidence channels (experimental, database, textmining, coexpression). Interaction scores are computed from independent evidence types — not predicted by an AI model. Use to map signaling networks and identify potential combination targets.

Parameters

Path Parameters
NameTypeReqDescription
genestring

Gene symbol to query protein interactions for

Example: EGFR

Query Parameters
NameTypeReqDescription
min_scoreinteger

Minimum combined interaction score (0-1000). 700 = high confidence, 900 = highest.

Default: 700

Example: 700

Response Schema

proteinstringQueried protein symbol
interactionsarrayInteraction partners with evidence scores
├──partnerstringInteracting protein symbol
├──combined_scoreintegerCombined confidence score (0-1000) integrating all evidence channels
├──experimental_scoreintegerScore from experimental assays (e.g. co-IP, Y2H)
├──database_scoreintegerScore from curated pathway databases
├──textmining_scoreintegerScore from co-mention in literature
└──coexpression_scoreintegerScore from gene coexpression patterns
totalintegerTotal number of interactions above the score threshold

Example Request

import requests

resp = requests.get(
    "https://research.usegalen.com/api/v1/string/interactions/EGFR",
    params={"min_score": 900},
    headers={"X-API-Key": "YOUR_API_KEY"}
)
data = resp.json()

print(f"Found {data['total']} high-confidence EGFR interactors")
for ix in data["interactions"][:5]:
    print(f"  {ix['partner']}: {ix['combined_score']} (exp={ix['experimental_score']})")

Example Response

{
  "protein": "EGFR",
  "interactions": [
    {
      "partner": "GRB2",
      "combined_score": 999,
      "experimental_score": 940,
      "database_score": 900,
      "textmining_score": 980,
      "coexpression_score": 61
    },
    {
      "partner": "SOS1",
      "combined_score": 997,
      "experimental_score": 880,
      "database_score": 900,
      "textmining_score": 960,
      "coexpression_score": 72
    },
    {
      "partner": "SHC1",
      "combined_score": 995,
      "experimental_score": 920,
      "database_score": 900,
      "textmining_score": 940,
      "coexpression_score": 54
    },
    {
      "partner": "ERBB2",
      "combined_score": 994,
      "experimental_score": 900,
      "database_score": 900,
      "textmining_score": 970,
      "coexpression_score": 182
    },
    {
      "partner": "PLCG1",
      "combined_score": 990,
      "experimental_score": 870,
      "database_score": 900,
      "textmining_score": 920,
      "coexpression_score": 68
    }
  ],
  "total": 24
}

Try It

Path Parameters

stringrequired

Gene symbol to query protein interactions for

Query Parameters

integer

Minimum combined interaction score (0-1000). 700 = high confidence, 900 = highest.

GET https://research.usegalen.com/api/v1/string/interactions/{gene}