553 lines
13 KiB
Markdown
553 lines
13 KiB
Markdown
---
|
|
title: "Ensembl REST API"
|
|
task: ""
|
|
lineage_type: import
|
|
upstream_source: https://github.com/K-Dense-AI/scientific-agent-skills/blob/9c9bd2e9/skills/database-lookup/references/ensembl.md
|
|
upstream_sha: 9c9bd2e9
|
|
imported_at: 2026-06-26
|
|
prompt_class: prompt
|
|
upstream_changes: accepted
|
|
author: upstream
|
|
validated: false
|
|
---
|
|
|
|
# Ensembl REST API
|
|
|
|
## Base URL
|
|
|
|
```
|
|
https://rest.ensembl.org
|
|
```
|
|
|
|
For the Ensembl Genomes (plants, fungi, bacteria, protists, metazoa):
|
|
```
|
|
https://rest.ensembl.org
|
|
```
|
|
(Same base; Ensembl Genomes was merged into the main REST API.)
|
|
|
|
For the GRCh37 (hg19) archive:
|
|
```
|
|
https://grch37.rest.ensembl.org
|
|
```
|
|
|
|
## Authentication
|
|
|
|
No API key required. All endpoints are public.
|
|
|
|
## Common Headers
|
|
|
|
All requests should include:
|
|
```
|
|
Content-Type: application/json
|
|
```
|
|
|
|
The API uses content negotiation. Append `?content-type=application/json` to GET requests, or set the `Accept` header.
|
|
|
|
## Key Endpoints
|
|
|
|
### 1. Gene lookup by symbol
|
|
|
|
```
|
|
GET /lookup/symbol/{species}/{symbol}?content-type=application/json
|
|
```
|
|
|
|
| Parameter | Type | Description |
|
|
|------------|--------|-------------|
|
|
| `species` | string | **Required.** Species name (e.g., `homo_sapiens`, `mus_musculus`). |
|
|
| `symbol` | string | **Required.** Gene symbol (e.g., `TP53`, `BRCA1`). |
|
|
| `expand` | int | Set to `1` to include transcripts, translations, exons. |
|
|
|
|
**Example:**
|
|
```
|
|
https://rest.ensembl.org/lookup/symbol/homo_sapiens/TP53?content-type=application/json
|
|
https://rest.ensembl.org/lookup/symbol/homo_sapiens/BRCA1?content-type=application/json;expand=1
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"id": "ENSG00000141510",
|
|
"display_name": "TP53",
|
|
"description": "tumor protein p53 [Source:HGNC Symbol;Acc:HGNC:11998]",
|
|
"species": "homo_sapiens",
|
|
"object_type": "Gene",
|
|
"biotype": "protein_coding",
|
|
"assembly_name": "GRCh38",
|
|
"seq_region_name": "17",
|
|
"start": 7661779,
|
|
"end": 7687538,
|
|
"strand": -1,
|
|
"source": "ensembl_havana",
|
|
"logic_name": "ensembl_havana_gene_homo_sapiens",
|
|
"version": 16,
|
|
"Transcript": [...]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### 2. Gene/feature lookup by Ensembl ID
|
|
|
|
```
|
|
GET /lookup/id/{id}?content-type=application/json
|
|
```
|
|
|
|
| Parameter | Type | Description |
|
|
|-----------|--------|-------------|
|
|
| `id` | string | **Required.** Ensembl stable ID (gene, transcript, protein, exon). |
|
|
| `expand` | int | Set to `1` to include child objects (transcripts for genes, etc.). |
|
|
| `db_type` | string | Database type: `core`, `otherfeatures`, `cdna`, `rnaseq`. |
|
|
|
|
**Example:**
|
|
```
|
|
https://rest.ensembl.org/lookup/id/ENSG00000141510?content-type=application/json;expand=1
|
|
https://rest.ensembl.org/lookup/id/ENST00000269305?content-type=application/json
|
|
https://rest.ensembl.org/lookup/id/ENSP00000269305?content-type=application/json
|
|
```
|
|
|
|
---
|
|
|
|
### 3. Batch lookup (POST, up to 1000 IDs)
|
|
|
|
```
|
|
POST /lookup/id
|
|
Content-Type: application/json
|
|
|
|
{ "ids": ["ENSG00000141510", "ENSG00000012048", "ENSG00000157764"] }
|
|
```
|
|
|
|
**Example response:** Returns a map keyed by ID:
|
|
```json
|
|
{
|
|
"ENSG00000141510": {
|
|
"id": "ENSG00000141510",
|
|
"display_name": "TP53",
|
|
...
|
|
},
|
|
"ENSG00000012048": { ... }
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### 4. Sequence retrieval
|
|
|
|
```
|
|
GET /sequence/id/{id}?content-type=application/json
|
|
```
|
|
|
|
| Parameter | Type | Description |
|
|
|--------------|--------|-------------|
|
|
| `id` | string | Ensembl stable ID (gene, transcript, or protein). |
|
|
| `type` | string | `genomic`, `cdna`, `cds`, `protein`. Default varies by object type. |
|
|
| `format` | string | `json` or `fasta`. |
|
|
| `expand_3prime` | int | Expand 3' end by N bases. |
|
|
| `expand_5prime` | int | Expand 5' end by N bases. |
|
|
| `mask` | string | `soft` (lowercase repeats) or `hard` (N-mask repeats). |
|
|
|
|
**Examples:**
|
|
|
|
Protein sequence:
|
|
```
|
|
https://rest.ensembl.org/sequence/id/ENSP00000269305?content-type=application/json
|
|
```
|
|
|
|
CDS sequence:
|
|
```
|
|
https://rest.ensembl.org/sequence/id/ENST00000269305?type=cds&content-type=application/json
|
|
```
|
|
|
|
Genomic sequence with flanking:
|
|
```
|
|
https://rest.ensembl.org/sequence/id/ENSG00000141510?type=genomic&expand_5prime=1000&expand_3prime=500&content-type=application/json
|
|
```
|
|
|
|
FASTA format:
|
|
```
|
|
https://rest.ensembl.org/sequence/id/ENSP00000269305?content-type=text/x-fasta
|
|
```
|
|
|
|
**Response (JSON):**
|
|
```json
|
|
{
|
|
"id": "ENSP00000269305",
|
|
"seq": "MEEPQSDPSVEPPLSQETFSDL...",
|
|
"molecule": "protein",
|
|
"desc": "chromosome:GRCh38:17:7661779:7687538:-1"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### 5. Sequence by region
|
|
|
|
```
|
|
GET /sequence/region/{species}/{region}?content-type=application/json
|
|
```
|
|
|
|
Region format: `chromosome:start..end` or `chromosome:start..end:strand`
|
|
|
|
**Example:**
|
|
```
|
|
https://rest.ensembl.org/sequence/region/homo_sapiens/17:7661779..7662000:1?content-type=application/json
|
|
```
|
|
|
|
---
|
|
|
|
### 6. Variant annotation (VEP -- Variant Effect Predictor)
|
|
|
|
**By HGVS notation:**
|
|
```
|
|
GET /vep/{species}/hgvs/{hgvs_notation}?content-type=application/json
|
|
```
|
|
|
|
**Example:**
|
|
```
|
|
https://rest.ensembl.org/vep/homo_sapiens/hgvs/ENST00000269305.9:c.817C>T?content-type=application/json
|
|
https://rest.ensembl.org/vep/homo_sapiens/hgvs/17:g.7674220G>A?content-type=application/json
|
|
```
|
|
|
|
**By genomic region:**
|
|
```
|
|
GET /vep/{species}/region/{region}/{allele}?content-type=application/json
|
|
```
|
|
|
|
**Example:**
|
|
```
|
|
https://rest.ensembl.org/vep/homo_sapiens/region/17:7674220-7674220:1/A?content-type=application/json
|
|
```
|
|
|
|
**By rsID:**
|
|
```
|
|
GET /vep/{species}/id/{rsid}?content-type=application/json
|
|
```
|
|
|
|
**Example:**
|
|
```
|
|
https://rest.ensembl.org/vep/homo_sapiens/id/rs699?content-type=application/json
|
|
```
|
|
|
|
**VEP Response:**
|
|
```json
|
|
[
|
|
{
|
|
"input": "17:g.7674220G>A",
|
|
"assembly_name": "GRCh38",
|
|
"seq_region_name": "17",
|
|
"start": 7674220,
|
|
"end": 7674220,
|
|
"strand": 1,
|
|
"allele_string": "G/A",
|
|
"most_severe_consequence": "missense_variant",
|
|
"transcript_consequences": [
|
|
{
|
|
"gene_id": "ENSG00000141510",
|
|
"gene_symbol": "TP53",
|
|
"transcript_id": "ENST00000269305",
|
|
"biotype": "protein_coding",
|
|
"consequence_terms": ["missense_variant"],
|
|
"impact": "MODERATE",
|
|
"amino_acids": "R/H",
|
|
"codons": "cGc/cAc",
|
|
"protein_start": 248,
|
|
"polyphen_prediction": "probably_damaging",
|
|
"polyphen_score": 1.0,
|
|
"sift_prediction": "deleterious",
|
|
"sift_score": 0.0,
|
|
"cadd_phred": 35.0
|
|
}
|
|
],
|
|
"colocated_variants": [
|
|
{
|
|
"id": "rs28934578",
|
|
"frequencies": { ... },
|
|
"clin_sig": ["pathogenic"]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
```
|
|
|
|
**Batch VEP (POST, up to 200 variants):**
|
|
```
|
|
POST /vep/homo_sapiens/region
|
|
Content-Type: application/json
|
|
|
|
{ "variants": ["17 7674220 7674220 G/A 1", "7 140753336 140753336 A/T 1"] }
|
|
```
|
|
|
|
---
|
|
|
|
### 7. Variant (known variants by rsID)
|
|
|
|
```
|
|
GET /variation/{species}/{rsid}?content-type=application/json
|
|
```
|
|
|
|
**Example:**
|
|
```
|
|
https://rest.ensembl.org/variation/homo_sapiens/rs699?content-type=application/json
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"name": "rs699",
|
|
"source": "Variants (including SNPs and indels) imported from dbSNP",
|
|
"mappings": [
|
|
{
|
|
"seq_region_name": "1",
|
|
"start": 230710048,
|
|
"end": 230710048,
|
|
"strand": 1,
|
|
"allele_string": "A/G",
|
|
"assembly_name": "GRCh38",
|
|
"location": "1:230710048-230710048"
|
|
}
|
|
],
|
|
"MAF": 0.35,
|
|
"minor_allele": "G",
|
|
"clinical_significance": [],
|
|
"synonyms": [],
|
|
"ancestral_allele": "A"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### 8. Overlap / features in a region
|
|
|
|
```
|
|
GET /overlap/region/{species}/{region}?feature={type}&content-type=application/json
|
|
```
|
|
|
|
| Parameter | Type | Description |
|
|
|-----------|--------|-------------|
|
|
| `region` | string | Format: `chr:start-end`. |
|
|
| `feature` | string | One or more of: `gene`, `transcript`, `cds`, `exon`, `repeat`, `simple`, `misc`, `variation`, `somatic_variation`, `structural_variation`, `regulatory`, `motif`, `chipseq`, `constrained`. Can repeat parameter for multiple. |
|
|
|
|
**Example -- get all genes in a region:**
|
|
```
|
|
https://rest.ensembl.org/overlap/region/homo_sapiens/17:7660000-7690000?feature=gene&content-type=application/json
|
|
```
|
|
|
|
**Example -- get regulatory features:**
|
|
```
|
|
https://rest.ensembl.org/overlap/region/homo_sapiens/17:7660000-7690000?feature=regulatory&content-type=application/json
|
|
```
|
|
|
|
---
|
|
|
|
### 9. Cross-references (Xrefs)
|
|
|
|
```
|
|
GET /xrefs/id/{id}?content-type=application/json
|
|
```
|
|
|
|
**Example:**
|
|
```
|
|
https://rest.ensembl.org/xrefs/id/ENSG00000141510?content-type=application/json
|
|
```
|
|
|
|
Returns links to external databases (HGNC, UniProt, NCBI Gene, RefSeq, etc.).
|
|
|
|
**Response:**
|
|
```json
|
|
[
|
|
{
|
|
"primary_id": "11998",
|
|
"display_id": "TP53",
|
|
"dbname": "HGNC",
|
|
"db_display_name": "HGNC Symbol"
|
|
},
|
|
{
|
|
"primary_id": "P04637",
|
|
"display_id": "P53_HUMAN",
|
|
"dbname": "Uniprot/SWISSPROT"
|
|
},
|
|
{
|
|
"primary_id": "7157",
|
|
"display_id": "TP53",
|
|
"dbname": "EntrezGene"
|
|
}
|
|
]
|
|
```
|
|
|
|
**Xrefs by symbol:**
|
|
```
|
|
GET /xrefs/symbol/{species}/{symbol}?content-type=application/json
|
|
```
|
|
|
|
**Example:**
|
|
```
|
|
https://rest.ensembl.org/xrefs/symbol/homo_sapiens/TP53?content-type=application/json
|
|
```
|
|
|
|
---
|
|
|
|
### 10. Comparative genomics -- Homology
|
|
|
|
```
|
|
GET /homology/id/{id}?content-type=application/json
|
|
```
|
|
|
|
| Parameter | Type | Description |
|
|
|--------------|--------|-------------|
|
|
| `id` | string | Ensembl gene ID. |
|
|
| `type` | string | `orthologues`, `paralogues`, `projections`, `all`. |
|
|
| `target_species` | string | Filter to specific species (e.g., `mus_musculus`). |
|
|
| `target_taxon` | int | Filter to NCBI taxon ID. |
|
|
| `sequence` | string | `none`, `cdna`, `protein`. Include aligned sequences. |
|
|
|
|
**Example -- get mouse orthologs of human TP53:**
|
|
```
|
|
https://rest.ensembl.org/homology/id/ENSG00000141510?type=orthologues&target_species=mus_musculus&content-type=application/json
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"data": [
|
|
{
|
|
"id": "ENSG00000141510",
|
|
"homologies": [
|
|
{
|
|
"type": "ortholog_one2one",
|
|
"target": {
|
|
"id": "ENSMUSG00000059552",
|
|
"species": "mus_musculus",
|
|
"protein_id": "ENSMUSP00000073359",
|
|
"perc_id": 77.8,
|
|
"perc_pos": 86.0
|
|
},
|
|
"source": {
|
|
"id": "ENSG00000141510",
|
|
"species": "homo_sapiens",
|
|
"protein_id": "ENSP00000269305"
|
|
},
|
|
"method_link_type": "ENSEMBL_ORTHOLOGUES",
|
|
"dn_ds": 0.15
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
**Homology by symbol:**
|
|
```
|
|
GET /homology/symbol/{species}/{symbol}?content-type=application/json
|
|
```
|
|
|
|
**Example:**
|
|
```
|
|
https://rest.ensembl.org/homology/symbol/homo_sapiens/TP53?type=orthologues&target_species=mus_musculus&content-type=application/json
|
|
```
|
|
|
|
---
|
|
|
|
### 11. Regulatory features
|
|
|
|
```
|
|
GET /regulatory/species/{species}/id/{id}?content-type=application/json
|
|
```
|
|
|
|
**Example:**
|
|
```
|
|
https://rest.ensembl.org/regulatory/species/homo_sapiens/id/ENSR00000000163?content-type=application/json
|
|
```
|
|
|
|
---
|
|
|
|
### 12. Species information
|
|
|
|
```
|
|
GET /info/species?content-type=application/json
|
|
```
|
|
|
|
Returns all available species with assembly info.
|
|
|
|
---
|
|
|
|
### 13. Assembly information
|
|
|
|
```
|
|
GET /info/assembly/{species}?content-type=application/json
|
|
```
|
|
|
|
**Example:**
|
|
```
|
|
https://rest.ensembl.org/info/assembly/homo_sapiens?content-type=application/json
|
|
```
|
|
|
|
Returns chromosome names, lengths, assembly name (GRCh38), coordinate system, etc.
|
|
|
|
---
|
|
|
|
### 14. Phenotype by gene
|
|
|
|
```
|
|
GET /phenotype/gene/{species}/{gene}?content-type=application/json
|
|
```
|
|
|
|
**Example:**
|
|
```
|
|
https://rest.ensembl.org/phenotype/gene/homo_sapiens/TP53?content-type=application/json
|
|
```
|
|
|
|
---
|
|
|
|
### 15. LD (Linkage Disequilibrium)
|
|
|
|
```
|
|
GET /ld/{species}/pairwise/{rsid1}/{rsid2}?population_name={pop}&content-type=application/json
|
|
```
|
|
|
|
**Example:**
|
|
```
|
|
https://rest.ensembl.org/ld/homo_sapiens/pairwise/rs699/rs4762?population_name=1000GENOMES:phase_3:CEU&content-type=application/json
|
|
```
|
|
|
|
---
|
|
|
|
## Common Species Names
|
|
|
|
| Species | API Name |
|
|
|---------|----------|
|
|
| Human | `homo_sapiens` |
|
|
| Mouse | `mus_musculus` |
|
|
| Rat | `rattus_norvegicus` |
|
|
| Zebrafish | `danio_rerio` |
|
|
| Fruit fly | `drosophila_melanogaster` |
|
|
| Chicken | `gallus_gallus` |
|
|
| Dog | `canis_lupus_familiaris` |
|
|
| Pig | `sus_scrofa` |
|
|
|
|
## Rate Limits
|
|
|
|
- **15 requests per second** for general users (no API key).
|
|
- If you register for an API key (optional), higher limits may be available.
|
|
- Requests exceeding the limit receive HTTP 429 with a `Retry-After` header.
|
|
- Batch endpoints (POST) count as a single request -- use them to reduce call count.
|
|
- Max 1000 IDs per batch POST for `/lookup/id`.
|
|
- Max 200 variants per batch POST for VEP.
|
|
- Rate limit headers are returned: `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`.
|
|
|
|
## Error Format
|
|
|
|
```json
|
|
{
|
|
"error": "ID 'ENSG999' not found"
|
|
}
|
|
```
|
|
|
|
HTTP 400 for bad requests, 404 for not found, 429 for rate limiting, 503 for service unavailable.
|
|
|
|
## Tips
|
|
|
|
- Always append `?content-type=application/json` to GET requests (or set the Accept header) -- the default is XML/HTML.
|
|
- Use the GRCh37 base URL (`grch37.rest.ensembl.org`) if you need hg19 coordinates.
|
|
- The `/lookup/symbol` endpoint is the fastest way to go from gene symbol to Ensembl ID.
|
|
- For VEP, the HGVS endpoint is most convenient for single variants; the region POST endpoint is best for batch.
|
|
- Combine `/xrefs/id` with gene IDs to cross-reference to UniProt, NCBI Gene, HGNC, and other databases.
|