GenomicsAPI Guides

Free SNP Annotation Database API for Developers

Access 400+ curated SNP annotations via API. Trait associations, pharmacogenomics, population frequencies, and ClinVar references.

Ryan Bethencourt
April 9, 2026
8 min read

Overview

The SciRouter SNP annotation endpoint provides programmatic access to a curated database of over 400 clinically relevant single nucleotide polymorphisms. Each entry includes the rsID, associated gene, trait or condition, risk allele, genotype-specific interpretations, category classification, and literature source. The endpoint is free, requires no authentication, and returns JSON.

This is designed as a building block for personal genomics applications. Instead of maintaining your own annotation database, you can query this endpoint and get structured, source-referenced data ready for genotype matching.

Endpoint Reference

GET /v1/personal-genomics/annotations

Returns the full catalog of curated SNP annotations. No authentication required.

  • Base URL: https://api.scirouter.ai
  • Method: GET
  • Auth: None required
  • Query parameters: category (optional) — filter by Traits, Pharmacogenomics, Health, Ancestry, or Neanderthal
curl example
# Fetch all annotations
curl https://api.scirouter.ai/v1/personal-genomics/annotations

# Filter by category
curl "https://api.scirouter.ai/v1/personal-genomics/annotations?category=Pharmacogenomics"

Response Format

The response is a JSON object with an annotations array. Each element contains the full annotation record for one SNP:

Response structure
{
  "annotations": [
    {
      "rsid": "rs1800497",
      "gene": "ANKK1/DRD2",
      "trait": "Dopamine Receptor Density",
      "category": "Traits",
      "risk_allele": "A",
      "genotype_effects": {
        "GG": "Normal dopamine receptor density",
        "AG": "Slightly reduced receptor density",
        "AA": "Reduced receptor density (Taq1A polymorphism)"
      },
      "source": "GWAS Catalog",
      "population_frequency": {
        "global_maf": 0.21
      }
    }
  ],
  "count": 412,
  "version": "2026.04"
}

Data Sources

Every annotation in the catalog is traced to at least one primary source:

  • ClinVar — NCBI database of clinically significant variants. Used for health risk markers including BRCA1/2 tag SNPs, APOE, MTHFR, and Factor V Leiden.
  • PharmGKB — Pharmacogenomics knowledge base. Used for drug-gene interactions including CYP2D6, CYP2C19, VKORC1, and DPYD metabolizer status.
  • GWAS Catalog — NHGRI-EBI catalog of genome-wide association studies. Used for trait associations including eye color, hair texture, caffeine metabolism, and muscle fiber composition.

Categories

Annotations are organized into five categories:

  • Traits — Physical characteristics and behavioral tendencies (eye color, hair type, taste perception, circadian rhythm, muscle composition)
  • Pharmacogenomics — Drug-gene interactions affecting medication metabolism and dosing (CYP enzymes, VKORC1, DPYD, SLCO1B1)
  • Health — Disease risk markers with clinical evidence (APOE for Alzheimer risk, MTHFR for folate metabolism, diabetes loci, cardiac markers)
  • Ancestry — Population-informative markers with frequency differences across continental groups
  • Neanderthal — Introgressed variants from Neanderthal admixture (18 markers covering hair, skin, immune, and metabolism traits)

Python Integration Example

Fetch and use annotations in Python
import requests

# Fetch the full catalog
resp = requests.get(
    "https://api.scirouter.ai/v1/personal-genomics/annotations"
)
data = resp.json()
annotations = data["annotations"]
print(f"Loaded {data['count']} annotations")

# Build a lookup by rsID for fast matching
lookup = {a["rsid"]: a for a in annotations}

# Check a specific variant
if "rs4988235" in lookup:
    snp = lookup["rs4988235"]
    print(f"{snp['trait']}: {snp['genotype_effects']}")
    # Lactose Tolerance: {TT: persistent, CT: carrier, CC: intolerant}

# Filter pharmacogenomics entries
pharmgx = [a for a in annotations if a["category"] == "Pharmacogenomics"]
print(f"{len(pharmgx)} pharmacogenomics annotations")
for p in pharmgx[:3]:
    print(f"  {p['gene']}: {p['trait']}")

Related Resources

Frequently Asked Questions

Is the SNP annotation API free to use?

Yes. The GET /v1/personal-genomics/annotations endpoint is completely free and does not require an API key or account. It is designed as a public reference resource for developers building genomics applications.

How often is the annotation database updated?

The annotation catalog is curated and updated periodically as new clinically validated associations are published. Sources include ClinVar, PharmGKB, and the GWAS Catalog. Each annotation entry includes a source field so you can trace the evidence.

Can I filter annotations by category?

Yes. The endpoint accepts a category query parameter. Valid categories include Traits, Pharmacogenomics, Health, Ancestry, and Neanderthal. Pass category=Pharmacogenomics to retrieve only drug-gene interaction entries, for example.

What is the rate limit on the free endpoint?

The annotation endpoint has a generous rate limit of 60 requests per minute per IP address. Since the full catalog is returned in a single request, most applications only need to call it once and cache the results locally.

Can I contribute new annotations to the database?

Not directly through the API at this time. If you have suggestions for SNPs that should be included, contact the SciRouter team. All annotations are manually curated to ensure accuracy and clinical relevance before being added to the catalog.

Try this yourself

500 free credits. No credit card required.