Dataset: GTEx normal-tissue expression - fully open, and the version-string trap that silently returns nothing
also called GTEx access plan · normal tissue expression pull
GTEx measures how much of each gene healthy adult tissues make. It tells us which organs would be exposed if we blocked a target. It is completely free to use, but there is a trap: if you get the gene's version number slightly wrong, the service returns an empty answer instead of an error.
The same thing, for a scientist
GTEx supplies the normal-tissue half of every therapeutic-index argument in this beat. The median gene expression endpoint is open, anonymous and works for both v8 and v10, and it produced the normal-tissue numbers in all nine target dossiers this cycle. Two operational facts must be recorded or the pull silently fails: `datasetId` is mandatory, and the `gencodeId` must carry the exact GENCODE version for that release (v8 uses GENCODE v26, e.g. ENSG00000133895.14; v10 uses GENCODE v39, e.g. ENSG00000133895.18). A mismatched version returns `{"data": []}` with HTTP 200 - an empty success, which is the most dangerous kind of failure in an automated pipeline. Individual-level GTEx data is controlled through dbGaP phs000424.
What question it answers, and what it cannot
Answers: which normal adult tissues express the target, and at what median TPM, across 54 tissues. This is what generated, for example, the finding that DOT1L is 16-fold enriched in testis over whole blood, and that CBX8 sits under 1 TPM in blood.
Cannot answer: anything about infants. GTEx is adult post-mortem bulk tissue. It contains no fetal or paediatric samples and no purified haematopoietic progenitor fractions. For a disease of infants whose cell of origin is a fetal-liver-type progenitor, GTEx is a proxy and must be labelled as one every time it is used.
How to reach it
Two steps, both anonymous and key-free 1:
- Resolve the symbol to a versioned gencodeId:
https://gtexportal.org/api/v2/reference/gene?geneId=MEN1returnsENSG00000133895.14,gencodeVersion: v26. - Pull medians:
https://gtexportal.org/api/v2/expression/medianGeneExpression?gencodeId=ENSG00000133895.14&datasetId=gtex_v8&itemsPerPage=100.
Omitting datasetId, or using the v10 gencodeId against gtex_v8, returns an empty array with HTTP 200. A pull script must assert that 54 tissues came back and fail loudly if they did not.
Bulk files are also open: the v10 median-TPM GCT is served anonymously from the adult-gtex Google Cloud Storage bucket 2.
The access barrier
None for summary data. Individual-level genotypes, raw sequence and subject-level phenotypes are controlled access under dbGaP phs000424 and require a Data Use Certification 2. Nothing in this beat's plans needs individual-level GTEx, so no application is proposed.
| resource | GTEx v8 and v10 median gene expression |
|---|---|
| question answered | Which normal adult tissues express the target, and at what level, so a therapeutic-index argument can be made? |
| version trap | v8 uses GENCODE v26 (e.g. ENSG00000133895.14); v10 uses GENCODE v39 (e.g. ENSG00000133895.18). A mismatch returns an empty array with HTTP 200, not an error. Assert 54 tissues returned. |
| access barrier | None for medians. Individual-level data is controlled under dbGaP phs000424 with a Data Use Certification; not required by any plan in this beat. |
| status | run |
| result summary | Normal-tissue medians pulled for all eight candidate genes this cycle and written into the nine target dossiers. Two findings of consequence: DOT1L is 16-fold enriched in testis over whole blood, a gonadal-toxicity flag in a paediatric disease; CBX8 is under 1 TPM in whole blood, the best therapeutic-index profile in the beat attached to the weakest dependency. |
| compute | laptop; no GPU |
access
{
"auth": "none",
"endpoint": "https://gtexportal.org/api/v2/expression/medianGeneExpression",
"required_params": [
"gencodeId (version-exact)",
"datasetId (gtex_v8 or gtex_v10)"
],
"resolver": "https://gtexportal.org/api/v2/reference/gene?geneId=SYMBOL",
"bulk": "https://storage.googleapis.com/adult-gtex/bulk-gex/v10/rna-seq/GTEx_Analysis_v10_RNASeQCv2.4.2_gene_median_tpm.gct.gz"
}values pulled this cycle — the numbers behind the chart
{
"MEN1": {
"whole_blood": 8.197,
"max": "Brain_Cerebellum 45.145"
},
"PSIP1": {
"whole_blood": 6.713,
"min": "Liver 4.527"
},
"DOT1L": {
"whole_blood": 7.009,
"max": "Testis 111.665"
},
"MLLT1": {
"whole_blood": 40.304,
"max": "Brain_Cerebellum 141.675"
},
"KAT7": {
"whole_blood": 6.753,
"max": "Testis 34.134"
},
"CBX8": {
"whole_blood": 0.852,
"min": "Muscle_Skeletal 0.440"
},
"KMT2A": {
"whole_blood": 2.243
},
"AFF1": {
"whole_blood": 8.061,
"max": "Thyroid 96.596"
}
}- Using adult bulk tissue to argue safety in infants is the central weakness of every therapeutic-index claim in this beat, and it applies to all nine dossiers equally.
- An empty-but-successful API response will silently produce a dossier with no normal-tissue section rather than a failed pipeline, and a reviewer may read the absence as an absence of expression.
- What is the paediatric and fetal equivalent of GTEx for these genes, and does any accessible resource cover infant marrow?
- Do any of these targets show a bone-marrow-progenitor-specific expression pattern that bulk whole-blood TPM averages away?
- Should phase-2 dossiers move to GTEx v10 for currency, accepting that every published number in this graph is v8 and would need re-deriving?
- E1strong confidence 4 of 5: Replicated in peer-reviewed work by more than one group.database
The GTEx v2 median gene expression endpoint is open and anonymous and returns per-tissue medians for all 54 tissues, but requires an explicit datasetId and a gencodeId carrying the GENCODE version matching that release; a mismatch returns an empty array with HTTP 200.
GTEx Portal API v2, reference/gene and expression/medianGeneExpression endpoints · GTEx Consortium 2026What this evidence cannot show
Verified this cycle by direct query for eight genes; the silent-empty behaviour was observed directly when datasetId was omitted and when the v8 gencodeId .13 was used instead of .14. TIGHTENED 2026-09-19: verified against the portal API, GTEx v10 has 980 donors with no age bracket below 20-29, and its 54 tissues include whole blood but no bone marrow. GTEx cannot supply a paediatric or infant marrow baseline, which is the comparison a menin-inhibitor toxicity filter needs.
Evidence that argues against this (2)
- GTEx cannot supply the normal tissue this project's toxicity filter needs, on two counts verified against the portal API on 2026-09-19. First, age: the gtex_v10 subject endpoint returns 980 donors distributed across brackets 20-29 (84), 30-39 (78), 40-49 (153), 50-59 (314), 60-69 (318) and 70-79 (33). There is no donor under twenty, so there is no paediatric and no infant expression baseline anywhere in GTEx. GTEx Portal 2026
- Second, tissue: the full tissueSiteDetail list is 54 entries and contains Whole_Blood and no bone marrow. A menin-inhibitor toxicity filter is fundamentally a question about normal haematopoietic progenitors in marrow, and GTEx has never sampled that tissue. Using whole blood as a proxy substitutes terminally differentiated circulating cells for the progenitor compartment at risk. GTEx Portal 2026
- E2strong confidence 4 of 5: Replicated in peer-reviewed work by more than one group.database
GTEx bulk median-TPM files for v10 are served anonymously from the adult-gtex Google Cloud Storage bucket, while individual-level data is controlled under dbGaP accession phs000424 with a Data Use Certification requirement.
dbGaP study phs000424 (Genotype-Tissue Expression Project), Authorized Access requirements · NCBI dbGaP 2026What this evidence cannot show
Bucket paths change between releases; the older gtex_analysis_v8 bucket path no longer resolves.
Evidence that argues against this (1)
- GTEx tissue is post-mortem. Carithers et al. describe the procurement model - rapid autopsy and organ-procurement partnerships - and the resulting expression profiles carry agonal state and ischaemic time as systematic covariates. A median-TPM value from post-mortem adult tissue is a weak basis for predicting on-target toxicity in a living infant. Carithers LJ et al. 2015
Hard limitation verified 2026-09-19: GTEx has 54 tissues, none of them bone marrow, and 980 donors none under age 20 - so it cannot provide the paediatric marrow baseline a toxicity filter needs.
- ← related toDataset: Human Protein Atlas - the protein-level and single-cell check that GTEx cannot give
Both normal-tissue filters fail for the same reason in different layers: HPA's protein calls are antibody-limited and its RNA layer does not predict protein gene-by-gene (PMID 27951527), while GTEx has no marrow and no paediatric donors.
supplied the testis-enrichment tox flag (111.7 vs 7.0 TPM)
- supports →Phase-2 dossier: CBX8 - the candidate this review would kill, and the reasons are all numeric
supplied the sub-1-TPM whole-blood profile
normal-tissue expression is one of the three inputs to every G3 window gate