BYTETOOLS

Ensembl REST API

Free Ensembl REST API with no key: genome assemblies, gene and transcript lookups, sequences, variants and cross-species comparative genomics. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the Ensembl REST API?

The Ensembl REST API is a free, key-free genomics API from EMBL-EBI. It provides gene, transcript and protein lookups, genomic sequences, variant and phenotype data, and comparative genomics across hundreds of vertebrate and other species.

Ensembl is one of the two main genome annotation resources in biology, and its REST API exposes essentially all of it. That includes the parts that are hard to do yourself: mapping coordinates between genome assemblies, retrieving orthologues and paralogues across species, and pulling variant consequence predictions through the VEP endpoint.

The endpoint below lists every species Ensembl carries and is the sensible starting point, because it tells you the exact assembly and `name` string each subsequent call expects. Also note the content negotiation model: Ensembl defaults to XML, so either send an `Accept: application/json` header or append `?content-type=application/json` as the example does. Forgetting this is the single most common first mistake with this API.

Quick facts

Base URL
https://rest.ensembl.org
Authentication
No API key or account. EMBL-EBI asks that automated users identify themselves with a contact address in the User-Agent.
Rate limit
15 requests per second per IP, reported in `X-RateLimit-*` headers. POST endpoints accept batches and are the intended route for bulk work.
Pricing
Free. Ensembl data is released under a no-restriction open licence.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Ensembl REST API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. List every species in the current Ensembl release

GET https://rest.ensembl.org/info/species?content-type=application/json

curl
curl 'https://rest.ensembl.org/info/species?content-type=application/json'
JavaScript (fetch)
const res = await fetch("https://rest.ensembl.org/info/species?content-type=application/json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://rest.ensembl.org/info/species?content-type=application/json", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "species": [
    {
      "assembly": "Lepidothrix_coronata-1.0",
      "common_name": "blue-crowned manakin",
      "display_name": "Blue-crowned manakin",
      "aliases": [],
      "strain_collection": null,
      "name": "lepidothrix_coronata",
      "strain": null,
      "taxon_id": "321398",
      "accession": "GCA_001604755.1",
      "release": 116,
      "groups": [
        "core",
        "rnaseq",
        "otherfeatures"
      ],
      "division": "EnsemblVertebrates"
    },
    {
      "strain_collection": null,
      "common_name": "yellow-billed parrot",
      "assembly": "ASM394721v1",
      "display_name": "Yellow-billed parrot",
      "aliases": [],
      "accession": "GCA_003947215.1",
      "groups": [
        "core",
        "rnaseq"
      ],
      "release": 116,
      "division": "EnsemblVertebrates",
      "name": "amazona_collaria",
      "strain": null,
      "taxon_id": "241587"
    },
    {
      "groups": [
        "otherfeatures",
        "rnaseq",
        "core"
      ],
      "division": "EnsemblVertebrates",
      "release": 116,
      "accession": "GCA_021556685.1",
      "strain": "SHRSP/BbbUtx",
      "name": "rattus_norvegicus_shrspbbbutx",
      "taxon_id": "10116",
      "strain_collection": null,
      "assembly": "UTH_Rnor_SHRSP_BbbUtx_1.0",
      "common_name": "Norway rat",
      "display_name": "Rat - SHRSP/BbbUtx",
      "aliases": []
    },
    {
      "groups": [
        "core",
        "otherfeatures"
      ],
      "division": "EnsemblVertebrates",
      "release": 116,
      "accession": "GCA_000151885.2",
      "strain": n

Parameters

ParameterTypeRequiredDescription
content-typequeryOptionalResponse format, since Ensembl defaults to XML. Use `application/json`, or send the equivalent `Accept` header. application/json
speciespath segmentOptionalSpecies name in Ensembl's lowercase underscore form, as returned by this endpoint. homo_sapiens
idpath segmentOptionalA stable Ensembl identifier for a gene, transcript or protein. ENSG00000157764
expandqueryOptionalOn lookup endpoints, include child objects such as transcripts and exons. 1
divisionqueryOptionalRestrict to one Ensembl division, for example `EnsemblVertebrates` or `EnsemblPlants`. EnsemblVertebrates

Response fields

species[].namestring
The species identifier used by every other endpoint — lowercase with underscores, such as `homo_sapiens`.
species[].assemblystring
Genome assembly name. Coordinates are only meaningful relative to a specific assembly, so record this alongside any positions you store.
species[].accessionstring
INSDC assembly accession, which pins the exact assembly version.
species[].taxon_idstring
NCBI taxonomy identifier, useful for joining to other databases.
species[].releaseinteger
Ensembl release number the record belongs to.
species[].groupsarray
Which databases exist for the species — `core`, `variation`, `compara`, `rnaseq` and others. A missing group means those endpoints will not work for that species.
species[].divisionstring
Which Ensembl division the species belongs to.

What you can build with the Ensembl REST API

  • Resolve a gene symbol to Ensembl identifiers and genomic coordinates
  • Retrieve genomic, cDNA or protein sequence for a region or transcript
  • Predict the consequences of variants with the VEP endpoint
  • Find orthologues of a gene in other species for comparative analysis

Common errors and how to fix them

400

Unknown species, identifier or malformed region string.

Fix: Species names are lowercase with underscores. Regions use `chromosome:start..end` — a hyphen instead of the double dot fails.

429

Rate limit of 15 requests per second exceeded.

Fix: Read `X-RateLimit-Reset` and back off. Use the POST batch endpoints for bulk lookups rather than looping.

XML instead of JSON

No content type was negotiated.

Fix: Ensembl defaults to XML. Send `Accept: application/json` or add `?content-type=application/json`.

Ensembl REST API — frequently asked questions

Is the Ensembl REST API free?

Yes, free with no API key or registration. EMBL-EBI asks only that heavy automated users identify themselves with a contact address in the User-Agent header.

Why does Ensembl return XML instead of JSON?

XML is the default. Add `?content-type=application/json` to the query string or send an `Accept: application/json` header, and every endpoint returns JSON instead.

How do I find the right species name?

Call the species info endpoint. It returns the exact `name` string — lowercase with underscores, such as `homo_sapiens` — that every other endpoint expects, along with the assembly each species is annotated against.

What are the rate limits?

15 requests per second per IP, reported in `X-RateLimit-*` response headers. For bulk work use the POST variants of the lookup and sequence endpoints, which accept arrays of identifiers in a single call.

Tools that pair with this API

Ensembl REST is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.