250 lines
6.2 KiB
Markdown
250 lines
6.2 KiB
Markdown
# Open Targets Platform API Reference
|
|
|
|
## API Endpoint
|
|
|
|
```
|
|
https://api.platform.opentargets.org/api/v4/graphql
|
|
```
|
|
|
|
Interactive GraphQL playground with documentation:
|
|
```
|
|
https://api.platform.opentargets.org/api/v4/graphql/browser
|
|
```
|
|
|
|
## Access Methods
|
|
|
|
The Open Targets Platform provides multiple access methods:
|
|
|
|
1. **GraphQL API** - Best for single entity queries and flexible data retrieval
|
|
2. **Web Interface** - Interactive platform at https://platform.opentargets.org
|
|
3. **Data Downloads** - FTP at https://ftp.ebi.ac.uk/pub/databases/opentargets/platform/
|
|
4. **Google BigQuery** - For large-scale systematic queries
|
|
|
|
## Authentication
|
|
|
|
No authentication is required for the GraphQL API. All data is freely accessible.
|
|
|
|
## Rate Limits
|
|
|
|
For systematic queries involving multiple targets or diseases, use dataset downloads or BigQuery instead of repeated API calls. The API is optimized for single-entity and exploratory queries.
|
|
|
|
## GraphQL Query Structure
|
|
|
|
GraphQL queries consist of:
|
|
1. Query operation with optional variables
|
|
2. Field selection (request only needed fields)
|
|
3. Nested entity traversal
|
|
|
|
### Basic Python Example
|
|
|
|
```python
|
|
import requests
|
|
import json
|
|
|
|
# Define the query
|
|
query_string = """
|
|
query target($ensemblId: String!){
|
|
target(ensemblId: $ensemblId){
|
|
id
|
|
approvedSymbol
|
|
biotype
|
|
geneticConstraint {
|
|
constraintType
|
|
exp
|
|
obs
|
|
score
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
|
|
# Define variables
|
|
variables = {"ensemblId": "ENSG00000169083"}
|
|
|
|
# Make the request
|
|
base_url = "https://api.platform.opentargets.org/api/v4/graphql"
|
|
response = requests.post(base_url, json={"query": query_string, "variables": variables})
|
|
data = json.loads(response.text)
|
|
print(data)
|
|
```
|
|
|
|
## Available Query Endpoints
|
|
|
|
### /target
|
|
Retrieve gene annotations, tractability assessments, and disease associations.
|
|
|
|
**Common fields:**
|
|
- `id` - Ensembl gene ID
|
|
- `approvedSymbol` - HGNC gene symbol
|
|
- `approvedName` - Full gene name
|
|
- `biotype` - Gene type (protein_coding, etc.)
|
|
- `tractability` - Druggability assessment
|
|
- `safetyLiabilities` - Safety information
|
|
- `expressions` - Baseline expression data
|
|
- `knownDrugs` - Approved/clinical drugs
|
|
- `associatedDiseases` - Disease associations with evidence
|
|
|
|
### /disease
|
|
Retrieve disease/phenotype data, known drugs, and clinical information.
|
|
|
|
**Common fields:**
|
|
- `id` - EFO disease identifier
|
|
- `name` - Disease name
|
|
- `description` - Disease description
|
|
- `therapeuticAreas` - High-level disease categories
|
|
- `synonyms` - Alternative names
|
|
- `knownDrugs` - Drugs indicated for disease
|
|
- `associatedTargets` - Target associations with evidence
|
|
|
|
### /drug
|
|
Retrieve compound details, mechanisms of action, and pharmacovigilance data.
|
|
|
|
**Common fields:**
|
|
- `id` - ChEMBL identifier
|
|
- `name` - Drug name
|
|
- `drugType` - Small molecule, antibody, etc.
|
|
- `maximumClinicalTrialPhase` - Development stage
|
|
- `indications` - Disease indications
|
|
- `mechanismsOfAction` - Target mechanisms
|
|
- `adverseEvents` - Pharmacovigilance data
|
|
|
|
### /search
|
|
Search across all entities (targets, diseases, drugs).
|
|
|
|
**Parameters:**
|
|
- `queryString` - Search term
|
|
- `entityNames` - Filter by entity type(s)
|
|
- `page` - Pagination
|
|
|
|
### /associationDiseaseIndirect
|
|
Retrieve target-disease associations including indirect evidence from disease descendants in ontology.
|
|
|
|
**Key fields:**
|
|
- `rows` - Association records with scores
|
|
- `aggregations` - Aggregated statistics
|
|
|
|
## Example Queries
|
|
|
|
### Query 1: Get target information with disease associations
|
|
|
|
```python
|
|
query = """
|
|
query targetInfo($ensemblId: String!) {
|
|
target(ensemblId: $ensemblId) {
|
|
approvedSymbol
|
|
approvedName
|
|
tractability {
|
|
label
|
|
modality
|
|
value
|
|
}
|
|
associatedDiseases(page: {size: 10}) {
|
|
rows {
|
|
disease {
|
|
name
|
|
}
|
|
score
|
|
datatypeScores {
|
|
componentId
|
|
score
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
variables = {"ensemblId": "ENSG00000157764"}
|
|
```
|
|
|
|
### Query 2: Search for diseases
|
|
|
|
```python
|
|
query = """
|
|
query searchDiseases($queryString: String!) {
|
|
search(queryString: $queryString, entityNames: ["disease"]) {
|
|
hits {
|
|
id
|
|
entity
|
|
name
|
|
description
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
variables = {"queryString": "alzheimer"}
|
|
```
|
|
|
|
### Query 3: Get evidence for target-disease pair
|
|
|
|
```python
|
|
query = """
|
|
query evidences($ensemblId: String!, $efoId: String!) {
|
|
disease(efoId: $efoId) {
|
|
evidences(ensemblIds: [$ensemblId], size: 100) {
|
|
rows {
|
|
datasourceId
|
|
datatypeId
|
|
score
|
|
studyId
|
|
literature
|
|
}
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
variables = {"ensemblId": "ENSG00000157764", "efoId": "EFO_0000249"}
|
|
```
|
|
|
|
### Query 4: Get known drugs for a disease
|
|
|
|
```python
|
|
query = """
|
|
query knownDrugs($efoId: String!) {
|
|
disease(efoId: $efoId) {
|
|
knownDrugs {
|
|
uniqueDrugs
|
|
rows {
|
|
drug {
|
|
name
|
|
id
|
|
}
|
|
targets {
|
|
approvedSymbol
|
|
}
|
|
phase
|
|
status
|
|
}
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
variables = {"efoId": "EFO_0000249"}
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
GraphQL returns status code 200 even for errors. Check the response structure:
|
|
|
|
```python
|
|
if 'errors' in response_data:
|
|
print(f"GraphQL errors: {response_data['errors']}")
|
|
else:
|
|
print(f"Data: {response_data['data']}")
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Request only needed fields** - Minimize data transfer and improve response time
|
|
2. **Use variables** - Make queries reusable and safer
|
|
3. **Handle pagination** - Most list fields support pagination with `page: {size: N, index: M}`
|
|
4. **Explore the schema** - Use the GraphQL browser to discover available fields
|
|
5. **Batch related queries** - Combine multiple entity fetches in a single query when possible
|
|
6. **Cache results** - Store frequently accessed data locally to reduce API calls
|
|
7. **Use BigQuery for bulk** - Switch to BigQuery/downloads for systematic analyses
|
|
|
|
## Data Licensing
|
|
|
|
All Open Targets Platform data is freely available. When using the data in research or commercial products, cite the latest publication:
|
|
|
|
Ochoa, D. et al. (2025) Open Targets Platform: facilitating therapeutic hypotheses building in drug discovery. Nucleic Acids Research, 53(D1):D1467-D1477.
|