Skill Tracer
Skills › Scientific Agent Skills › database-lookup › ena.md

ena.md

371 lines · skills/database-lookup/references/ena.md at 5f2bc03

Open on GitHub
1# European Nucleotide Archive (ENA) API Reference
2

European Nucleotide Archive (ENA) API Reference

Raw lines 1 to 2
3## Overview
4The ENA is Europe's primary nucleotide sequence repository, part of the International Nucleotide Sequence Database Collaboration (INSDC) alongside NCBI GenBank and DDBJ. It stores raw sequencing reads, assembled sequences, genome assemblies, and associated metadata. ENA provides five complementary APIs for different access patterns.
5

Overview

The ENA is Europe's primary nucleotide sequence repository, part of the International Nucleotide Sequence Database Collaboration (INSDC) alongside NCBI GenBank and DDBJ. It stores raw sequencing reads, assembled sequences, genome assemblies, and associated metadata. ENA provides five complementary APIs for different access patterns.

Raw lines 3 to 5
6## 1. ENA Portal API (Advanced Search)
7

1. ENA Portal API (Advanced Search)

Raw lines 6 to 7
8### Base URL
9```
10https://www.ebi.ac.uk/ena/portal/api
11```
13No authentication required. All endpoints are public.

Base URL

https://www.ebi.ac.uk/ena/portal/api

No authentication required. All endpoints are public.

Raw lines 8 to 14
15### Key Endpoints
17#### Search records
18```
19GET /search?result={result_type}&query={query}&fields={fields}&limit={N}&format={format}
20```
22| Parameter | Type | Description |
23|-----------|------|-------------|
24| `result` | string | **Required.** Data type to search. See Result Types below. |
25| `query` | string | Search query using ENA query syntax. |
26| `fields` | string | Comma-separated list of fields to return. Use `/returnFields` to see available fields per result type. |
27| `limit` | int | Bound results explicitly; 0 or omission can request the entire result set. |
28| `format` | string | `json`, `tsv` (default). |
30**Query syntax:**
31```
32tax_id=9606 AND description="*hemoglobin*"
33tax_id=9606 AND library_strategy="RNA-Seq"
34accession="PRJEB40665"
35scientific_name="Escherichia coli" AND dataclass="STD"
36country="United Kingdom" AND first_public>2024-01-01
37```
39Operators: `=`, `!=`, `>`, `<`, `>=`, `<=`. Use `AND`, `OR`, `NOT`. Wildcards: `*`. Enclose values with spaces in double quotes.
41**Example -- search human RNA-Seq runs:**
42```
43https://www.ebi.ac.uk/ena/portal/api/search?result=read_run&query=tax_id%3D9606%20AND%20library_strategy%3D%22RNA-Seq%22&fields=run_accession,experiment_accession,sample_accession,study_accession,instrument_platform,library_strategy,read_count,base_count&limit=5&format=json
44```
46**Example -- search nucleotide sequences by organism:**
47```
48https://www.ebi.ac.uk/ena/portal/api/search?result=sequence&query=tax_id%3D9606%20AND%20description%3D%22*hemoglobin*%22&fields=accession,description,tax_id,scientific_name,base_count&limit=5&format=json
49```
51**Response:**
52```json
54 {
55 "accession": "AA126503",
56 "description": "zk94h05.s1 Soares_pregnant_uterus_NbHPU Homo sapiens cDNA clone ...",
57 "tax_id": "9606"
58 }
60```
62#### Count records
63```
64GET /count?result={result_type}&query={query}
65```
67Returns a plain integer count.
69**Example:**
70```
71https://www.ebi.ac.uk/ena/portal/api/count?result=read_run&query=tax_id%3D9606%20AND%20library_strategy%3D%22RNA-Seq%22
72```
74#### List available result types
75```
76GET /results?format=json
77```
79#### List searchable fields for a result type
80```
81GET /searchFields?result={result_type}
82```
84#### List returnable fields for a result type
85```
86GET /returnFields?result={result_type}
87```

Key Endpoints

Search records

GET /search?result={result_type}&query={query}&fields={fields}&limit={N}&format={format}
ParameterTypeDescription
resultstringRequired. Data type to search. See Result Types below.
querystringSearch query using ENA query syntax.
fieldsstringComma-separated list of fields to return. Use /returnFields to see available fields per result type.
limitintBound results explicitly; 0 or omission can request the entire result set.
formatstringjson, tsv (default).

Query syntax:

tax_id=9606 AND description="*hemoglobin*"
tax_id=9606 AND library_strategy="RNA-Seq"
accession="PRJEB40665"
scientific_name="Escherichia coli" AND dataclass="STD"
country="United Kingdom" AND first_public>2024-01-01

Operators: =, !=, >, <, >=, <=. Use AND, OR, NOT. Wildcards: *. Enclose values with spaces in double quotes.

Example -- search human RNA-Seq runs:

https://www.ebi.ac.uk/ena/portal/api/search?result=read_run&query=tax_id%3D9606%20AND%20library_strategy%3D%22RNA-Seq%22&fields=run_accession,experiment_accession,sample_accession,study_accession,instrument_platform,library_strategy,read_count,base_count&limit=5&format=json

Example -- search nucleotide sequences by organism:

https://www.ebi.ac.uk/ena/portal/api/search?result=sequence&query=tax_id%3D9606%20AND%20description%3D%22*hemoglobin*%22&fields=accession,description,tax_id,scientific_name,base_count&limit=5&format=json

Response:

[
  {
    "accession": "AA126503",
    "description": "zk94h05.s1 Soares_pregnant_uterus_NbHPU Homo sapiens cDNA clone ...",
    "tax_id": "9606"
  }
]

Count records

GET /count?result={result_type}&query={query}

Returns a plain integer count.

Example:

https://www.ebi.ac.uk/ena/portal/api/count?result=read_run&query=tax_id%3D9606%20AND%20library_strategy%3D%22RNA-Seq%22

List available result types

GET /results?format=json

List searchable fields for a result type

GET /searchFields?result={result_type}

List returnable fields for a result type

GET /returnFields?result={result_type}
Raw lines 15 to 88
89### Result Types
91| Result Type | Description |
92|-------------|-------------|
93| `sequence` | Nucleotide sequences |
94| `coding` | Coding sequences (CDS) |
95| `noncoding` | Non-coding sequences |
96| `read_run` | Raw sequencing reads (runs) |
97| `read_experiment` | Sequencing experiments |
98| `read_study` | Studies for raw reads |
99| `analysis` | Analyses |
100| `analysis_study` | Studies for analyses |
101| `assembly` | Genome assemblies |
102| `sample` | Samples |
103| `study` | Studies |
104| `taxon` | Taxonomic classification |
105| `wgs_set` | Genome assembly contig sets (WGS) |
106| `tsa_set` | Transcriptome assembly contig sets (TSA) |
107| `tls_set` | Targeted locus study contig sets (TLS) |
109---

Result Types

Result TypeDescription
sequenceNucleotide sequences
codingCoding sequences (CDS)
noncodingNon-coding sequences
read_runRaw sequencing reads (runs)
read_experimentSequencing experiments
read_studyStudies for raw reads
analysisAnalyses
analysis_studyStudies for analyses
assemblyGenome assemblies
sampleSamples
studyStudies
taxonTaxonomic classification
wgs_setGenome assembly contig sets (WGS)
tsa_setTranscriptome assembly contig sets (TSA)
tls_setTargeted locus study contig sets (TLS)

Raw lines 89 to 110
111## 2. ENA Browser API (Record Retrieval)

2. ENA Browser API (Record Retrieval)

Raw lines 111 to 112
113### Base URL
114```
115https://www.ebi.ac.uk/ena/browser/api
116```
118Use this for direct retrieval of records by accession number.

Base URL

https://www.ebi.ac.uk/ena/browser/api

Use this for direct retrieval of records by accession number.

Raw lines 113 to 119
120### Key Endpoints
122#### Retrieve record in XML format
123```
124GET /xml/{accession}
125```
127**Example:**
128```
129https://www.ebi.ac.uk/ena/browser/api/xml/PRJEB40665
130https://www.ebi.ac.uk/ena/browser/api/xml/SRR12345678
131https://www.ebi.ac.uk/ena/browser/api/xml/ERS1234567
132```
134#### Retrieve record in EMBL flat file format
135```
136GET /embl/{accession}
137```
139**Example:**
140```
141https://www.ebi.ac.uk/ena/browser/api/embl/AY585947
142```
144Supports `?lineLimit=N` to truncate long records.
146#### Retrieve sequence in FASTA format
147```
148GET /fasta/{accession}
149```
151**Example:**
152```
153https://www.ebi.ac.uk/ena/browser/api/fasta/AY585947
154```

Key Endpoints

Retrieve record in XML format

GET /xml/{accession}

Example:

https://www.ebi.ac.uk/ena/browser/api/xml/PRJEB40665
https://www.ebi.ac.uk/ena/browser/api/xml/SRR12345678
https://www.ebi.ac.uk/ena/browser/api/xml/ERS1234567

Retrieve record in EMBL flat file format

GET /embl/{accession}

Example:

https://www.ebi.ac.uk/ena/browser/api/embl/AY585947

Supports ?lineLimit=N to truncate long records.

Retrieve sequence in FASTA format

GET /fasta/{accession}

Example:

https://www.ebi.ac.uk/ena/browser/api/fasta/AY585947
Raw lines 120 to 155
156### Response Formats
158| Endpoint | Format | Use case |
159|----------|--------|----------|
160| `/xml/{accession}` | XML | Full structured metadata for studies, samples, experiments, runs |
161| `/embl/{accession}` | EMBL flat file | Annotated sequences with features |
162| `/fasta/{accession}` | FASTA | Raw nucleotide/protein sequences |

Response Formats

EndpointFormatUse case
/xml/{accession}XMLFull structured metadata for studies, samples, experiments, runs
/embl/{accession}EMBL flat fileAnnotated sequences with features
/fasta/{accession}FASTARaw nucleotide/protein sequences
Raw lines 156 to 163
164### Accession Types
166| Prefix | Entity | Example |
167|--------|--------|---------|
168| `PRJEB` / `PRJNA` / `PRJDB` | Study/Project | `PRJEB40665` |
169| `ERX` / `SRX` / `DRX` | Experiment | `ERX1234567` |
170| `ERS` / `SRS` / `DRS` | Sample | `ERS1234567` |
171| `ERR` / `SRR` / `DRR` | Run | `ERR1234567` |
172| `GCA` | Genome assembly | `GCA_000001405.29` |
173| Standard INSDC | Sequence | `AY585947`, `M10051` |
175---

Accession Types

PrefixEntityExample
PRJEB / PRJNA / PRJDBStudy/ProjectPRJEB40665
ERX / SRX / DRXExperimentERX1234567
ERS / SRS / DRSSampleERS1234567
ERR / SRR / DRRRunERR1234567
GCAGenome assemblyGCA_000001405.29
Standard INSDCSequenceAY585947, M10051

Raw lines 164 to 176
177## 3. ENA Taxonomy REST API

3. ENA Taxonomy REST API

Raw lines 177 to 178
179### Base URL
180```
181https://www.ebi.ac.uk/ena/taxonomy/rest
182```

Base URL

https://www.ebi.ac.uk/ena/taxonomy/rest
Raw lines 179 to 183
184### Key Endpoints
186#### Lookup by taxonomy ID
187```
188GET /tax-id/{taxId}
189```
191**Example:**
192```
193https://www.ebi.ac.uk/ena/taxonomy/rest/tax-id/9606
194```
196**Response:**
197```json
199 "taxId": 9606,
200 "scientificName": "Homo sapiens",
201 "commonName": "human",
202 "formalName": true,
203 "rank": "species",
204 "division": "HUM",
205 "lineage": "Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; ...; Homo; ",
206 "geneticCode": "1",
207 "mitochondrialGeneticCode": "2",
208 "submittable": true,
209 "binomial": true,
210 "metagenome": false,
211 "otherNames": [
212 {"nameClass": "authority", "name": "Linnaeus, 1758"},
213 {"nameClass": "genbank common name", "name": "human"}
214 ]
216```
218#### Search by scientific name
219```
220GET /scientific-name/{name}
221```
223**Example:**
224```
225https://www.ebi.ac.uk/ena/taxonomy/rest/scientific-name/Homo%20sapiens
226```
228Returns an array of matching taxonomy records.
230#### Search by common name
231```
232GET /any-name/{name}
233```
235**Example:**
236```
237https://www.ebi.ac.uk/ena/taxonomy/rest/any-name/human
238```
240#### Suggest names (autocomplete)
241```
242GET /suggest-for-submission/{partialName}
243```
245**Example:**
246```
247https://www.ebi.ac.uk/ena/taxonomy/rest/suggest-for-submission/Homo%20sap
248```
250---

Key Endpoints

Lookup by taxonomy ID

GET /tax-id/{taxId}

Example:

https://www.ebi.ac.uk/ena/taxonomy/rest/tax-id/9606

Response:

{
  "taxId": 9606,
  "scientificName": "Homo sapiens",
  "commonName": "human",
  "formalName": true,
  "rank": "species",
  "division": "HUM",
  "lineage": "Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; ...; Homo; ",
  "geneticCode": "1",
  "mitochondrialGeneticCode": "2",
  "submittable": true,
  "binomial": true,
  "metagenome": false,
  "otherNames": [
    {"nameClass": "authority", "name": "Linnaeus, 1758"},
    {"nameClass": "genbank common name", "name": "human"}
  ]
}

Search by scientific name

GET /scientific-name/{name}

Example:

https://www.ebi.ac.uk/ena/taxonomy/rest/scientific-name/Homo%20sapiens

Returns an array of matching taxonomy records.

Search by common name

GET /any-name/{name}

Example:

https://www.ebi.ac.uk/ena/taxonomy/rest/any-name/human

Suggest names (autocomplete)

GET /suggest-for-submission/{partialName}

Example:

https://www.ebi.ac.uk/ena/taxonomy/rest/suggest-for-submission/Homo%20sap

Raw lines 184 to 251
252## 4. ENA Cross Reference Service

4. ENA Cross Reference Service

Raw lines 252 to 253
254### Base URL
255```
256https://www.ebi.ac.uk/ena/xref/rest
257```
259Retrieves links between ENA records and external databases (UniProt, PDB, PubMed, etc.).

Base URL

https://www.ebi.ac.uk/ena/xref/rest

Retrieves links between ENA records and external databases (UniProt, PDB, PubMed, etc.).

Raw lines 254 to 260
261### Key Endpoints
263#### Search cross-references by accession
264```
265GET /json/search?accession={accession}
266```
268| Parameter | Type | Description |
269|-----------|------|-------------|
270| `accession` | string | ENA accession to look up cross-references for. |
271| `source` | string | Filter by source database (e.g., `UniProtKB`). |
272| `target` | string | Filter by target type. |
273| `limit` | int | Max results. |
274| `offset` | int | Pagination offset. |
276**Example:**
277```
278https://www.ebi.ac.uk/ena/xref/rest/json/search?accession=A00145
279```
281**Response:**
282```json
284 {
285 "Source": "EuropePMC",
286 "Source Primary Accession": "PMC12345",
287 "Source Secondary Accession": "",
288 "Source URL": "https://europepmc.org/...",
289 "Source Secondary URL": "",
290 "Target": "sequence",
291 "Target Primary Accession": "A00145",
292 "Target Secondary Accession": "",
293 "Target URL": "https://www.ebi.ac.uk/ena/...",
294 "Has Inferred": "N",
295 "Inferred From": ""
296 }
298```
300---

Key Endpoints

Search cross-references by accession

GET /json/search?accession={accession}
ParameterTypeDescription
accessionstringENA accession to look up cross-references for.
sourcestringFilter by source database (e.g., UniProtKB).
targetstringFilter by target type.
limitintMax results.
offsetintPagination offset.

Example:

https://www.ebi.ac.uk/ena/xref/rest/json/search?accession=A00145

Response:

[
  {
    "Source": "EuropePMC",
    "Source Primary Accession": "PMC12345",
    "Source Secondary Accession": "",
    "Source URL": "https://europepmc.org/...",
    "Source Secondary URL": "",
    "Target": "sequence",
    "Target Primary Accession": "A00145",
    "Target Secondary Accession": "",
    "Target URL": "https://www.ebi.ac.uk/ena/...",
    "Has Inferred": "N",
    "Inferred From": ""
  }
]

Raw lines 261 to 301
302## 5. CRAM Reference Registry

5. CRAM Reference Registry

Raw lines 302 to 303
304### Base URL
305```
306https://www.ebi.ac.uk/ena/cram
307```
309Retrieves reference sequences used in CRAM file compression.

Base URL

https://www.ebi.ac.uk/ena/cram

Retrieves reference sequences used in CRAM file compression.

Raw lines 304 to 310
311### Key Endpoints
313#### Lookup by MD5 checksum
314```
315GET /md5/{md5}
316```
318**Example:**
319```
320https://www.ebi.ac.uk/ena/cram/md5/b1eba5b6e4440e22e1e02f7e0febd2da
321```
323#### Lookup by SHA1 checksum
324```
325GET /sha1/{sha1}
326```
328Inspect the CRAM registry response: checksum retrieval can return raw sequence rather than FASTA. Do not pass an unverified body to a FASTA parser. Verify the checksum of the normalized sequence against the requested registry identifier.
330---

Key Endpoints

Lookup by MD5 checksum

GET /md5/{md5}

Example:

https://www.ebi.ac.uk/ena/cram/md5/b1eba5b6e4440e22e1e02f7e0febd2da

Lookup by SHA1 checksum

GET /sha1/{sha1}

Inspect the CRAM registry response: checksum retrieval can return raw sequence rather than FASTA. Do not pass an unverified body to a FASTA parser. Verify the checksum of the normalized sequence against the requested registry identifier.


Raw lines 311 to 331
332## Common Search Patterns
334```
335# All RNA-Seq runs for a species
336result=read_run&query=tax_id=9606 AND library_strategy="RNA-Seq"
338# WGS assemblies for an organism
339result=assembly&query=tax_id=562 AND assembly_type="primary metagenome"
341# Sequences by study accession
342result=sequence&query=study_accession="PRJEB40665"
344# Samples from a country with collection date
345result=sample&query=country="Germany" AND collection_date>=2024-01-01
347# Coding sequences for a gene keyword
348result=coding&query=description="*BRCA1*" AND tax_id=9606
350# Count available datasets
351/count?result=read_run&query=tax_id=9606
353# Get metadata fields available for a result type
354/returnFields?result=read_run
355/searchFields?result=read_run
356```

Common Search Patterns

# All RNA-Seq runs for a species
result=read_run&query=tax_id=9606 AND library_strategy="RNA-Seq"

# WGS assemblies for an organism
result=assembly&query=tax_id=562 AND assembly_type="primary metagenome"

# Sequences by study accession
result=sequence&query=study_accession="PRJEB40665"

# Samples from a country with collection date
result=sample&query=country="Germany" AND collection_date>=2024-01-01

# Coding sequences for a gene keyword
result=coding&query=description="*BRCA1*" AND tax_id=9606

# Count available datasets
/count?result=read_run&query=tax_id=9606

# Get metadata fields available for a result type
/returnFields?result=read_run
/searchFields?result=read_run
Raw lines 332 to 357
358## Rate Limits
360- No authentication required
361- No formal published rate limit, but be courteous: avoid more than ~5 concurrent requests
362- Portal `/search` has no documented `offset`. A limit can truncate results; use `/count` to check size and retrieve a complete bounded query or partition by supported indexed fields. Do not repeatedly request an ignored offset.
363- For bulk downloads of sequence data (FASTQ, etc.), use ENA's FTP/Aspera services rather than the REST API

Rate Limits

  • No authentication required
  • No formal published rate limit, but be courteous: avoid more than ~5 concurrent requests
  • Portal /search has no documented offset. A limit can truncate results; use /count to check size and retrieve a complete bounded query or partition by supported indexed fields. Do not repeatedly request an ignored offset.
  • For bulk downloads of sequence data (FASTQ, etc.), use ENA's FTP/Aspera services rather than the REST API
Raw lines 358 to 364
365## Tips
367- **ENA vs SRA**: ENA and NCBI SRA mirror each other's data (both are INSDC members). ENA accessions (ERR/ERX/ERS/PRJEB) and NCBI accessions (SRR/SRX/SRS/PRJNA) are cross-referenced. Use whichever API has the query features you need.
368- **Portal API for search, Browser API for retrieval**: Use the Portal API when you need to search across many records with filters. Use the Browser API when you have a specific accession and want the full record.
369- **JSON vs XML**: The Portal API returns JSON or TSV. The Browser API primarily returns XML, EMBL, or FASTA.
370- **Field discovery**: Always check `/returnFields?result={type}` and `/searchFields?result={type}` to see what's available for each result type -- fields differ between result types.
371- **Cross-references**: Use the xref service to find links from ENA records to UniProt, PDB, PubMed, and other databases.

Tips

  • ENA vs SRA: ENA and NCBI SRA mirror each other's data (both are INSDC members). ENA accessions (ERR/ERX/ERS/PRJEB) and NCBI accessions (SRR/SRX/SRS/PRJNA) are cross-referenced. Use whichever API has the query features you need.
  • Portal API for search, Browser API for retrieval: Use the Portal API when you need to search across many records with filters. Use the Browser API when you have a specific accession and want the full record.
  • JSON vs XML: The Portal API returns JSON or TSV. The Browser API primarily returns XML, EMBL, or FASTA.
  • Field discovery: Always check /returnFields?result={type} and /searchFields?result={type} to see what's available for each result type -- fields differ between result types.
  • Cross-references: Use the xref service to find links from ENA records to UniProt, PDB, PubMed, and other databases.
Raw lines 365 to 371