All skills
davila7 avatar

/reactome-database

@2fe0cfa

Query Reactome REST API for pathway analysis, enrichment, gene-pathway mapping, disease pathways, molecular interactions, expression analysis, for systems biology studies.

Use this Skill: https://skilld.dev/gh/davila7/claude-code-templates/reactome-database

This session only. Nothing lands on disk.

referencesapi_reference.md

≈2.6k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Reactome API Reference

This document provides comprehensive reference information for Reactome's REST APIs.

Base URLs

  • Content Service: https://reactome.org/ContentService
  • Analysis Service: https://reactome.org/AnalysisService

Content Service API

The Content Service provides access to Reactome's curated pathway data through REST endpoints.

Database Information

Get Database Version
GET /data/database/version

Response: Plain text containing the database version number

Example:

import requests
response = requests.get("https://reactome.org/ContentService/data/database/version")
print(response.text)  # e.g., "94"
Get Database Name
GET /data/database/name

Response: Plain text containing the database name

Entity Queries

Query Entity by ID
GET /data/query/{id}

Parameters:

  • id (path): Stable identifier or database ID (e.g., "R-HSA-69278")

Response: JSON object containing full entity information including:

  • stId: Stable identifier
  • displayName: Human-readable name
  • schemaClass: Entity type (Pathway, Reaction, Complex, etc.)
  • species: Array of species information
  • Additional type-specific fields

Example:

import requests
response = requests.get("https://reactome.org/ContentService/data/query/R-HSA-69278")
pathway = response.json()
print(f"Pathway: {pathway['displayName']}")
print(f"Species: {pathway['species'][0]['displayName']}")
Query Entity Attribute
GET /data/query/{id}/{attribute}

Parameters:

  • id (path): Entity identifier
  • attribute (path): Specific attribute name (e.g., "displayName", "compartment")

Response: JSON or plain text depending on attribute type

Example:

response = requests.get("https://reactome.org/ContentService/data/query/R-HSA-69278/displayName")
name = response.text

Pathway Queries

Get Pathway Entities
GET /data/event/{id}/participatingPhysicalEntities

Parameters:

  • id (path): Pathway or reaction stable identifier

Response: JSON array of physical entities (proteins, complexes, small molecules) participating in the pathway

Example:

response = requests.get(
    "https://reactome.org/ContentService/data/event/R-HSA-69278/participatingPhysicalEntities"
)
entities = response.json()
for entity in entities:
    print(f"{entity['stId']}: {entity['displayName']} ({entity['schemaClass']})")
Get Contained Events
GET /data/pathway/{id}/containedEvents

Parameters:

  • id (path): Pathway stable identifier

Response: JSON array of events (reactions, subpathways) contained within the pathway

Search Queries

Search by Name
GET /data/query?name={query}

Parameters:

  • name (query): Search term

Response: JSON array of matching entities

Example:

response = requests.get(
    "https://reactome.org/ContentService/data/query",
    params={"name": "glycolysis"}
)
results = response.json()

Analysis Service API

The Analysis Service performs pathway enrichment and expression analysis.

Submit Analysis

Submit Identifiers (POST)
POST /identifiers/
POST /identifiers/projection/  # Map to human pathways only

Headers:

  • Content-Type: text/plain

Body:

  • For overrepresentation: Plain text list of identifiers (one per line)
  • For expression analysis: TSV format with header starting with "#"

Expression data format:

#Gene	Sample1	Sample2	Sample3
TP53	2.5	3.1	2.8
BRCA1	1.2	1.5	1.3

Response: JSON object containing:

{
  "summary": {
    "token": "MzUxODM3NTQzMDAwMDA1ODI4MA==",
    "type": "OVERREPRESENTATION",
    "species": "9606",
    "sampleName": null,
    "fileName": null,
    "text": true
  },
  "pathways": [
    {
      "stId": "R-HSA-69278",
      "name": "Cell Cycle, Mitotic",
      "species": {
        "name": "Homo sapiens",
        "taxId": "9606"
      },
      "entities": {
        "found": 15,
        "total": 450,
        "pValue": 0.0000234,
        "fdr": 0.00156
      },
      "reactions": {
        "found": 12,
        "total": 342
      }
    }
  ],
  "resourceSummary": [
    {
      "resource": "TOTAL",
      "pathways": 25
    }
  ]
}

Example:

import requests

# Overrepresentation analysis
identifiers = ["TP53", "BRCA1", "EGFR", "MYC", "CDK1"]
data = "\n".join(identifiers)

response = requests.post(
    "https://reactome.org/AnalysisService/identifiers/",
    headers={"Content-Type": "text/plain"},
    data=data
)

result = response.json()
token = result["summary"]["token"]

# Process pathways
for pathway in result["pathways"]:
    print(f"Pathway: {pathway['name']}")
    print(f"  Found: {pathway['entities']['found']}/{pathway['entities']['total']}")
    print(f"  p-value: {pathway['entities']['pValue']:.6f}")
    print(f"  FDR: {pathway['entities']['fdr']:.6f}")
Submit File (Form Upload)
POST /identifiers/form/

Content-Type: multipart/form-data

Parameters:

  • file: File containing identifiers or expression data
Submit URL
POST /identifiers/url/

Parameters:

  • url: URL pointing to data file

Retrieve Analysis Results

Get Results by Token
GET /token/{token}
GET /token/{token}/projection/  # With species projection

Parameters:

  • token (path): Analysis token returned from submission

Response: Same structure as initial analysis response

Example:

token = "MzUxODM3NTQzMDAwMDA1ODI4MA=="
response = requests.get(f"https://reactome.org/AnalysisService/token/{token}")
results = response.json()

Note: Tokens are valid for 7 days

Filter Results
GET /token/{token}/filter/pathways?resource={resource}

Parameters:

  • token (path): Analysis token
  • resource (query): Resource filter (e.g., "TOTAL", "UNIPROT", "ENSEMBL")

Download Results

Download as CSV
GET /download/{token}/pathways/{resource}/result.csv
Download Mapping
GET /download/{token}/entities/found/{resource}/mapping.tsv

Supported Identifiers

Reactome automatically detects and processes various identifier types:

Proteins and Genes

  • UniProt: P04637
  • Gene Symbol: TP53
  • Ensembl: ENSG00000141510
  • EntrezGene: 7157
  • RefSeq: NM_000546
  • OMIM: 191170

Small Molecules

  • ChEBI: CHEBI:15377
  • KEGG Compound: C00031
  • PubChem: 702

Other

  • miRBase: hsa-miR-21
  • InterPro: IPR011616

Response Formats

JSON Objects

Entity objects contain standardized fields:

{
  "stId": "R-HSA-69278",
  "displayName": "Cell Cycle, Mitotic",
  "schemaClass": "Pathway",
  "species": [
    {
      "dbId": 48887,
      "displayName": "Homo sapiens",
      "taxId": "9606"
    }
  ],
  "isInDisease": false
}

TSV Format

For bulk queries, TSV returns:

stId	displayName	schemaClass
R-HSA-69278	Cell Cycle, Mitotic	Pathway
R-HSA-69306	DNA Replication	Pathway

Error Responses

HTTP Status Codes

  • 200: Success
  • 400: Bad Request (invalid parameters)
  • 404: Not Found (invalid ID)
  • 415: Unsupported Media Type
  • 500: Internal Server Error

Error JSON Structure

{
  "code": 404,
  "reason": "NOT_FOUND",
  "messages": ["Pathway R-HSA-INVALID not found"]
}

Rate Limiting

Reactome does not currently enforce strict rate limits, but consider:

  • Implementing reasonable delays between requests
  • Using batch operations when available
  • Caching results when appropriate
  • Respecting the 7-day token validity period

Best Practices

1. Use Analysis Tokens

Store and reuse analysis tokens to avoid redundant computation:

# Store token after analysis
token = result["summary"]["token"]
save_token(token)  # Save to file or database

# Retrieve results later
result = requests.get(f"https://reactome.org/AnalysisService/token/{token}")

2. Batch Queries

Submit multiple identifiers in a single request rather than individual queries:

# Good: Single batch request
identifiers = ["TP53", "BRCA1", "EGFR"]
result = analyze_batch(identifiers)

# Avoid: Multiple individual requests
# for gene in genes:
#     result = analyze_single(gene)  # Don't do this

3. Handle Species Appropriately

Use /projection/ endpoints to map non-human identifiers to human pathways:

# For mouse genes, project to human pathways
response = requests.post(
    "https://reactome.org/AnalysisService/identifiers/projection/",
    headers={"Content-Type": "text/plain"},
    data=mouse_genes
)

4. Process Large Result Sets

For analyses returning many pathways, filter by significance:

significant_pathways = [
    p for p in result["pathways"]
    if p["entities"]["fdr"] < 0.05
]

Integration Examples

Complete Analysis Workflow

import requests
import json

def analyze_gene_list(genes, output_file="analysis_results.json"):
    """
    Perform pathway enrichment analysis on a list of genes
    """
    # Submit analysis
    data = "\n".join(genes)
    response = requests.post(
        "https://reactome.org/AnalysisService/identifiers/",
        headers={"Content-Type": "text/plain"},
        data=data
    )

    if response.status_code != 200:
        raise Exception(f"Analysis failed: {response.text}")

    result = response.json()
    token = result["summary"]["token"]

    # Filter significant pathways (FDR < 0.05)
    significant = [
        p for p in result["pathways"]
        if p["entities"]["fdr"] < 0.05
    ]

    # Save results
    with open(output_file, "w") as f:
        json.dump({
            "token": token,
            "total_pathways": len(result["pathways"]),
            "significant_pathways": len(significant),
            "pathways": significant
        }, f, indent=2)

    # Generate browser URL for top pathway
    if significant:
        top_pathway = significant[0]
        url = f"https://reactome.org/PathwayBrowser/#{top_pathway['stId']}&DTAB=AN&ANALYSIS={token}"
        print(f"View top result: {url}")

    return result

# Usage
genes = ["TP53", "BRCA1", "BRCA2", "CDK1", "CDK2"]
result = analyze_gene_list(genes)

Additional Resources

Source: SKILL.md on GitHub

1 warning6mo4 checks · Risk SAFE
  • Gen Agent Trust Hub7mo

    The skill allows interaction with the Reactome biological database through its REST API and a helper script. It is safe for its intended purpose but involves network communication with non-whitelisted domains, the installation of third-party packages, and the processing of external data files.

  • Socket6mo

    No alerts

  • Snyk7mo

    Risk: LOW · No issues

  • Runlayer7mo

    3/3 files flagged

Signed by skilld at 2fe0cfa. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 18 hours ago.

Activeupdated 10 months ago

README badge

README badge for davila7/claude-code-templates/reactome-database