--- name: clinpgx-database description: "Access ClinPGx pharmacogenomics data (successor to PharmGKB). Query gene-drug interactions, CPIC guidelines, allele functions, for precision medicine and genotype-guided dosing decisions." --- # ClinPGx Database ## Overview ClinPGx (Clinical Pharmacogenomics Database) is a comprehensive resource for clinical pharmacogenomics information, successor to PharmGKB. It consolidates data from PharmGKB, CPIC, and PharmCAT, providing curated information on how genetic variation affects medication response. Access gene-drug pairs, clinical guidelines, allele functions, and drug labels for precision medicine applications. ## When to Use This Skill This skill should be used when: - **Gene-drug interactions**: Querying how genetic variants affect drug metabolism, efficacy, or toxicity - **CPIC guidelines**: Accessing evidence-based clinical practice guidelines for pharmacogenetics - **Allele information**: Retrieving allele function, frequency, and phenotype data - **Drug labels**: Exploring FDA and other regulatory pharmacogenomic drug labeling - **Pharmacogenomic annotations**: Accessing curated literature on gene-drug-disease relationships - **Clinical decision support**: Using PharmDOG tool for phenoconversion and custom genotype interpretation - **Precision medicine**: Implementing pharmacogenomic testing in clinical practice - **Drug metabolism**: Understanding CYP450 and other pharmacogene functions - **Personalized dosing**: Finding genotype-guided dosing recommendations - **Adverse drug reactions**: Identifying genetic risk factors for drug toxicity ## Installation and Setup ### Python API Access The ClinPGx REST API provides programmatic access to all database resources. Basic setup: ```bash pip install requests ``` ### API Endpoint ```python BASE_URL = "https://api.clinpgx.org/v1/" ``` **Rate Limits**: - 2 requests per second maximum - Excessive requests will result in HTTP 429 (Too Many Requests) response **Authentication**: Not required for basic access **Data License**: Creative Commons Attribution-ShareAlike 4.0 International License For substantial API use, notify the ClinPGx team at api@clinpgx.org ## Core Capabilities ### 1. Gene Queries **Retrieve gene information** including function, clinical annotations, and pharmacogenomic significance: ```python import requests # Get gene details response = requests.get("https://api.clinpgx.org/v1/gene/CYP2D6") gene_data = response.json() # Search for genes by name response = requests.get("https://api.clinpgx.org/v1/gene", params={"q": "CYP"}) genes = response.json() ``` **Key pharmacogenes**: - **CYP450 enzymes**: CYP2D6, CYP2C19, CYP2C9, CYP3A4, CYP3A5 - **Transporters**: SLCO1B1, ABCB1, ABCG2 - **Other metabolizers**: TPMT, DPYD, NUDT15, UGT1A1 - **Receptors**: OPRM1, HTR2A, ADRB1 - **HLA genes**: HLA-B, HLA-A ### 2. Drug and Chemical Queries **Retrieve drug information** including pharmacogenomic annotations and mechanisms: ```python # Get drug details response = requests.get("https://api.clinpgx.org/v1/chemical/PA448515") # Warfarin drug_data = response.json() # Search drugs by name response = requests.get("https://api.clinpgx.org/v1/chemical", params={"name": "warfarin"}) drugs = response.json() ``` **Drug categories with pharmacogenomic significance**: - Anticoagulants (warfarin, clopidogrel) - Antidepressants (SSRIs, TCAs) - Immunosuppressants (tacrolimus, azathioprine) - Oncology drugs (5-fluorouracil, irinotecan, tamoxifen) - Cardiovascular drugs (statins, beta-blockers) - Pain medications (codeine, tramadol) - Antivirals (abacavir) ### 3. Gene-Drug Pair Queries **Access curated gene-drug relationships** with clinical annotations: ```python # Get gene-drug pair information response = requests.get("https://api.clinpgx.org/v1/geneDrugPair", params={"gene": "CYP2D6", "drug": "codeine"}) pair_data = response.json() # Get all pairs for a gene response = requests.get("https://api.clinpgx.org/v1/geneDrugPair", params={"gene": "CYP2C19"}) all_pairs = response.json() ``` **Clinical annotation sources**: - CPIC (Clinical Pharmacogenetics Implementation Consortium) - DPWG (Dutch Pharmacogenetics Working Group) - FDA (Food and Drug Administration) labels - Peer-reviewed literature summary annotations ### 4. CPIC Guidelines **Access evidence-based clinical practice guidelines**: ```python # Get CPIC guideline response = requests.get("https://api.clinpgx.org/v1/guideline/PA166104939") guideline = response.json() # List all CPIC guidelines response = requests.get("https://api.clinpgx.org/v1/guideline", params={"source": "CPIC"}) guidelines = response.json() ``` **CPIC guideline components**: - Gene-drug pairs covered - Clinical recommendations by phenotype - Evidence levels and strength ratings - Supporting literature - Downloadable PDFs and supplementary materials - Implementation considerations **Example guidelines**: - CYP2D6-codeine (avoid in ultra-rapid metabolizers) - CYP2C19-clopidogrel (alternative therapy for poor metabolizers) - TPMT-azathioprine (dose reduction for intermediate/poor metabolizers) - DPYD-fluoropyrimidines (dose adjustment based on activity) - HLA-B*57:01-abacavir (avoid if positive) ### 5. Allele and Variant Information **Query allele function and frequency data**: ```python # Get allele information response = requests.get("https://api.clinpgx.org/v1/allele/CYP2D6*4") allele_data = response.json() # Get all alleles for a gene response = requests.get("https://api.clinpgx.org/v1/allele", params={"gene": "CYP2D6"}) alleles = response.json() ``` **Allele information includes**: - Functional status (normal, decreased, no function, increased, uncertain) - Population frequencies across ethnic groups - Defining variants (SNPs, indels, CNVs) - Phenotype assignment - References to PharmVar and other nomenclature systems **Phenotype categories**: - **Ultra-rapid metabolizer** (UM): Increased enzyme activity - **Normal metabolizer** (NM): Normal enzyme activity - **Intermediate metabolizer** (IM): Reduced enzyme activity - **Poor metabolizer** (PM): Little to no enzyme activity ### 6. Variant Annotations **Access clinical annotations for specific genetic variants**: ```python # Get variant information response = requests.get("https://api.clinpgx.org/v1/variant/rs4244285") variant_data = response.json() # Search variants by position (if supported) response = requests.get("https://api.clinpgx.org/v1/variant", params={"chromosome": "10", "position": "94781859"}) variants = response.json() ``` **Variant data includes**: - rsID and genomic coordinates - Gene and functional consequence - Allele associations - Clinical significance - Population frequencies - Literature references ### 7. Clinical Annotations **Retrieve curated literature annotations** (formerly PharmGKB clinical annotations): ```python # Get clinical annotations response = requests.get("https://api.clinpgx.org/v1/clinicalAnnotation", params={"gene": "CYP2D6"}) annotations = response.json() # Filter by evidence level response = requests.get("https://api.clinpgx.org/v1/clinicalAnnotation", params={"evidenceLevel": "1A"}) high_evidence = response.json() ``` **Evidence levels** (from highest to lowest): - **Level 1A**: High-quality evidence, CPIC/FDA/DPWG guidelines - **Level 1B**: High-quality evidence, not yet guideline - **Level 2A**: Moderate evidence from well-designed studies - **Level 2B**: Moderate evidence with some limitations - **Level 3**: Limited or conflicting evidence - **Level 4**: Case reports or weak evidence ### 8. Drug Labels **Access pharmacogenomic information from drug labels**: ```python # Get drug labels with PGx information response = requests.get("https://api.clinpgx.org/v1/drugLabel", params={"drug": "warfarin"}) labels = response.json() # Filter by regulatory source response = requests.get("https://api.clinpgx.org/v1/drugLabel", params={"source": "FDA"}) fda_labels = response.json() ``` **Label information includes**: - Testing recommendations - Dosing guidance by genotype - Warnings and precautions - Biomarker information - Regulatory source (FDA, EMA, PMDA, etc.) ### 9. Pathways **Explore pharmacokinetic and pharmacodynamic pathways**: ```python # Get pathway information response = requests.get("https://api.clinpgx.org/v1/pathway/PA146123006") # Warfarin pathway pathway_data = response.json() # Search pathways by drug response = requests.get("https://api.clinpgx.org/v1/pathway", params={"drug": "warfarin"}) pathways = response.json() ``` **Pathway diagrams** show: - Drug metabolism steps - Enzymes and transporters involved - Gene variants affecting each step - Downstream effects on efficacy/toxicity - Interactions with other pathways ## Query Workflow ### Workflow 1: Clinical Decision Support for Drug Prescription 1. **Identify patient genotype** for relevant pharmacogenes: ```python # Example: Patient is CYP2C19 *1/*2 (intermediate metabolizer) response = requests.get("https://api.clinpgx.org/v1/allele/CYP2C19*2") allele_function = response.json() ``` 2. **Query gene-drug pairs** for medication of interest: ```python response = requests.get("https://api.clinpgx.org/v1/geneDrugPair", params={"gene": "CYP2C19", "drug": "clopidogrel"}) pair_info = response.json() ``` 3. **Retrieve CPIC guideline** for dosing recommendations: ```python response = requests.get("https://api.clinpgx.org/v1/guideline", params={"gene": "CYP2C19", "drug": "clopidogrel"}) guideline = response.json() # Recommendation: Alternative antiplatelet therapy for IM/PM ``` 4. **Check drug label** for regulatory guidance: ```python response = requests.get("https://api.clinpgx.org/v1/drugLabel", params={"drug": "clopidogrel"}) label = response.json() ``` ### Workflow 2: Gene Panel Analysis 1. **Get list of pharmacogenes** in clinical panel: ```python pgx_panel = ["CYP2C19", "CYP2D6", "CYP2C9", "TPMT", "DPYD", "SLCO1B1"] ``` 2. **For each gene, retrieve all drug interactions**: ```python all_interactions = {} for gene in pgx_panel: response = requests.get("https://api.clinpgx.org/v1/geneDrugPair", params={"gene": gene}) all_interactions[gene] = response.json() ``` 3. **Filter for CPIC guideline-level evidence**: ```python for gene, pairs in all_interactions.items(): for pair in pairs: if pair.get('cpicLevel'): # Has CPIC guideline print(f"{gene} - {pair['drug']}: {pair['cpicLevel']}") ``` 4. **Generate patient report** with actionable pharmacogenomic findings. ### Workflow 3: Drug Safety Assessment 1. **Query drug for PGx associations**: ```python response = requests.get("https://api.clinpgx.org/v1/chemical", params={"name": "abacavir"}) drug_id = response.json()[0]['id'] ``` 2. **Get clinical annotations**: ```python response = requests.get("https://api.clinpgx.org/v1/clinicalAnnotation", params={"drug": drug_id}) annotations = response.json() ``` 3. **Check for HLA associations** and toxicity risk: ```python for annotation in annotations: if 'HLA' in annotation.get('genes', []): print(f"Toxicity risk: {annotation['phenotype']}") print(f"Evidence level: {annotation['evidenceLevel']}") ``` 4. **Retrieve screening recommendations** from guidelines and labels. ### Workflow 4: Research Analysis - Population Pharmacogenomics 1. **Get allele frequencies** for population comparison: ```python response = requests.get("https://api.clinpgx.org/v1/allele", params={"gene": "CYP2D6"}) alleles = response.json() ``` 2. **Extract population-specific frequencies**: ```python populations = ['European', 'African', 'East Asian', 'Latino'] frequency_data = {} for allele in alleles: allele_name = allele['name'] frequency_data[allele_name] = { pop: allele.get(f'{pop}_frequency', 'N/A') for pop in populations } ``` 3. **Calculate phenotype distributions** by population: ```python # Combine allele frequencies with function to predict phenotypes phenotype_dist = calculate_phenotype_frequencies(frequency_data) ``` 4. **Analyze implications** for drug dosing in diverse populations. ### Workflow 5: Literature Evidence Review 1. **Search for gene-drug pair**: ```python response = requests.get("https://api.clinpgx.org/v1/geneDrugPair", params={"gene": "TPMT", "drug": "azathioprine"}) pair = response.json() ``` 2. **Retrieve all clinical annotations**: ```python response = requests.get("https://api.clinpgx.org/v1/clinicalAnnotation", params={"gene": "TPMT", "drug": "azathioprine"}) annotations = response.json() ``` 3. **Filter by evidence level and publication date**: ```python high_quality = [a for a in annotations if a['evidenceLevel'] in ['1A', '1B', '2A']] ``` 4. **Extract PMIDs** and retrieve full references: ```python pmids = [a['pmid'] for a in high_quality if 'pmid' in a] # Use PubMed skill to retrieve full citations ``` ## Rate Limiting and Best Practices ### Rate Limit Compliance ```python import time def rate_limited_request(url, params=None, delay=0.5): """Make API request with rate limiting (2 req/sec max)""" response = requests.get(url, params=params) time.sleep(delay) # Wait 0.5 seconds between requests return response # Use in loops genes = ["CYP2D6", "CYP2C19", "CYP2C9"] for gene in genes: response = rate_limited_request( "https://api.clinpgx.org/v1/gene/" + gene ) data = response.json() ``` ### Error Handling ```python def safe_api_call(url, params=None, max_retries=3): """API call with error handling and retries""" for attempt in range(max_retries): try: response = requests.get(url, params=params, timeout=10) if response.status_code == 200: return response.json() elif response.status_code == 429: # Rate limit exceeded wait_time = 2 ** attempt # Exponential backoff print(f"Rate limit hit. Waiting {wait_time}s...") time.sleep(wait_time) else: response.raise_for_status() except requests.exceptions.RequestException as e: print(f"Attempt {attempt + 1} failed: {e}") if attempt == max_retries - 1: raise time.sleep(1) ``` ### Caching Results ```python import json from pathlib import Path def cached_query(cache_file, api_func, *args, **kwargs): """Cache API results to avoid repeated queries""" cache_path = Path(cache_file) if cache_path.exists(): with open(cache_path) as f: return json.load(f) result = api_func(*args, **kwargs) with open(cache_path, 'w') as f: json.dump(result, f, indent=2) return result # Usage gene_data = cached_query( 'cyp2d6_cache.json', rate_limited_request, "https://api.clinpgx.org/v1/gene/CYP2D6" ) ``` ## PharmDOG Tool PharmDOG (formerly DDRx) is ClinPGx's clinical decision support tool for interpreting pharmacogenomic test results: **Key features**: - **Phenoconversion calculator**: Adjusts phenotype predictions for drug-drug interactions affecting CYP2D6 - **Custom genotypes**: Input patient genotypes to get phenotype predictions - **QR code sharing**: Generate shareable patient reports - **Flexible guidance sources**: Select which guidelines to apply (CPIC, DPWG, FDA) - **Multi-drug analysis**: Assess multiple medications simultaneously **Access**: Available at https://www.clinpgx.org/pharmacogenomic-decision-support **Use cases**: - Clinical interpretation of PGx panel results - Medication review for patients with known genotypes - Patient education materials - Point-of-care decision support ## Resources ### scripts/query_clinpgx.py Python script with ready-to-use functions for common ClinPGx queries: - `get_gene_info(gene_symbol)` - Retrieve gene details - `get_drug_info(drug_name)` - Get drug information - `get_gene_drug_pairs(gene, drug)` - Query gene-drug interactions - `get_cpic_guidelines(gene, drug)` - Retrieve CPIC guidelines - `get_alleles(gene)` - Get all alleles for a gene - `get_clinical_annotations(gene, drug, evidence_level)` - Query literature annotations - `get_drug_labels(drug)` - Retrieve pharmacogenomic drug labels - `search_variants(rsid)` - Search by variant rsID - `export_to_dataframe(data)` - Convert results to pandas DataFrame Consult this script for implementation examples with proper rate limiting and error handling. ### references/api_reference.md Comprehensive API documentation including: - Complete endpoint listing with parameters - Request/response format specifications - Example queries for each endpoint - Filter operators and search patterns - Data schema definitions - Rate limiting details - Authentication requirements (if any) - Troubleshooting common errors Refer to this document when detailed API information is needed or when constructing complex queries. ## Important Notes ### Data Sources and Integration ClinPGx consolidates multiple authoritative sources: - **PharmGKB**: Curated pharmacogenomics knowledge base (now part of ClinPGx) - **CPIC**: Evidence-based clinical implementation guidelines - **PharmCAT**: Allele calling and phenotype interpretation tool - **DPWG**: Dutch pharmacogenetics guidelines - **FDA/EMA labels**: Regulatory pharmacogenomic information As of July 2025, all PharmGKB URLs redirect to corresponding ClinPGx pages. ### Clinical Implementation Considerations - **Evidence levels**: Always check evidence strength before clinical application - **Population differences**: Allele frequencies vary significantly across populations - **Phenoconversion**: Consider drug-drug interactions that affect enzyme activity - **Multi-gene effects**: Some drugs affected by multiple pharmacogenes - **Non-genetic factors**: Age, organ function, drug interactions also affect response - **Testing limitations**: Not all clinically relevant alleles detected by all assays ### Data Updates - ClinPGx continuously updates with new evidence and guidelines - Check publication dates for clinical annotations - Monitor ClinPGx Blog (https://blog.clinpgx.org/) for announcements - CPIC guidelines updated as new evidence emerges - PharmVar provides nomenclature updates for allele definitions ### API Stability - API endpoints are relatively stable but may change during development - Parameters and response formats subject to modification - Monitor API changelog and ClinPGx blog for updates - Consider version pinning for production applications - Test API changes in development before production deployment ## Common Use Cases ### Pre-emptive Pharmacogenomic Testing Query all clinically actionable gene-drug pairs to guide panel selection: ```python # Get all CPIC guideline pairs response = requests.get("https://api.clinpgx.org/v1/geneDrugPair", params={"cpicLevel": "A"}) # Level A recommendations actionable_pairs = response.json() ``` ### Medication Therapy Management Review patient medications against known genotypes: ```python patient_genes = {"CYP2C19": "*1/*2", "CYP2D6": "*1/*1", "SLCO1B1": "*1/*5"} medications = ["clopidogrel", "simvastatin", "escitalopram"] for med in medications: for gene in patient_genes: response = requests.get("https://api.clinpgx.org/v1/geneDrugPair", params={"gene": gene, "drug": med}) # Check for interactions and dosing guidance ``` ### Clinical Trial Eligibility Screen for pharmacogenomic contraindications: ```python # Check for HLA-B*57:01 before abacavir trial response = requests.get("https://api.clinpgx.org/v1/geneDrugPair", params={"gene": "HLA-B", "drug": "abacavir"}) pair_info = response.json() # CPIC: Do not use if HLA-B*57:01 positive ``` ## Additional Resources - **ClinPGx website**: https://www.clinpgx.org/ - **ClinPGx Blog**: https://blog.clinpgx.org/ - **API documentation**: https://api.clinpgx.org/ - **CPIC website**: https://cpicpgx.org/ - **PharmCAT**: https://pharmcat.clinpgx.org/ - **ClinGen**: https://clinicalgenome.org/ - **Contact**: api@clinpgx.org (for substantial API use)