| name | ena-sequence-api |
| description | Access nucleotide sequence data from the European Nucleotide Archive |
| metadata | {"openclaw":{"emoji":"🔬","category":"domains","subcategory":"biomedical","keywords":["ENA","nucleotide sequences","genomics","EMBL-EBI","sequencing data","NGS"],"source":"https://www.ebi.ac.uk/ena/"}} |
European Nucleotide Archive (ENA) API
Overview
The European Nucleotide Archive (ENA) at EMBL-EBI is one of the three global nucleotide sequence databases (with NCBI GenBank and DDBJ). It provides access to raw sequencing reads, assembled sequences, and functional annotations from all organisms. The API supports accession lookup, text search, and bulk data retrieval. Free, no authentication required.
API Endpoints
Portal API (Search)
curl "https://www.ebi.ac.uk/ena/portal/api/search?query=CRISPR+cas9&result=study&limit=20&format=json"
curl "https://www.ebi.ac.uk/ena/portal/api/search?query=human+gut+microbiome&result=sample&limit=20&format=json"
curl "https://www.ebi.ac.uk/ena/portal/api/search?query=RNA-seq+cancer&result=read_run&limit=20&format=json"
Browser API (Accession Lookup)
curl "https://www.ebi.ac.uk/ena/browser/api/xml/PRJEB12345"
curl "https://www.ebi.ac.uk/ena/browser/api/summary/PRJEB12345"
curl "https://www.ebi.ac.uk/ena/browser/api/fasta/AF123456"
curl "https://www.ebi.ac.uk/ena/browser/api/embl/AF123456"
Taxonomy Search
curl "https://www.ebi.ac.uk/ena/portal/api/search?query=tax_tree(9606)&result=study&limit=20&format=json"
curl "https://www.ebi.ac.uk/ena/taxonomy/rest/tax-id/9606"
Result Types
| Type | Description | Example accession |
|---|
study | Research project | PRJEB12345 |
sample | Biological sample | SAMEA12345 |
experiment | Library/protocol | ERX12345 |
read_run | Sequencing run | ERR12345 |
analysis | Computed analysis | ERZ12345 |
sequence | Assembled sequence | AF123456 |
wgs_set | Whole genome shotgun | AABR00000000 |
Query Parameters
| Parameter | Description | Example |
|---|
query | Search text or taxonomy | query=SARS-CoV-2 |
result | Result type | result=study |
limit | Max results (default 100K) | limit=50 |
offset | Pagination offset | offset=100 |
format | Response format | json, tsv, xml |
fields | Specific fields | fields=accession,description |
Python Usage
import requests
PORTAL_URL = "https://www.ebi.ac.uk/ena/portal/api"
BROWSER_URL = "https://www.ebi.ac.uk/ena/browser/api"
def search_studies(query: str, limit: int = 20) -> list:
"""Search ENA for research studies."""
params = {
"query": query,
"result": "study",
"limit": limit,
"format": "json",
"fields": "study_accession,study_title,study_description,"
"tax_id,scientific_name,center_name",
}
resp = requests.get(f"{PORTAL_URL}/search", params=params)
resp.raise_for_status()
return resp.json()
def search_runs(query: str, limit: int = 20) -> list:
"""Search for sequencing runs."""
params = {
"query": query,
"result": "read_run",
"limit": limit,
"format": "json",
"fields": "run_accession,experiment_title,instrument_platform,"
"library_strategy,read_count,base_count",
}
resp = requests.get(f"{PORTAL_URL}/search", params=params)
resp.raise_for_status()
return resp.json()
def get_fasta() -> :
resp = requests.get()
resp.raise_for_status()
resp.text
() -> :
params = {
: ,
: ,
: ,
: ,
: ,
}
resp = requests.get(, params=params)
resp.raise_for_status()
resp.json()
studies = search_studies(, limit=)
s studies:
()
()
runs = search_runs(, limit=)
r runs:
reads = (r.get(, ))
()
(
)
Data Access
wget ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR123/ERR123456/ERR123456_1.fastq.gz
ascp -QT -l 300m -P33001 \
era-fasp@fasp.sra.ebi.ac.uk:/vol1/fastq/ERR123/ERR123456/ ./
References