Drugs to
Biological insights.

Look up any drug name, synonym, or identifier and retrieve cross-references, annotations, and structures. Paste a drug list to run enrichment analysis across targets, mechanisms, indications, and pathways.

Try:
Gleevec Gleevec STI-571 STI-571 imatinib mesylate imatinib mesylate BRD-K92723945 BRD-K92723945 1 compound one parent structure
One molecule, harmonized from every name and identifier it carries across sources.

No match found

No compound matched this term. SynDRA covers 3M+ compounds — try a generic name, brand name, INN, research code, or a database ID (ChEMBL, DrugBank, PubChem CID, InChIKey, RxNorm RXCUI).

synonyms harmonized
drug names from 11 databases
canonical compounds
deduplicated by structure
with resolved structure
SMILES / InChIKey confirmed
name-only entries
biologics, mixtures & research
Benchmark

More complete than any single source

Diverse recall across a 4-domain benchmark (rare/orphan drugs, CNS, cardiovascular, FAERS noisy names). SynDRA integrates all sources; 94.2% plain-match recall, 100% with the full resolver.

Source Recall ↑ Compounds Redistributable
PRISM18.2 %~5 KYes
LINCS 202054.4 %~13 KYes
TTD74.8 %~8 KYes
ChEMBL82.8 %~2.4 MYes
DrugCentral83.6 %~3.7 KYes
PubChem85.8 %~95 MYes
SynDRA (all sources)100.0 %3,112,548Yes

Benchmark: 274-drug diverse gold set (rare/orphan, CNS/neuropsychiatric, cardiovascular with salt forms, FAERS noisy real-world names); recall = fraction of benchmark drugs recovered via name or identifier. Best single source: PubChem 85.8%; SynDRA reaches 100% (+14.2 pp) using multi-source integration and resolver fallbacks.

← Back
How it works

The same drug, scattered across names and identifiers, reassembled.

SynDRA integrates synonyms from LINCS 2020, TTD, PRISM, DrugCentral, DrugBank, PubChem, ChEMBL, UniChem, and RxNorm, then anchors every name to a standardized InChIKey so that salts, solvates, and stereoisomers of one molecule all resolve to the same canonical compound. Two live diagrams below use one real compound from the current build — sirolimus (rapamycin), SYN0000068 — to show exactly how.

Same drug, nine names, one ID

Each database knows this molecule by a different string — a brand name, a vendor code, an internal accession. Click below to watch them all snap onto one structure-anchored node.

?
9 records.
Same molecule?
SYN0000068
Sirolimus
QFJCIRLUMZQUOT-
HPLJOQBZSA-N
ChEMBL CHEMBL413
PubChem CID 5284616
DrugBank DB00877
RxNorm RXCUI 35302
LINCS BRD-A79768653
UniChem PDB: RAP
TTD Rapamune
DrugCentral rapamycin
PRISM AY-22989

Nine databases, nine different strings for the same molecule — one InChIKey ties them together.

Real record from the current build (redistributable slice: 320 synonyms, 6 xref-contributing sources). DrugBank/RxNorm identifiers are cross-referenced through other sources here — their own license-restricted records aren't redistributed. LINCS profiles this compound on a not-yet-merged stereo-variant node — a real gap the reconciliation pipeline hasn't closed.

Follow one query, start to finish

A brand name, a research code, a database accession, or a typo — the same six-stage path lands on the same record.

⌨️
You type
"Rapamycin"
…or AY-22989, DB00877, CHEMBL413 — any name or ID lands here
🔡
Normalize
rapamycin
Unicode-fold → lowercase → hyphen/space merge
🧭
Resolve
exact → prefix → fallback
The same chain strips dose, salt-combo, and vendor-code suffixes:
LIPITOR 20mg
→ LIPITOR
DISULFIRAM+CU
→ DISULFIRAM
metoprolol succinate ER
→ metoprolol succinate
🧬
Canonical node
SYN0000068
320 synonyms · 6 sources collapse onto this one ID
🎯
Annotated
FKBP12 · MTOR
mTOR inhibitor — used to prevent kidney transplant rejection
One answer
same record
Whichever of the 320 synonyms you searched, you get the same JSON, SDF, or enrichment result
01

Harmonize names

Synonyms and identifiers from nine core sources plus Wikidata and FDA Orange Book are Unicode-normalized and resolved to one canonical node, keyed by a stable SynDRA ID. Name-only entries are kept, never dropped.

02

Anchor to structure

RDKit desalts, charge-neutralizes, and derives a full InChIKey for each compound. Salts, solvates, and stereoforms of one molecule share a connectivity skeleton and link automatically.

03

Annotate and enrich

Targets, mechanisms of action, indications, ATC classes, and clinical phases are harmonized across 14 annotation sources and deduplicated to canonical terms.

04

Resolve noisy queries

Exact → prefix → fallback chain strips dose, salt, combination, and vendor-code suffixes. The same chain that lifts real-world name recall to 100% in benchmarking runs in your browser on every search.

← Back
Explore

Browse drugs

Filter the compound hub by target, mechanism of action, indication, ATC class, clinical development phase, FDA approval status, or first-approval country. Filters combine with AND — narrow by any combination to find candidates.

← Back
Programmatic access

REST API: integrate SynDRA into any pipeline

Query compounds, resolve drug lists, and retrieve cross-references programmatically. Deploy locally in one command from the open-source repo.

# Resolve any drug name, synonym, or identifier curl "http://localhost:8080/search?q=imatinib" # Batch-resolve a list (up to 500 names in one request) curl -X POST "http://localhost:8080/batch" \ -H "Content-Type: application/json" \ -d '{"queries":["imatinib","aspirin","metformin"]}' # Resolve name to BRD accession(s) curl "http://localhost:8080/cmap?q=imatinib" # Add clue_key to also fetch CLUE compound metadata curl "http://localhost:8080/cmap?q=imatinib&clue_key=YOUR_KEY" # Download SDF structure curl "http://localhost:8080/compound/SYN0002705/sdf" -o imatinib.sdf # Property-filtered browse (Lipinski Ro5) curl "http://localhost:8080/compounds?mw_max=500&logp_max=5&hbd_max=5" # Find structurally similar compounds (Tanimoto over RDKit ECFP4 fingerprints) curl "http://localhost:8080/compound/SYN0002705/similar?limit=20&min_similarity=0.4" # Database statistics curl "http://localhost:8080/stats"
import requests # Single lookup r = requests.get("http://localhost:8080/search", params={"q": "imatinib"}) compound = r.json() print(compound["syndra_id"]) # SYN0002705 print(compound["xrefs"]["RXNORM_RXCUI"]) # ['282388'] print(compound["xrefs"]["BRD"]) # ['BRD-K92723993'] # Batch: check pipeline coverage before analysis drugs = ["imatinib", "DB00619", "CHEMBL941", "unknowndrug"] res = requests.post("http://localhost:8080/batch", json={"queries": drugs}).json() resolved = [r["syndra_id"] for r in res if r["resolved"]] print(f"{len(resolved)}/{len(drugs)} resolved") # Resolve name → BRD accession(s) cmap = requests.get("http://localhost:8080/cmap", params={"q": "imatinib"}).json() print(cmap["brd_ids"]) # ['BRD-K92723993'] # Property filter: Lipinski Ro5 hits = requests.get("http://localhost:8080/compounds", params={"mw_max": 500, "logp_max": 5, "hbd_max": 5, "limit": 50}).json() print(f"{hits['total']} Lipinski-compliant compounds")
// Single lookup const res = await fetch('http://localhost:8080/search?q=imatinib'); const compound = await res.json(); console.log(compound.syndra_id); // SYN0002705 console.log(compound.xrefs.RXNORM_RXCUI); // ['282388'] // Batch resolve const batch = await fetch('http://localhost:8080/batch', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({queries: ['imatinib', 'aspirin', 'unknowndrug']}) }); const results = await batch.json(); // [{query:'imatinib',syndra_id:'SYN0002705',resolved:true}, ...]
GET/search?q=<query>

Resolve any drug name, synonym, ChEMBL ID, DrugBank ID, PubChem CID, BRD accession, or RxNorm RXCUI. Returns the full compound record with all synonyms, cross-references, and pharmacological annotations.

GET/compound/{sid}

Retrieve a compound record by SynDRA canonical ID (e.g. SYN0002705). Returns synonyms, xrefs, structure, and metadata.

POST/batch

Resolve up to 500 drug names in one request. Returns syndra_id and resolved flag for each query. Useful for pipeline coverage checks.

GET/compound/{sid}/sdf

Download a compound's structure as an SDF file. Includes 2D coordinates by default; pass ?threed=true for ETKDG+MMFF94 3D. Returns HTTP 422 for name-only compounds.

GET/cmap

Resolve any drug name to its LINCS BRD accession(s). Add ?clue_key= to also fetch CLUE compound metadata (MOA, target, signature count) from the Connectivity Map API.

GET/compounds

Browse structure-resolved compounds with physicochemical filters: mw_max, logp_max, tpsa_max, hbd_max, hba_max. Useful for building Lipinski or CNS-penetrant screening sets.

GET/compound/{sid}/similar

Find structurally similar compounds by Tanimoto similarity over RDKit ECFP4 fingerprints (Morgan, radius=2, 2048-bit), searched against the annotated drug set. Tune with ?limit= and ?min_similarity=. Excludes salt/stereo variants of the same molecule.

GET/stats

Database statistics: compound count, synonym count, xref count, breakdown by source and identifier type.

Deploy in one command

The API reads from the redistributable Parquet files. No database required.
Median lookup latency <2 ms after startup.

pip install -r api/requirements.txt uvicorn api.syndra_api:app --port 8080 # API ready at http://localhost:8080 # Interactive docs at http://localhost:8080/docs
← Back
Open data

Download the data

All redistributable data files are released under CC BY-SA 4.0 and updated quarterly. Parquet files are recommended for large-scale use; CSV files work with any tool.

🧪
Compounds
3,113,650 canonical compound nodes: SynDRA ID, preferred name, InChIKey, SMILES, structure flag, and first source.
🏷
Synonyms
12,155,850 synonym entries: raw name, normalized key, source, and license per entry, linked to SynDRA ID.
🔗
Cross-references
20,289,852 identifier mappings across 25 types: ChEMBL, DrugBank, PubChem CID, RxNorm RXCUI, BindingDB, PDB ligand codes, and more.

Web portal data: the live portal streams syndra.sqlite3 directly from Cloudflare R2 via HTTP Range requests (sql.js-httpvfs) — no full-database download needed to search or browse. Enrichment library data is in enrichment_data.json.

Redistributable files are released under CC BY-SA 4.0. The full build (includes DrugBank) is for academic use only. RxNorm content requires a free UMLS license to redistribute. See DATA_SOURCES.md for details.
← Back
Provenance

Source databases

SynDRA harmonizes nine core synonym/structure databases plus two enrich-only extensions. Every compound record links back to the original source below. See DATA_SOURCES.md for exact file versions and download dates.

DrugBank and RxNorm identifiers are cross-referenced through other sources in the redistributable build — their own license-restricted records aren't redistributed.

Annotation & enrichment sources (targets, mechanisms, indications, ATC, clinical phase):

← Back
Open resource

Built on the full SynDRA map

The complete resource, build pipeline, and structural validation are open on GitHub. Cite SynDRA if it supports your work.

Corbaci, T., Naderi Yeganeh, P. & Hide, W. SynDRA: a structure-anchored compound hub for drug repurposing that eliminates silent identifier loss. Preprint (2026). github.com/hidelab/SynDRA

Report a bug / give feedback

Spot something wrong, or have a suggestion? Let us know.