BYTETOOLS

Human Protein Atlas API

Free Human Protein Atlas search API with no key: tissue, cell-line, pathology and subcellular protein expression data as JSON, TSV or XML. Column selection included. Tested example.

No API key requiredCORS enabledHTTPSFree tier

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

What is the Human Protein Atlas API?

The Human Protein Atlas offers a free, key-free search and download API returning protein expression data for the human proteome. You choose which columns to return — identifiers, tissue expression, subcellular location, pathology prognostics — and receive JSON, TSV or XML.

The Human Protein Atlas is a Swedish mapping project that has stained essentially every human protein across tissues, cell lines and cancer samples, and the API is the programmatic face of its search page. Rather than a REST resource per gene, it exposes one query endpoint where you supply a search term and a `columns` list of two-to-four-character codes: `g` for gene name, `gs` for synonyms, `eg` for Ensembl, `up` for UniProt, and dozens more for expression and pathology data.

Two things surprise newcomers. The search is a full-text match, not an exact lookup, so a query for EGFR returns EGFR first and then every gene whose record mentions it — the example below shows FLT4, KDR and RHBDF1 following the exact hit. And the column codes are documented on the search page rather than in a formal API reference, so the practical workflow is to build the query you want in the web interface and then copy its URL parameters. Expression values are immunohistochemistry-based scores assigned by annotators, which is qualitative evidence, not a measured concentration.

Quick facts

Base URL
https://www.proteinatlas.org/api
Authentication
No API key or account. The Human Protein Atlas is free for both academic and commercial use under a Creative Commons Attribution-ShareAlike licence; the ShareAlike term applies if you redistribute derived datasets.
Rate limit
No published limit. The project asks that anyone needing the whole dataset download the bulk TSV files rather than paging the search API.
Pricing
Free. Data is licensed CC BY-SA, so attribution and share-alike obligations apply to redistribution.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Human Protein Atlas 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. Search for EGFR and return gene, synonyms, Ensembl and UniProt columns

GET https://www.proteinatlas.org/api/search_download.php?search=EGFR&format=json&columns=g,gs,eg,up&compress=no

curl
curl 'https://www.proteinatlas.org/api/search_download.php?search=EGFR&format=json&columns=g,gs,eg,up&compress=no'
JavaScript (fetch)
const res = await fetch("https://www.proteinatlas.org/api/search_download.php?search=EGFR&format=json&columns=g,gs,eg,up&compress=no");
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://www.proteinatlas.org/api/search_download.php?search=EGFR&format=json&columns=g,gs,eg,up&compress=no", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
[
  {
    "Gene": "EGFR",
    "Gene synonym": [
      "ERBB",
      "ERBB1",
      "ERRP"
    ],
    "Ensembl": "ENSG00000146648",
    "Uniprot": [
      "P00533"
    ]
  },
  {
    "Gene": "FLT4",
    "Gene synonym": [
      "PCL",
      "VEGFR-3",
      "VEGFR3"
    ],
    "Ensembl": "ENSG00000037280",
    "Uniprot": [
      "P35916"
    ]
  },
  {
    "Gene": "KDR",
    "Gene synonym": [
      "CD309",
      "FLK1",
      "VEGFR",
      "VEGFR2"
    ],
    "Ensembl": "ENSG00000128052",
    "Uniprot": [
      "P35968"
    ]
  },
  {
    "Gene": "FLT1",
    "Gene synonym": [
      "FLT",
      "VEGFR1"
    ],
    "Ensembl": "ENSG00000102755",
    "Uniprot": [
      "P17948"
    ]
  },
  {
    "Gene": "RHBDF1",
    "Gene synonym": [
      "C16orf8",
      "Dist1",
      "EGFR-RS",
      "FLJ2235",
      "iRhom1"
    ],
    "Ensembl": "ENSG00000007384",
    "Uniprot": [
      "Q96CC6"
    ]
  },
  {
    "Gene": "EREG",
    "Gene synonym": [
      "ER"
    ],
    "Ensembl": "ENSG00000124882",
    "Uniprot": [
      "O14944"
    ]
  },
  {
    "Gene": "EPS15",
    "Gene synonym": [
      "AF-1P",
      "MLLT5"
    ],
    "Ensembl": "ENSG00000085832",
    "Uniprot": [
      "P42566"
    ]
  },
  {
    "Gene": "EPS8",
    "Gene synonym": [],
    "Ensembl": "ENSG00000151491",
    "Uniprot": [
      "Q12929"
    ]
  },
  {
    "Gene": "ERBB3",
    "Gene synonym": [
      "HER3",
      "LCCS2"
    ],
    "Ensembl": "ENSG00000065361",
    "Uniprot": [
      "P21860"
    ]
  },
  {
    "Gene": "GRB7",
    "Gene synonym": [],
    "Ensembl": "ENSG00000141738",
    "Uniprot": [
      "Q

Parameters

ParameterTypeRequiredDescription
searchqueryRequiredFree-text search term. Matches gene names, synonyms and record text, so results include near matches. EGFR
formatqueryRequiredOutput format: `json`, `tsv` or `xml`. json
columnsqueryRequiredComma-separated column codes. `g` gene, `gs` synonyms, `eg` Ensembl, `up` UniProt, plus expression and pathology codes. g,gs,eg,up
compressqueryOptionalSet to `no` to receive an uncompressed body. Defaults to gzip for large downloads. no

Response fields

Genestring
Approved gene symbol for the matched record.
Gene synonymarray
Alternative symbols, which is how you catch records filed under an older name.
Ensemblstring
Ensembl gene identifier, the Atlas's primary key for a gene.
Uniprotarray
UniProt accessions mapped to the gene. An array because one gene can map to several entries.
(expression columns)varies
Additional requested columns arrive as extra keys named exactly as they appear in the web interface, including spaces.

What you can build with the Human Protein Atlas API

  • Look up which tissues express a protein of interest
  • Cross-reference gene symbols to Ensembl and UniProt identifiers in bulk
  • Pull subcellular localisation annotations for a candidate gene list
  • Add pathology prognostic data to a cancer gene panel
  • Resolve outdated gene symbols through the synonym column

Common errors and how to fix them

Exact match not first

The endpoint is a full-text search, not a lookup.

Fix: Filter the returned array for an exact `Gene` match yourself, or search by Ensembl identifier, which is unambiguous.

Empty array

The search term matched nothing.

Fix: Try the Ensembl id or a known synonym. Symbols that were recently renamed sometimes only match through `gs`.

Unreadable or binary body

The response was gzipped.

Fix: Send `compress=no`, or decompress the body — the API defaults to compression because the full dataset is large.

Unexpected column names

Column keys are the human-readable labels, not the codes you sent.

Fix: The response key for `gs` is `Gene synonym`, spaces and all. Map codes to labels once rather than assuming they round-trip.

Human Protein Atlas API — frequently asked questions

Is the Human Protein Atlas API free for commercial use?

Yes. The Atlas is open access under a Creative Commons Attribution-ShareAlike licence, which permits commercial use provided you attribute the project and apply the same licence to any redistributed derivative dataset.

How do I know which column codes to use?

Build the query in the Human Protein Atlas search interface, choose your columns there, and copy the `columns` parameter out of the resulting URL. The codes are documented through that interface rather than in a standalone API reference.

Are the expression values quantitative?

Mostly not. Tissue and pathology expression is scored by annotators from immunohistochemistry staining into categories such as high, medium, low and not detected. Separate RNA consensus columns carry quantitative transcript levels, and those two kinds of evidence should not be mixed.

Can I download the whole dataset instead of querying it?

Yes, and you should if you need more than a few hundred genes. The project publishes complete TSV and XML downloads, which are far friendlier to both parties than paging the search endpoint.

Tools that pair with this API

Human Protein Atlas 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.