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.
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 'https://www.proteinatlas.org/api/search_download.php?search=EGFR&format=json&columns=g,gs,eg,up&compress=no'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);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())[
{
"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": [
"QParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
search | query | Required | Free-text search term. Matches gene names, synonyms and record text, so results include near matches. EGFR |
format | query | Required | Output format: `json`, `tsv` or `xml`. json |
columns | query | Required | Comma-separated column codes. `g` gene, `gs` synonyms, `eg` Ensembl, `up` UniProt, plus expression and pathology codes. g,gs,eg,up |
compress | query | Optional | Set 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
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
JSON to CSV Converter
Convert a JSON array of objects to CSV online. Automatic column headers from the union of all keys, delimiter choice and proper quoting — all in-browser.
CSV Viewer & Table
View CSV as a clean HTML table online. Live search filter, row and column counts, delimiter and header options — all processed locally in your browser.
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.