[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EATQ9B56BY8PKRTAMEWRWB":3,"skill-same:01M6EATQ9B56BY8PKRTAMEWRWB":67},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":6,"ownerHtmlUrl":44,"ownerBlogUrl":6,"ownerDescription":45,"updatedAt":46,"install":47,"resources":60},"01M6EATQ9B56BY8PKRTAMEWRWB","gtex-database",null,"Query GTEx (Genotype-Tissue Expression) portal for tissue-specific gene expression, eQTLs (expression quantitative trait loci), and sQTLs. Essential for linking GWAS variants to gene regulation, understanding tissue-specific expression, and interpreting non-coding variant effects.","luokai0\u002Fai-agent-skills-by-luo-kai","luokai0","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F266954973?v=4","01M6E16VNT42JB8B3X3254QWJ7","luo kai","01M6E16VTFVP6S5XJF1V1MPV90",14,"CC-BY-4.0","https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F18-ai-agents-and-automation (by Luo Kai)\u002F16-other-agents\u002Fgtex-database\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[24,25,26,27,28,29,30],"database","gtex database","coding","query","gene expression","essential","expression","2026-11-10 10:12:30",false,"---\nauthor: luo-kai\nname: gtex-database\ndescription: Query GTEx (Genotype-Tissue Expression) portal for tissue-specific gene expression, eQTLs (expression quantitative trait loci), and sQTLs. Essential for linking GWAS variants to gene regulation, understanding tissue-specific expression, and interpreting non-coding variant effects.\nlicense: CC-BY-4.0\nmetadata:\n    skill-author: Kuan-lin Huang\n---\n\n# GTEx Database\n\n## Overview\n\nThe Genotype-Tissue Expression (GTEx) project provides a comprehensive resource for studying tissue-specific gene expression and genetic regulation across 54 non-diseased human tissues from nearly 1,000 individuals. GTEx v10 (the latest release) enables researchers to understand how genetic variants regulate gene expression (eQTLs) and splicing (sQTLs) in a tissue-specific manner, which is critical for interpreting GWAS loci and identifying regulatory mechanisms.\n\n**Key resources:**\n- GTEx Portal: https:\u002F\u002Fgtexportal.org\u002F\n- GTEx API v2: https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002F\n- Data downloads: https:\u002F\u002Fgtexportal.org\u002Fhome\u002Fdownloads\u002Fadult-gtex\u002F\n- Documentation: https:\u002F\u002Fgtexportal.org\u002Fhome\u002FdocumentationPage\n\n## When to Use This Skill\n\nUse GTEx when:\n\n- **GWAS locus interpretation**: Identifying which gene a non-coding GWAS variant regulates via eQTLs\n- **Tissue-specific expression**: Comparing gene expression levels across 54 human tissues\n- **eQTL colocalization**: Testing if a GWAS signal and an eQTL signal share the same causal variant\n- **Multi-tissue eQTL analysis**: Finding variants that regulate expression in multiple tissues\n- **Splicing QTLs (sQTLs)**: Identifying variants that affect splicing ratios\n- **Tissue specificity analysis**: Determining which tissues express a gene of interest\n- **Gene expression exploration**: Retrieving normalized expression levels (TPM) per tissue\n\n## Core Capabilities\n\n### 1. GTEx REST API v2\n\nBase URL: `https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002F`\n\nThe API returns JSON and does not require authentication. All endpoints support pagination.\n\n```python\nimport requests\n\nBASE_URL = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\"\n\ndef gtex_get(endpoint, params=None):\n    \"\"\"Make a GET request to the GTEx API.\"\"\"\n    url = f\"{BASE_URL}\u002F{endpoint}\"\n    response = requests.get(url, params=params, headers={\"Accept\": \"application\u002Fjson\"})\n    response.raise_for_status()\n    return response.json()\n```\n\n### 2. Gene Expression by Tissue\n\n```python\nimport requests\nimport pandas as pd\n\ndef get_gene_expression_by_tissue(gene_id_or_symbol, dataset_id=\"gtex_v10\"):\n    \"\"\"Get median gene expression across all tissues.\"\"\"\n    url = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002Fexpression\u002FmedianGeneExpression\"\n    params = {\n        \"gencodeId\": gene_id_or_symbol,\n        \"datasetId\": dataset_id,\n        \"itemsPerPage\": 100\n    }\n    response = requests.get(url, params=params)\n    data = response.json()\n\n    records = data.get(\"data\", [])\n    df = pd.DataFrame(records)\n    if not df.empty:\n        df = df[[\"tissueSiteDetailId\", \"tissueSiteDetail\", \"median\", \"unit\"]].sort_values(\n            \"median\", ascending=False\n        )\n    return df\n\n# Example: get expression of APOE across tissues\ndf = get_gene_expression_by_tissue(\"ENSG00000130203.10\")  # APOE GENCODE ID\n# Or use gene symbol (some endpoints accept both)\nprint(df.head(10))\n# Output: tissue name, median TPM, sorted by highest expression\n```\n\n### 3. eQTL Lookup\n\n```python\nimport requests\nimport pandas as pd\n\ndef query_eqtl(gene_id, tissue_id=None, dataset_id=\"gtex_v10\"):\n    \"\"\"Query significant eQTLs for a gene, optionally filtered by tissue.\"\"\"\n    url = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002Fassociation\u002FsingleTissueEqtl\"\n    params = {\n        \"gencodeId\": gene_id,\n        \"datasetId\": dataset_id,\n        \"itemsPerPage\": 250\n    }\n    if tissue_id:\n        params[\"tissueSiteDetailId\"] = tissue_id\n\n    all_results = []\n    page = 0\n    while True:\n        params[\"page\"] = page\n        response = requests.get(url, params=params)\n        data = response.json()\n        results = data.get(\"data\", [])\n        if not results:\n            break\n        all_results.extend(results)\n        if len(results) \u003C params[\"itemsPerPage\"]:\n            break\n        page += 1\n\n    df = pd.DataFrame(all_results)\n    if not df.empty:\n        df = df.sort_values(\"pval\", ascending=True)\n    return df\n\n# Example: Find eQTLs for PCSK9\ndf = query_eqtl(\"ENSG00000169174.14\")\nprint(df[[\"snpId\", \"tissueSiteDetailId\", \"slope\", \"pval\", \"gencodeId\"]].head(20))\n```\n\n### 4. Single-Tissue eQTL by Variant\n\n```python\nimport requests\n\ndef query_variant_eqtl(variant_id, tissue_id=None, dataset_id=\"gtex_v10\"):\n    \"\"\"Get all eQTL associations for a specific variant.\"\"\"\n    url = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002Fassociation\u002FsingleTissueEqtl\"\n    params = {\n        \"variantId\": variant_id,  # e.g., \"chr1_55516888_G_GA_b38\"\n        \"datasetId\": dataset_id,\n        \"itemsPerPage\": 250\n    }\n    if tissue_id:\n        params[\"tissueSiteDetailId\"] = tissue_id\n\n    response = requests.get(url, params=params)\n    return response.json()\n\n# GTEx variant ID format: chr{chrom}_{pos}_{ref}_{alt}_b38\n# Example: \"chr17_43094692_G_A_b38\"\n```\n\n### 5. Multi-Tissue eQTL (eGenes)\n\n```python\nimport requests\n\ndef get_egenes(tissue_id, dataset_id=\"gtex_v10\"):\n    \"\"\"Get all eGenes (genes with at least one significant eQTL) in a tissue.\"\"\"\n    url = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002Fassociation\u002Fegene\"\n    params = {\n        \"tissueSiteDetailId\": tissue_id,\n        \"datasetId\": dataset_id,\n        \"itemsPerPage\": 500\n    }\n\n    all_egenes = []\n    page = 0\n    while True:\n        params[\"page\"] = page\n        response = requests.get(url, params=params)\n        data = response.json()\n        batch = data.get(\"data\", [])\n        if not batch:\n            break\n        all_egenes.extend(batch)\n        if len(batch) \u003C params[\"itemsPerPage\"]:\n            break\n        page += 1\n    return all_egenes\n\n# Example: all eGenes in whole blood\negenes = get_egenes(\"Whole_Blood\")\nprint(f\"Found {len(egenes)} eGenes in Whole Blood\")\n```\n\n### 6. Tissue List\n\n```python\nimport requests\n\ndef get_tissues(dataset_id=\"gtex_v10\"):\n    \"\"\"Get all available tissues with metadata.\"\"\"\n    url = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002Fdataset\u002FtissueSiteDetail\"\n    params = {\"datasetId\": dataset_id, \"itemsPerPage\": 100}\n    response = requests.get(url, params=params)\n    return response.json()[\"data\"]\n\ntissues = get_tissues()\n# Key fields: tissueSiteDetailId, tissueSiteDetail, colorHex, samplingSite\n# Common tissue IDs:\n# Whole_Blood, Brain_Cortex, Liver, Kidney_Cortex, Heart_Left_Ventricle,\n# Lung, Muscle_Skeletal, Adipose_Subcutaneous, Colon_Transverse, ...\n```\n\n### 7. sQTL (Splicing QTLs)\n\n```python\nimport requests\n\ndef query_sqtl(gene_id, tissue_id=None, dataset_id=\"gtex_v10\"):\n    \"\"\"Query significant sQTLs for a gene.\"\"\"\n    url = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002Fassociation\u002FsingleTissueSqtl\"\n    params = {\n        \"gencodeId\": gene_id,\n        \"datasetId\": dataset_id,\n        \"itemsPerPage\": 250\n    }\n    if tissue_id:\n        params[\"tissueSiteDetailId\"] = tissue_id\n\n    response = requests.get(url, params=params)\n    return response.json()\n```\n\n## Query Workflows\n\n### Workflow 1: Interpreting a GWAS Variant via eQTLs\n\n1. **Identify the GWAS variant** (rs ID or chromosome position)\n2. **Convert to GTEx variant ID format** (`chr{chrom}_{pos}_{ref}_{alt}_b38`)\n3. **Query all eQTL associations** for that variant across tissues\n4. **Check effect direction**: is the GWAS risk allele the same as the eQTL effect allele?\n5. **Prioritize tissues**: select tissues biologically relevant to the disease\n6. **Consider colocalization** using `coloc` (R package) with full summary statistics\n\n```python\nimport requests, pandas as pd\n\ndef interpret_gwas_variant(variant_id, dataset_id=\"gtex_v10\"):\n    \"\"\"Find all genes regulated by a GWAS variant.\"\"\"\n    url = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002Fassociation\u002FsingleTissueEqtl\"\n    params = {\"variantId\": variant_id, \"datasetId\": dataset_id, \"itemsPerPage\": 500}\n    response = requests.get(url, params=params)\n    data = response.json()\n\n    df = pd.DataFrame(data.get(\"data\", []))\n    if df.empty:\n        return df\n    return df[[\"geneSymbol\", \"tissueSiteDetailId\", \"slope\", \"pval\", \"maf\"]].sort_values(\"pval\")\n\n# Example\nresults = interpret_gwas_variant(\"chr1_154453788_A_T_b38\")\nprint(results.groupby(\"geneSymbol\")[\"tissueSiteDetailId\"].count().sort_values(ascending=False))\n```\n\n### Workflow 2: Gene Expression Atlas\n\n1. Get median expression for a gene across all tissues\n2. Identify the primary expression site(s)\n3. Compare with disease-relevant tissues\n4. Download raw data for statistical comparisons\n\n### Workflow 3: Tissue-Specific eQTL Analysis\n\n1. Select tissues relevant to your disease\n2. Query all eGenes in that tissue\n3. Cross-reference with GWAS-significant loci\n4. Identify co-localized signals\n\n## Key API Endpoints\n\n| Endpoint | Description |\n|----------|-------------|\n| `\u002Fexpression\u002FmedianGeneExpression` | Median TPM by tissue for a gene |\n| `\u002Fexpression\u002FgeneExpression` | Full distribution of expression per tissue |\n| `\u002Fassociation\u002FsingleTissueEqtl` | Significant eQTL associations |\n| `\u002Fassociation\u002FsingleTissueSqtl` | Significant sQTL associations |\n| `\u002Fassociation\u002Fegene` | eGenes in a tissue |\n| `\u002Fdataset\u002FtissueSiteDetail` | Available tissues with metadata |\n| `\u002Freference\u002Fgene` | Gene metadata (GENCODE IDs, coordinates) |\n| `\u002Fvariant\u002FvariantPage` | Variant lookup by rsID or position |\n\n## Datasets Available\n\n| ID | Description |\n|----|-------------|\n| `gtex_v10` | GTEx v10 (current; ~960 donors, 54 tissues) |\n| `gtex_v8` | GTEx v8 (838 donors, 49 tissues) — older but widely cited |\n\n## Best Practices\n\n- **Use GENCODE IDs** (e.g., `ENSG00000130203.10`) for gene queries; the `.version` suffix matters for some endpoints\n- **GTEx variant IDs** use the format `chr{chrom}_{pos}_{ref}_{alt}_b38` (GRCh38) — different from rs IDs\n- **Handle pagination**: Large queries (e.g., all eGenes) require iterating through pages\n- **Tissue nomenclature**: Use `tissueSiteDetailId` (e.g., `Whole_Blood`) not display names for API calls\n- **FDR correction**: GTEx uses FDR \u003C 0.05 (q-value) as the significance threshold for eQTLs\n- **Effect alleles**: The `slope` field is the effect of the alternative allele; positive = higher expression with alt allele\n\n## Data Downloads (for large-scale analysis)\n\nFor genome-wide analyses, download full summary statistics rather than using the API:\n\n```bash\n# All significant eQTLs (v10)\nwget https:\u002F\u002Fstorage.googleapis.com\u002Fadult-gtex\u002Fbulk-qtl\u002Fv10\u002Fsingle-tissue-cis-qtl\u002FGTEx_Analysis_v10_eQTL.tar\n\n# Normalized expression matrices\nwget https:\u002F\u002Fstorage.googleapis.com\u002Fadult-gtex\u002Fbulk-gex\u002Fv10\u002Frna-seq\u002FGTEx_Analysis_v10_RNASeQCv2.4.2_gene_reads.gct.gz\n```\n\n## Additional Resources\n\n- **GTEx Portal**: https:\u002F\u002Fgtexportal.org\u002F\n- **API documentation**: https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002F\n- **Data downloads**: https:\u002F\u002Fgtexportal.org\u002Fhome\u002Fdownloads\u002Fadult-gtex\u002F\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Fbroadinstitute\u002Fgtex-pipeline\n- **Citation**: GTEx Consortium (2020) Science. PMID: 32913098\n","# GTEx Database\n\n## Overview\n\nThe Genotype-Tissue Expression (GTEx) project provides a comprehensive resource for studying tissue-specific gene expression and genetic regulation across 54 non-diseased human tissues from nearly 1,000 individuals. GTEx v10 (the latest release) enables researchers to understand how genetic variants regulate gene expression (eQTLs) and splicing (sQTLs) in a tissue-specific manner, which is critical for interpreting GWAS loci and identifying regulatory mechanisms.\n\n**Key resources:**\n- GTEx Portal: https:\u002F\u002Fgtexportal.org\u002F\n- GTEx API v2: https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002F\n- Data downloads: https:\u002F\u002Fgtexportal.org\u002Fhome\u002Fdownloads\u002Fadult-gtex\u002F\n- Documentation: https:\u002F\u002Fgtexportal.org\u002Fhome\u002FdocumentationPage\n\n## When to Use This Skill\n\nUse GTEx when:\n\n- **GWAS locus interpretation**: Identifying which gene a non-coding GWAS variant regulates via eQTLs\n- **Tissue-specific expression**: Comparing gene expression levels across 54 human tissues\n- **eQTL colocalization**: Testing if a GWAS signal and an eQTL signal share the same causal variant\n- **Multi-tissue eQTL analysis**: Finding variants that regulate expression in multiple tissues\n- **Splicing QTLs (sQTLs)**: Identifying variants that affect splicing ratios\n- **Tissue specificity analysis**: Determining which tissues express a gene of interest\n- **Gene expression exploration**: Retrieving normalized expression levels (TPM) per tissue\n\n## Core Capabilities\n\n### 1. GTEx REST API v2\n\nBase URL: `https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002F`\n\nThe API returns JSON and does not require authentication. All endpoints support pagination.\n\n```python\nimport requests\n\nBASE_URL = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\"\n\ndef gtex_get(endpoint, params=None):\n    \"\"\"Make a GET request to the GTEx API.\"\"\"\n    url = f\"{BASE_URL}\u002F{endpoint}\"\n    response = requests.get(url, params=params, headers={\"Accept\": \"application\u002Fjson\"})\n    response.raise_for_status()\n    return response.json()\n```\n\n### 2. Gene Expression by Tissue\n\n```python\nimport requests\nimport pandas as pd\n\ndef get_gene_expression_by_tissue(gene_id_or_symbol, dataset_id=\"gtex_v10\"):\n    \"\"\"Get median gene expression across all tissues.\"\"\"\n    url = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002Fexpression\u002FmedianGeneExpression\"\n    params = {\n        \"gencodeId\": gene_id_or_symbol,\n        \"datasetId\": dataset_id,\n        \"itemsPerPage\": 100\n    }\n    response = requests.get(url, params=params)\n    data = response.json()\n\n    records = data.get(\"data\", [])\n    df = pd.DataFrame(records)\n    if not df.empty:\n        df = df[[\"tissueSiteDetailId\", \"tissueSiteDetail\", \"median\", \"unit\"]].sort_values(\n            \"median\", ascending=False\n        )\n    return df\n\n# Example: get expression of APOE across tissues\ndf = get_gene_expression_by_tissue(\"ENSG00000130203.10\")  # APOE GENCODE ID\n# Or use gene symbol (some endpoints accept both)\nprint(df.head(10))\n# Output: tissue name, median TPM, sorted by highest expression\n```\n\n### 3. eQTL Lookup\n\n```python\nimport requests\nimport pandas as pd\n\ndef query_eqtl(gene_id, tissue_id=None, dataset_id=\"gtex_v10\"):\n    \"\"\"Query significant eQTLs for a gene, optionally filtered by tissue.\"\"\"\n    url = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002Fassociation\u002FsingleTissueEqtl\"\n    params = {\n        \"gencodeId\": gene_id,\n        \"datasetId\": dataset_id,\n        \"itemsPerPage\": 250\n    }\n    if tissue_id:\n        params[\"tissueSiteDetailId\"] = tissue_id\n\n    all_results = []\n    page = 0\n    while True:\n        params[\"page\"] = page\n        response = requests.get(url, params=params)\n        data = response.json()\n        results = data.get(\"data\", [])\n        if not results:\n            break\n        all_results.extend(results)\n        if len(results) \u003C params[\"itemsPerPage\"]:\n            break\n        page += 1\n\n    df = pd.DataFrame(all_results)\n    if not df.empty:\n        df = df.sort_values(\"pval\", ascending=True)\n    return df\n\n# Example: Find eQTLs for PCSK9\ndf = query_eqtl(\"ENSG00000169174.14\")\nprint(df[[\"snpId\", \"tissueSiteDetailId\", \"slope\", \"pval\", \"gencodeId\"]].head(20))\n```\n\n### 4. Single-Tissue eQTL by Variant\n\n```python\nimport requests\n\ndef query_variant_eqtl(variant_id, tissue_id=None, dataset_id=\"gtex_v10\"):\n    \"\"\"Get all eQTL associations for a specific variant.\"\"\"\n    url = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002Fassociation\u002FsingleTissueEqtl\"\n    params = {\n        \"variantId\": variant_id,  # e.g., \"chr1_55516888_G_GA_b38\"\n        \"datasetId\": dataset_id,\n        \"itemsPerPage\": 250\n    }\n    if tissue_id:\n        params[\"tissueSiteDetailId\"] = tissue_id\n\n    response = requests.get(url, params=params)\n    return response.json()\n\n# GTEx variant ID format: chr{chrom}_{pos}_{ref}_{alt}_b38\n# Example: \"chr17_43094692_G_A_b38\"\n```\n\n### 5. Multi-Tissue eQTL (eGenes)\n\n```python\nimport requests\n\ndef get_egenes(tissue_id, dataset_id=\"gtex_v10\"):\n    \"\"\"Get all eGenes (genes with at least one significant eQTL) in a tissue.\"\"\"\n    url = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002Fassociation\u002Fegene\"\n    params = {\n        \"tissueSiteDetailId\": tissue_id,\n        \"datasetId\": dataset_id,\n        \"itemsPerPage\": 500\n    }\n\n    all_egenes = []\n    page = 0\n    while True:\n        params[\"page\"] = page\n        response = requests.get(url, params=params)\n        data = response.json()\n        batch = data.get(\"data\", [])\n        if not batch:\n            break\n        all_egenes.extend(batch)\n        if len(batch) \u003C params[\"itemsPerPage\"]:\n            break\n        page += 1\n    return all_egenes\n\n# Example: all eGenes in whole blood\negenes = get_egenes(\"Whole_Blood\")\nprint(f\"Found {len(egenes)} eGenes in Whole Blood\")\n```\n\n### 6. Tissue List\n\n```python\nimport requests\n\ndef get_tissues(dataset_id=\"gtex_v10\"):\n    \"\"\"Get all available tissues with metadata.\"\"\"\n    url = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002Fdataset\u002FtissueSiteDetail\"\n    params = {\"datasetId\": dataset_id, \"itemsPerPage\": 100}\n    response = requests.get(url, params=params)\n    return response.json()[\"data\"]\n\ntissues = get_tissues()\n# Key fields: tissueSiteDetailId, tissueSiteDetail, colorHex, samplingSite\n# Common tissue IDs:\n# Whole_Blood, Brain_Cortex, Liver, Kidney_Cortex, Heart_Left_Ventricle,\n# Lung, Muscle_Skeletal, Adipose_Subcutaneous, Colon_Transverse, ...\n```\n\n### 7. sQTL (Splicing QTLs)\n\n```python\nimport requests\n\ndef query_sqtl(gene_id, tissue_id=None, dataset_id=\"gtex_v10\"):\n    \"\"\"Query significant sQTLs for a gene.\"\"\"\n    url = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002Fassociation\u002FsingleTissueSqtl\"\n    params = {\n        \"gencodeId\": gene_id,\n        \"datasetId\": dataset_id,\n        \"itemsPerPage\": 250\n    }\n    if tissue_id:\n        params[\"tissueSiteDetailId\"] = tissue_id\n\n    response = requests.get(url, params=params)\n    return response.json()\n```\n\n## Query Workflows\n\n### Workflow 1: Interpreting a GWAS Variant via eQTLs\n\n1. **Identify the GWAS variant** (rs ID or chromosome position)\n2. **Convert to GTEx variant ID format** (`chr{chrom}_{pos}_{ref}_{alt}_b38`)\n3. **Query all eQTL associations** for that variant across tissues\n4. **Check effect direction**: is the GWAS risk allele the same as the eQTL effect allele?\n5. **Prioritize tissues**: select tissues biologically relevant to the disease\n6. **Consider colocalization** using `coloc` (R package) with full summary statistics\n\n```python\nimport requests, pandas as pd\n\ndef interpret_gwas_variant(variant_id, dataset_id=\"gtex_v10\"):\n    \"\"\"Find all genes regulated by a GWAS variant.\"\"\"\n    url = \"https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002Fassociation\u002FsingleTissueEqtl\"\n    params = {\"variantId\": variant_id, \"datasetId\": dataset_id, \"itemsPerPage\": 500}\n    response = requests.get(url, params=params)\n    data = response.json()\n\n    df = pd.DataFrame(data.get(\"data\", []))\n    if df.empty:\n        return df\n    return df[[\"geneSymbol\", \"tissueSiteDetailId\", \"slope\", \"pval\", \"maf\"]].sort_values(\"pval\")\n\n# Example\nresults = interpret_gwas_variant(\"chr1_154453788_A_T_b38\")\nprint(results.groupby(\"geneSymbol\")[\"tissueSiteDetailId\"].count().sort_values(ascending=False))\n```\n\n### Workflow 2: Gene Expression Atlas\n\n1. Get median expression for a gene across all tissues\n2. Identify the primary expression site(s)\n3. Compare with disease-relevant tissues\n4. Download raw data for statistical comparisons\n\n### Workflow 3: Tissue-Specific eQTL Analysis\n\n1. Select tissues relevant to your disease\n2. Query all eGenes in that tissue\n3. Cross-reference with GWAS-significant loci\n4. Identify co-localized signals\n\n## Key API Endpoints\n\n| Endpoint | Description |\n|----------|-------------|\n| `\u002Fexpression\u002FmedianGeneExpression` | Median TPM by tissue for a gene |\n| `\u002Fexpression\u002FgeneExpression` | Full distribution of expression per tissue |\n| `\u002Fassociation\u002FsingleTissueEqtl` | Significant eQTL associations |\n| `\u002Fassociation\u002FsingleTissueSqtl` | Significant sQTL associations |\n| `\u002Fassociation\u002Fegene` | eGenes in a tissue |\n| `\u002Fdataset\u002FtissueSiteDetail` | Available tissues with metadata |\n| `\u002Freference\u002Fgene` | Gene metadata (GENCODE IDs, coordinates) |\n| `\u002Fvariant\u002FvariantPage` | Variant lookup by rsID or position |\n\n## Datasets Available\n\n| ID | Description |\n|----|-------------|\n| `gtex_v10` | GTEx v10 (current; ~960 donors, 54 tissues) |\n| `gtex_v8` | GTEx v8 (838 donors, 49 tissues) — older but widely cited |\n\n## Best Practices\n\n- **Use GENCODE IDs** (e.g., `ENSG00000130203.10`) for gene queries; the `.version` suffix matters for some endpoints\n- **GTEx variant IDs** use the format `chr{chrom}_{pos}_{ref}_{alt}_b38` (GRCh38) — different from rs IDs\n- **Handle pagination**: Large queries (e.g., all eGenes) require iterating through pages\n- **Tissue nomenclature**: Use `tissueSiteDetailId` (e.g., `Whole_Blood`) not display names for API calls\n- **FDR correction**: GTEx uses FDR \u003C 0.05 (q-value) as the significance threshold for eQTLs\n- **Effect alleles**: The `slope` field is the effect of the alternative allele; positive = higher expression with alt allele\n\n## Data Downloads (for large-scale analysis)\n\nFor genome-wide analyses, download full summary statistics rather than using the API:\n\n```bash\n# All significant eQTLs (v10)\nwget https:\u002F\u002Fstorage.googleapis.com\u002Fadult-gtex\u002Fbulk-qtl\u002Fv10\u002Fsingle-tissue-cis-qtl\u002FGTEx_Analysis_v10_eQTL.tar\n\n# Normalized expression matrices\nwget https:\u002F\u002Fstorage.googleapis.com\u002Fadult-gtex\u002Fbulk-gex\u002Fv10\u002Frna-seq\u002FGTEx_Analysis_v10_RNASeQCv2.4.2_gene_reads.gct.gz\n```\n\n## Additional Resources\n\n- **GTEx Portal**: https:\u002F\u002Fgtexportal.org\u002F\n- **API documentation**: https:\u002F\u002Fgtexportal.org\u002Fapi\u002Fv2\u002F\n- **Data downloads**: https:\u002F\u002Fgtexportal.org\u002Fhome\u002Fdownloads\u002Fadult-gtex\u002F\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Fbroadinstitute\u002Fgtex-pipeline\n- **Citation**: GTEx Consortium (2020) Science. PMID: 32913098\n",{"name":5,"author":36,"license":15,"metadata":37,"description":7},"luo-kai",{"skill-author":38},"Kuan-lin Huang","main","4d2fb89cdfb75f3f6fd3c6c5ec9ad90ea129eb3c","ai-agent-skills\u002F18-ai-agents-and-automation (by Luo Kai)\u002F16-other-agents\u002Fgtex-database",2,"https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai","https:\u002F\u002Fgithub.com\u002Fluokai0","a solo builder.","2026-05-06 04:29:04",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add luokai0\u002Fai-agent-skills-by-luo-kai --skill gtex-database",{"tool":53,"command":54},"bunx","bunx skills add luokai0\u002Fai-agent-skills-by-luo-kai --skill gtex-database",{"tool":56,"command":57},"pnpm","pnpm dlx skills add luokai0\u002Fai-agent-skills-by-luo-kai --skill gtex-database","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F18-ai-agents-and-automation (by Luo Kai)\u002F16-other-agents\u002Fgtex-database\u002FSKILL.md",true,[61],{"path":62,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":65,"sourceHtmlUrl":66},"references\u002Fapi_reference.md","REFERENCE","参考文档",4888,"https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F18-ai-agents-and-automation (by Luo Kai)\u002F16-other-agents\u002Fgtex-database\u002Freferences\u002Fapi_reference.md",[68,96,113,140,173,208],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":72,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":31},"01M6F2SKTE208174C7S7JJCZC7","write-contracts","Generates secure Aptos Move V2 smart contracts with Object model, Digital Asset integration, security patterns, and storage type guidance. Includes comprehensive storage decision framework for optimal data structure selection. Triggers on: 'write contract', 'create NFT collection', 'build marketplace', 'implement minting', 'generate Move module', 'create token contract', 'build DAO', 'implement staking'. Ask storage questions when: 'store', 'track', 'registry', 'mapping', 'list', 'collection'.","MIT","https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F22-clawhub-skills\u002Fwrite-contracts\u002FSKILL.md",[],[76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],"write","contracts","write contracts","storage","secure","create","generate","collection","model","decision","ask","smart-contracts","selection","objects","structure","nft","token","aptos","critical","move",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":72,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":31},"01M6F2RFXJ6T9MKW0A7N7GM45B","web-search","通用网络搜索技能，支持多引擎搜索（百度、必应、DuckDuckGo），无需API密钥即可获取实时信息","https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F22-clawhub-skills\u002Fweb-search-ex-skill\u002FSKILL.md",[],[103,104,105,106,107,108,109,110,111,112],"web","search","web search","搜索","baidu","bing","duckduckgo","百度","多引擎","internet",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":72,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":122,"publishedAt":31},"01M6F2K968G1FZEZFPW2E6B222","solo-build","Execute implementation plan tasks with TDD workflow, auto-commit, and phase gates. Use when user says \"build it\", \"start building\", \"execute plan\", \"implement tasks\", \"ship it\", or references a track ID. Do NOT use for planning (use \u002Fplan) or scaffolding (use \u002Fscaffold).","https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F22-clawhub-skills\u002Fsolo-build\u002FSKILL.md",[119],{"categoryNo":120,"categoryName":121,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[123,124,125,126,127,128,129,130,104,131,132,133,76,134,135,136,27,137,138,139],"build","solo","solo build","MCP","workflow","commit","tasks","code","Bash","plan","read","auto","references","context7","scaffolding","ship it","project",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":72,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":152,"publishedAt":31},"01M6F2GKN39SGHSPWYB3662YC8","react-email","Use when building HTML email templates with React components, adding a visual email editor to an application using the React Email visual editor, rendering emails to HTML, or sending emails with Resend. Covers welcome emails, password resets, notifications, order confirmations, newsletters, transactional emails, and the embeddable email editor component.","https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F22-clawhub-skills\u002Freact-email-skills\u002FSKILL.md",[146,149],{"categoryNo":147,"categoryName":148,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":150,"categoryName":151,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172],"react","email","react email","github","editor","components","react components","component","welcome","https","notifications","password","node","use","html","resend","visual","emails","rendering","with",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":72,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":189,"publishedAt":31},"01M6F2FBVGVDFSG8SSFJGXA40C","APITester Agent-Driven API Testing","Test API endpoints and document responses. Define tests in plain English, run them, get formatted results. Agent-driven Postman alternative.","https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F22-clawhub-skills\u002Fopenclaw-api-tester\u002FSKILL.md",[179,182,183,184],{"categoryNo":180,"categoryName":181,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":120,"categoryName":121,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":185,"categoryName":186,"taxonomyType":187,"taxonomyTypeDesc":188},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207],"testing","api","api testing","driven","APITester Agent Driven API Testing","test","run","postman","results","plain english","tester","endpoints","document","get","define","tests","english","api-tester",{"skillNo":209,"name":210,"nameZh":6,"description":211,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":72,"licenseFileUrl":6,"sourceHtmlUrl":212,"categories":213,"keywords":214,"publishedAt":31},"01M6F273Y3NGAPVJZ608BC0G9G","hubspot-implementation-plan","Generate a phased implementation plan from a HubSpot audit report. Creates prioritized, sequenced cleanup processes with effort estimates, dependencies, and automation feasibility. Use after running \u002Fhubspot-audit.","https:\u002F\u002Fgithub.com\u002Fluokai0\u002Fai-agent-skills-by-luo-kai\u002Fblob\u002Fmain\u002Fai-agent-skills\u002F22-clawhub-skills\u002Fhubspot-implementation-plan\u002FSKILL.md",[],[132,215,216,217,218,219,220,82,221,222,223,224,225,166,226,227,172,228],"implementation","hubspot","hubspot implementation plan","automation","feasibility","cleanup","planning","report","audit","audit report","phased implementation","dependencies","processes","hubspot audit"]