Technical
Introducing GeneCore: One Link From a Drug to Its Target Biology
Introducing GeneCore, one canonical record per gene, plus mechanism of action on every DrugCore record. See how the two connect a drug to its target biology in a single API link.
- Technical
🆕 GeneCore is live, and DrugCore now ships mechanism of action by default.
Amass organizes biomedical data into a family of linked Cores: one canonical, deduplicated record set per domain, each cross-linked to the others so a single lookup fans out across all of them. New to the Cores? Start with our introduction to DrugCore and RegulatoryCore.
Every drug in DrugCore now tells you how it works and what it acts on. And every target it acts on now resolves to a complete gene record. With GeneCore, the biology underneath the platform (drugs, trials, papers, approvals) has an entity of its own.
One thread: serelaxin and RXFP1
Take one approved drug and pull the thread all the way through.
Start with the drug. DrugCore resolves serelaxin (Novartis' RLX030; AMDC_EQFnpKdakwRCPOBBsv3ObCN1gUx). Its mechanism of action names two relaxin receptors, RXFP1 and RXFP2, and its maxClinicalStage reads APPROVAL. So far, this looks like a straightforward success story.
Now, follow the link. The Ensembl IDs in the mechanism resolve straight into GeneCore via referencesGeneCore, with no secondary lookups required. The gene record for the primary target, RXFP1 (AMGC_P5XLFLF09udIIUimBJpnuuyhnw), shows a gnomadConstraint with an LOEUF of 0.966 and a pLI of 0: losing this receptor is well tolerated in the human population, with no measurable depletion of loss-of-function variants and no safety liabilities on file.
Serelaxin doesn't knock the receptor out. It activates it. But the genetics still carry a warning. If the body shrugs off losing relaxin signalling entirely, the pathway may not be load-bearing, and a pathway that isn't load-bearing is a hard one to rescue a failing heart by amplifying. It's a flag, not a verdict, and it's visible the moment you land on the gene.
Now read the rest of the thread the platform already holds. Serelaxin's pivotal trial, RELAX-AHF-2, enrolled 6,600 patients with acute heart failure, and missed its primary endpoints. The EMA refused marketing authorization for the brand name Reasanz. The APPROVAL stage we saw earlier reflects a minor-market authorization; the major regulator, looking at the failure, said no.
The takeaway isn't just that the drug failed. It's where the question now lives. The genetic signal, a target the human population tolerates losing, is the kind of check that belongs before a 6,600-patient trial, not after it. RELAX-AHF-2 was designed in 2013, years before metrics like LOEUF existed, so no one could have run this check then. Today you can: the mechanism names the gene, and the gene gives a reason to think twice: one API link from the drug, not buried across five tabs and a literature search.
The target was the missing piece
That single thread is the part that used to be hard. We've written before that the hardest part of working with biomedical data has little to do with the science itself, and everything to do with the shape of the data. DrugCore collapsed scattered drug identities into a single, canonical record. RegulatoryCore brought FDA and EMA approvals onto a unified schema. But all of that stops at a familiar wall: you find a drug, pull its trials, trace its approvals, and then you ask, "what does it actually target, and is that target any good?" Suddenly, you're back to juggling five browser tabs.
You hit ChEMBL for the mechanism. Ensembl and UniProt for the gene details. Open Targets for druggability. gnomAD for genetic constraint. DepMap for essentiality. That's five different vocabularies and five disparate lookups, all manually cross-referenced, and the better part of an afternoon gone before you can even line the answers up. Worst of all, the target itself was never a distinct, queryable record in the platform. It was only a free-text string a drug happened to point at.
GeneCore fixes that. And mechanism of action is the bridge that connects it to everything you already have.
Mechanism of action: the bridge
Every DrugCore record now returns a mechanismsOfAction field by default. It's a three-layer structure that answers how a drug works, and a drug can act through more than one mechanism on more than one target.
Here is what it looks like for serelaxin (a recombinant form of human relaxin-2), which activates two relaxin receptors:
[
{
"actionType": "ACTIVATOR",
"mechanismOfAction": "Relaxin receptor 1 activator",
"targetType": "single protein",
"targets": [
{
"ensemblId": "ENSG00000171509",
"symbol": "RXFP1",
"name": "relaxin family peptide receptor 1",
"synonyms": ["RXFPR1", "LGR7"]
}
]
},
{
"actionType": "ACTIVATOR",
"mechanismOfAction": "Relaxin receptor 2 activator",
"targetType": "single protein",
"targets": [
{
"ensemblId": "ENSG00000133105",
"symbol": "RXFP2",
"name": "relaxin family peptide receptor 2",
"synonyms": ["GREAT", "GPR106", "INSL3R", "RXFPR2", "LGR8"]
}
]
}
]
Two things matter here. First, it's searchable: mechanism descriptions, target symbols, and synonyms now feed directly into our full-text index. A DrugCore query matches on what a drug does, not just what it's called. Second, and this is the key that unlocks GeneCore, every target carries its Ensembl gene ID and Amass ID. That ID is the thread we pull next, and it works whether a drug hits one target or several.
GeneCore: one canonical record per gene
GeneCore does for genes exactly what DrugCore did for drugs: it provides one harmonized record per gene, with every identifier and every line of evidence resolved onto it. You can fetch a record by Ensembl, HGNC, Entrez, or UniProt ID, by gene symbol, or by OMIM, Orphanet, and IUPHAR identifiers. Connect once, and look up using whatever identifier you already have.
Rather than just listing the fields, here's how the GeneCore schema maps to the actual questions a discovery team asks:
| The Question | The Field |
|---|---|
| Is losing this gene tolerated in humans? | gnomadConstraint (LOEUF, pLI) |
| Is it essential for cell survival? | depmapEssentiality |
| Can I drug it, and how? | tractability (modality, clinical vs. predictive), targetClass |
| What are the safety red flags? | safetyLiabilities |
| What disease and biology is it tied to? | summary, omimId, orphanet, iuphar, hgncGeneGroups |
| Can I do structure-based design? | protein (PDB, Pfam/InterPro, sequence; opt-in) |
Each of these answers used to require a distinct database and a custom query. Now, they are unified in a single API response.
One link, no keyword-matching
Neither core is an island. Because the mechanism of action carries Ensembl IDs, a drug's referencesGeneCore array is populated directly from those IDs. A drug's targets are traversable as full gene records, and conversely, the referencesDrugCore array on a gene returns every drug that targets it.
+------------------------------+
| DrugCore record (MoA) |
+------------------------------+
|
| referencesGeneCore
v
+------------------------------+
| GeneCore record |
| constraint, essentiality, |
| tractability, safety |
+------------------------------+
One lookup provides the underlying biology:
- On a drug,
?include=referencesGeneCorereturns its target genes. - On a gene,
?include=referencesDrugCorereturns the drugs that target it.
BASE=https://api.amass.tech/api/v1
DRUG=AMDC_EQFnpKdakwRCPOBBsv3ObCN1gUx # serelaxin's DrugCore ID
curl -sS "$BASE/cores/drugcore/records/$DRUG?include=referencesGeneCore" \
-H "Authorization: Bearer $AMASS_API_KEY"
The response carries the resolved gene IDs:
{
"referencesGeneCore": [
"AMGC_P5XLFLF09udIIUimBJpnuuyhnw",
"AMGC_50ro6OuaMC2lgCtfhak2CiwTZcO"
]
}
Those two records are RXFP1 and RXFP2, serelaxin's relaxin receptors. The same call is one line of natural language over MCP: "Pull serelaxin and show me the genes it targets."
Why it matters
GeneCore moves target validation upstream. Instead of starting from a drug name, you can start from target biology: query GeneCore for genes that are loss-of-function intolerant (maxConstraintLoeuf), essential for survival (isEssential), and carry clinical-precedent tractability (tractabilityStage), then fan straight out to the compounds that hit them with ?include=referencesDrugCore. That's a question you couldn't ask when the target was just a string of text a drug happened to point at.
It works in either direction. Land on a drug and traverse to its targets' biology, or land on the biology and traverse to the drugs. The same references* links, the same single query, no manual name-matching at either end.
Get started
GeneCore is available today over both REST and our MCP server. Connect once, use it everywhere.
GET /v1/cores/genecore/records: search across genesGET /v1/cores/genecore/records/{amassId}: fetch a specific recordPOST /v1/cores/genecore/records/lookup: resolve Amass IDs from public identifiers
Access uses standard Bearer-token authentication, fully consistent with every other core.
Read the API reference · Getting started
The bigger picture
This release brings five cores together onto one connected graph: drug ↔ trial ↔ paper ↔ approval ↔ gene. The genome is no longer where the data trail goes cold; it's where your investigation can start. Pull a drug, read its mechanism, land immediately on the target, and ask whether human genetics ever wanted you to drug it in the first place. All in one connected thread.
You can see that graph for yourself: explore the connected cores on the Amass platform and follow the links between a drug, its targets, the trials behind it, and the regulatory record: the same thread this post walks through, rendered live.
Book a technical discussion