Files

473 lines
9.1 KiB
Markdown

---
title: "Open Targets Platform API"
task: ""
lineage_type: import
upstream_source: https://github.com/K-Dense-AI/scientific-agent-skills/blob/9c9bd2e9/skills/database-lookup/references/opentargets.md
upstream_sha: 9c9bd2e9
imported_at: 2026-06-26
prompt_class: prompt
upstream_changes: accepted
author: upstream
validated: false
---
# Open Targets Platform API
## Base URLs
**GraphQL API (primary, recommended):**
```
https://api.platform.opentargets.org/api/v4/graphql
```
**Important:** The GraphQL endpoint requires HTTP POST with `Content-Type: application/json`. WebFetch (GET-only) will not work — use `curl` via shell instead:
```bash
curl -s -X POST -H "Content-Type: application/json" \
-d '{"query":"{ target(ensemblId: \"ENSG00000157764\") { approvedSymbol approvedName } }"}' \
https://api.platform.opentargets.org/api/v4/graphql
```
**REST API (simpler queries):**
```
https://api.platform.opentargets.org/api/v4
```
## Authentication
No API key required. All endpoints are public.
## GraphQL API
All GraphQL queries are sent as POST requests to the GraphQL endpoint.
```
POST https://api.platform.opentargets.org/api/v4/graphql
Content-Type: application/json
{
"query": "...",
"variables": { ... }
}
```
### 1. Target information (by Ensembl Gene ID)
```graphql
query TargetInfo($ensemblId: String!) {
target(ensemblId: $ensemblId) {
id
approvedSymbol
approvedName
biotype
proteinIds {
id
source
}
tractability {
label
modality
value
}
safetyLiabilities {
event
effects {
direction
dosing
}
}
pathways {
pathway
pathwayId
}
functionDescriptions
subcellularLocations {
location
}
}
}
```
**Variables:** `{ "ensemblId": "ENSG00000141510" }`
**Example as URL (GET also supported for simple queries):**
```
https://api.platform.opentargets.org/api/v4/graphql?query={target(ensemblId:"ENSG00000141510"){id approvedSymbol approvedName biotype functionDescriptions}}
```
---
### 2. Disease information (by EFO ID)
```graphql
query DiseaseInfo($efoId: String!) {
disease(efoId: $efoId) {
id
name
description
therapeuticAreas {
id
name
}
synonyms {
terms
}
}
}
```
**Variables:** `{ "efoId": "EFO_0000311" }` (cancer)
**Example as URL:**
```
https://api.platform.opentargets.org/api/v4/graphql?query={disease(efoId:"EFO_0000311"){id name description therapeuticAreas{id name}}}
```
---
### 3. Target-Disease associations
```graphql
query Associations($ensemblId: String!, $page: Pagination!) {
target(ensemblId: $ensemblId) {
approvedSymbol
associatedDiseases(page: $page) {
count
rows {
disease {
id
name
}
score
datasourceScores {
id
score
}
}
}
}
}
```
**Variables:**
```json
{
"ensemblId": "ENSG00000141510",
"page": { "index": 0, "size": 10 }
}
```
**Example as URL:**
```
https://api.platform.opentargets.org/api/v4/graphql?query={target(ensemblId:"ENSG00000141510"){approvedSymbol associatedDiseases(page:{index:0,size:5}){count rows{disease{id name}score}}}}
```
---
### 4. Disease-Target associations (from disease side)
```graphql
query DiseaseAssociations($efoId: String!, $page: Pagination!) {
disease(efoId: $efoId) {
name
associatedTargets(page: $page) {
count
rows {
target {
id
approvedSymbol
}
score
datasourceScores {
id
score
}
}
}
}
}
```
**Variables:**
```json
{
"efoId": "EFO_0000311",
"page": { "index": 0, "size": 10 }
}
```
---
### 5. Evidence for a target-disease pair
```graphql
query Evidence($ensemblId: String!, $efoId: String!, $size: Int!) {
disease(efoId: $efoId) {
evidences(ensemblIds: [$ensemblId], size: $size) {
count
rows {
id
score
datasourceId
datatypeId
literature
diseaseFromSource
targetFromSourceId
resourceScore
urls {
niceName
url
}
}
}
}
}
```
**Variables:**
```json
{
"ensemblId": "ENSG00000141510",
"efoId": "EFO_0000311",
"size": 10
}
```
---
### 6. Drug/molecule information
```graphql
query DrugInfo($chemblId: String!) {
drug(chemblId: $chemblId) {
id
name
drugType
maximumClinicalTrialPhase
hasBeenWithdrawn
mechanismsOfAction {
rows {
mechanismOfAction
targets {
id
approvedSymbol
}
}
}
indications {
rows {
disease {
id
name
}
maxPhaseForIndication
}
}
linkedDiseases {
count
rows {
id
name
}
}
linkedTargets {
count
rows {
id
approvedSymbol
}
}
}
}
```
**Variables:** `{ "chemblId": "CHEMBL25" }` (aspirin)
**Example as URL:**
```
https://api.platform.opentargets.org/api/v4/graphql?query={drug(chemblId:"CHEMBL25"){id name drugType maximumClinicalTrialPhase mechanismsOfAction{rows{mechanismOfAction targets{id approvedSymbol}}}}}
```
---
### 7. Search across targets, diseases, and drugs
```graphql
query Search($queryString: String!, $entityNames: [String!], $page: Pagination!) {
search(queryString: $queryString, entityNames: $entityNames, page: $page) {
total
hits {
id
entity
name
description
score
}
}
}
```
**Variables:**
```json
{
"queryString": "BRAF melanoma",
"entityNames": ["target", "disease", "drug"],
"page": { "index": 0, "size": 10 }
}
```
**Example as URL:**
```
https://api.platform.opentargets.org/api/v4/graphql?query={search(queryString:"BRAF",entityNames:["target"],page:{index:0,size:5}){total hits{id entity name description}}}
```
---
### 8. Known drugs for a target
```graphql
query KnownDrugs($ensemblId: String!, $size: Int!) {
target(ensemblId: $ensemblId) {
approvedSymbol
knownDrugs(size: $size) {
count
rows {
drug {
id
name
drugType
maximumClinicalTrialPhase
}
disease {
id
name
}
phase
status
mechanismOfAction
urls {
niceName
url
}
}
}
}
}
```
**Variables:**
```json
{
"ensemblId": "ENSG00000157764",
"size": 10
}
```
(ENSG00000157764 = BRAF)
---
### 9. Tractability (druggability)
Included in the target query (see endpoint 1 above). Modalities include:
- `SM` (small molecule)
- `AB` (antibody)
- `PR` (PROTAC)
- `OC` (other clinical)
---
## REST API Endpoints
These are simpler alternatives for common operations.
### Search
```
GET /api/v4/search?q={query}&page=0&size=10
```
**Example:**
```
https://api.platform.opentargets.org/api/v4/search?q=TP53&size=5
```
**Response:**
```json
{
"total": 15,
"data": [
{
"id": "ENSG00000141510",
"entity": "target",
"name": "TP53",
"description": "Cellular tumor antigen p53",
"score": 142.5
}
]
}
```
---
## Key Identifiers
| Entity | ID Format | Example |
|---------|-----------|---------|
| Target | Ensembl Gene ID | `ENSG00000141510` (TP53) |
| Disease | EFO/Mondo/HP/Orphanet | `EFO_0000311` (cancer), `MONDO_0007254` |
| Drug | ChEMBL ID | `CHEMBL25` (aspirin) |
## Datasource IDs (for filtering evidence)
- `ot_genetics_portal` -- Open Targets Genetics
- `eva` -- ClinVar (via EVA)
- `cancer_gene_census` -- COSMIC Cancer Gene Census
- `chembl` -- ChEMBL (clinical trials)
- `europepmc` -- Literature mining
- `expression_atlas` -- Expression Atlas
- `gene2phenotype` -- Gene2Phenotype
- `genomics_england` -- Genomics England PanelApp
- `intogen` -- IntOGen (cancer drivers)
- `ot_crispr` -- Open Targets CRISPR screens
- `progeny` -- PROGENy (pathway activity)
- `reactome` -- Reactome pathways
- `slapenrich` -- SLAPenrich
- `sysbio` -- Systems biology
- `uniprot_literature` -- UniProt literature
## Pagination
GraphQL uses `page: { index: Int, size: Int }` (0-based index).
REST uses `page` and `size` query parameters.
## Rate Limits
- No API key required.
- Fair-use rate limiting applies. No hard published limit.
- For bulk data, use the Open Targets data downloads (Parquet files on GCS/FTP) rather than API.
- Respect HTTP 429 and `Retry-After` headers.
## Error Format
GraphQL errors:
```json
{
"errors": [
{
"message": "Variable '$ensemblId' expected value of type 'String!' but got: null",
"locations": [{"line": 1, "column": 7}]
}
]
}
```
REST errors return appropriate HTTP status codes with JSON error bodies.
## Tips
- Use the GraphQL API for maximum flexibility -- request only the fields you need.
- The GET method for GraphQL works for simple queries but POST is required for complex ones with variables.
- Combine target + disease queries to get association scores with evidence breakdown.
- Use `datasourceScores` in association queries to see which evidence sources contribute most.
- The Open Targets Platform web UI at `https://platform.opentargets.org` has a GraphQL playground for testing queries.