Programmatic access to gene-disease-pathway associations. Query genes, diseases, and biological pathways through a REST API.
The GeDiPNet REST API provides programmatic access to curated gene-disease-pathway associations, regulatory networks, and biological annotations. Use it to:
Every endpoint, relative to the base URL. Each one can be tried in the interactive console below, which also documents every parameter. See Response Format for how each paging style works.
| Method | Path | Returns | Paging |
|---|---|---|---|
| Genes | |||
| GET | /genes/{symbol} | Gene metadata: name, synonyms, chromosome and location, summary, cross-reference IDs | — |
| GET | /genes/{symbol}/diseases | Associated diseases grouped by evidence (causal / unknown / text-mining) from ClinVar, GenCC, GWAS and PubTator | limit only (max 200) |
| GET | /genes/{symbol}/diseases/{disease}/evidence | PubMed references and curated evidence text for one gene–disease pair | — |
| GET | /genes/{symbol}/pathways | Reactome or KEGG pathways containing the gene | — |
| GET | /genes/{symbol}/mirnas | miRNA–gene interactions (miRTarBase) | page, limit |
| GET | /genes/{symbol}/transcription-factors | Transcription factors regulating the gene (TRRUST) | — |
| GET | /genes/{symbol}/gene-ontology | Gene Ontology terms, optionally filtered by category | page, limit |
| GET | /genes/{symbol}/proteins | UniProt entries with sequences and Pfam domains | — |
| GET | /genes/{symbol}/snps | dbSNP variants | page, limit |
| Diseases | |||
| GET | /diseases/{disease_name} | Disease terms with external IDs (MeSH, OMIM, HPO, Orphanet, MONDO), associated genes and references | page, limit |
| POST | /diseases/bulk | Look up to 50 diseases in one request | — |
| GET | /download/diseases | Full disease → gene table as TSV or JSON | offset, limit |
| Pathways | |||
| GET | /pathways | Browse or search Reactome / KEGG pathways by name, gene or disease | page, limit |
| GET | /pathways/{pathwayid}/genes | Genes in a pathway (up to 500) | — |
| GET | /pathways/{pathwayid}/diseases | Diseases linked to the pathway's genes (up to 1000) | — |
| GET | /download/pathways | Pathway dataset as TSV or JSON | offset, limit |
| Proteins | |||
| GET | /proteins | Browse or search UniProt proteins (by name, gene, PDB or KEGG ID) | page, limit |
| GET | /proteins/{entry} | One protein by UniProt accession: annotation, sequence, Pfam domains | — |
| Utility | |||
| GET | /test | Health check — no API key needed | — |
| GET | /openapi.json | OpenAPI 3.0 specification — no API key needed | — |
All endpoints are relative to this base URL. For example:
The full API description is available as an OpenAPI 3.0 file. Import it into Postman or Insomnia, or use it to generate a client library. No API key is needed to download it.
| Method | How to send | Recommended? |
|---|---|---|
| Request header | X-API-Key: your-key-here |
Yes — preferred |
| Query parameter | ?api_key=your-key-here |
Fallback only |
| Interactive console below | Click Authorize (top right of the console) and paste your key | Yes — for browser testing |
Visit login.php and create a free account or log in with your existing credentials.
On your profile dashboard, click "Generate My API Key". Your unique key is created instantly.
Your key is sent to your registered email address immediately.
All API requests follow standard REST principles:
Replace your-key-here with your API key — or log in and it's filled in for you.
All responses are JSON objects with a status field (except TSV downloads):
"success" or "error"| Endpoints | Query params | Pagination fields |
|---|---|---|
/genes/{symbol}/mirnas, /genes/{symbol}/gene-ontology, /genes/{symbol}/snps, /pathways, /proteins |
page, limit |
page, limit, count_returned, has_more — no total count; keep requesting the next page while has_more is true |
/diseases/{disease_name} |
page, limit |
current_page, per_page, total_terms, total_pages, has_next, has_prev |
/download/diseases, /download/pathways (JSON format) |
offset, limit |
limit, offset, returned — increase offset by limit until fewer than limit rows come back |
Other endpoints return their results in a single response. Some are capped at a fixed maximum; when a cap is reached, a note field says so (e.g. "Showing first 500 genes").
["Disgenet", "Orphanet"]Real responses from the live database, so you can see the shape before making a request. Long values are shortened with …. Most values come back as JSON strings, numeric columns included (e.g. "GeneID": "672"), so convert them in your code if you need numbers.
GET /genes/BRCA1
GET /pathways?database=kegg&search=insulin&limit=3
has_more is true whenever a full page came back, so the next page can occasionally be empty.
GET /pathways/hsa04910/genes?database=kegg
This endpoint returns genes rather than data. note says "Showing first 500 genes" when the 500-gene cap is reached.
GET /proteins/P38398
disease_count is the number of distinct curated diseases linked to the protein's gene. Use /genes/BRCA1/diseases to list them.
Errors return the appropriate HTTP status code and a JSON body:
| HTTP Code | Meaning | Example Scenario |
|---|---|---|
| 400 | Bad Request | Invalid database value, or missing/invalid diseases array on POST /diseases/bulk |
| 401 | Unauthorized | No API key was sent with the request |
| 403 | Forbidden | API key is invalid or has been revoked |
| 404 | Not Found | Unknown gene symbol, disease name or protein accession, or an unknown API path |
| 405 | Method Not Allowed | Wrong HTTP method for an existing path (e.g. POST /genes/BRCA1) |
| 429 | Too Many Requests | Rate limit exceeded — 100 requests/hour per key |
| 500 | Internal Server Error | Unexpected server or database failure |
Error bodies always have status and message. Some (authentication, rate limit, invalid database, unknown path) also repeat the HTTP status as code, but others omit it, so always read the HTTP status code itself:
Every response includes these headers:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Your ceiling — always 100 |
X-RateLimit-Remaining | Requests left in the current window |
X-RateLimit-Reset | Unix timestamp when your counter resets |
Best practices:
Long jobs are where scripts usually break. This helper follows has_more page by page. On a 429 it waits for retry_after_seconds and then retries, instead of failing.
This works for every endpoint with page / limit paging (see the endpoint table). For the /download/… endpoints, increase offset by limit instead, until fewer than limit rows come back.
The console below is powered by Swagger UI — test any endpoint directly from your browser without writing code.
Automatic when you're logged in with a key. Otherwise click "Authorize" at the top right, paste your X-API-Key, and confirm. The key is remembered in this browser across page reloads.
Type in the filter box above the console to narrow the list by tag (e.g. Proteins), then click an endpoint row to expand it.
Inputs are editable straight away. Required values are marked *; example values are pre-filled to help you get started.
Click "Execute" to fire the request. You'll see the full URL, a ready-to-copy cURL command, status code, response time and JSON response.
If you use data retrieved through the GeDiPNet API in a publication, tool or dataset, please cite:
For questions about licensing, redistribution, commercial use or higher rate limits, or to report a problem with the API, email gedipnet@bicnirrh.res.in.