Synapedia is an independent knowledge project about psychoactive substances and harm reduction. If the platform helps you learn something new, you can support its development.
Every bit helps keep the project alive.
Pharmacological Risk Intelligence API. Check substance interactions with mechanism-level pharmacology, confidence scoring, and actionable mitigation.
Not just "dangerous" — understand why, with receptor conflicts, CYP pathways, PubMed sources, and harm reduction steps.
Base URL: https://synapedia.com/api/v1Get API Key
Free — no credit card. Auto-provisioned on signup.
Make a Request
POST two substances. Get severity + confidence back.
See the Result
Severity, confidence, mechanisms, sources — all in JSON.
The Synapedia API provides real-time pharmacological interaction analysis. Send a list of substances. Get back severity ratings, confidence scores, mechanism-level pharmacology, clinical sources, and mitigation guidance.
Risk Intelligence
Severity + risk classification for every substance pair
Mechanism Data
Receptor conflicts, CYP interactions, pharmacological pathways
Actionable Output
Harm reduction steps, washout guidance, clinical sources
Data is sourced from curated editorial reviews with PubMed citations, supplemented by class-based pharmacological data for broader coverage. Every response includes a confidence score so you know exactly how much to trust the result. Used for high-risk decision support in healthcare, harm reduction, and clinical research applications.
First request in under a minute. Get your API key from the dashboard, then run:
curl -X POST https://synapedia.com/api/v1/interaction-check \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"substances": ["mdma", "ssri"]
}'That's it. You'll get back a severity rating, confidence score, and — on paid plans — the pharmacological mechanism explaining why this combination is dangerous.
All API requests require a valid API key. Include it in the Authorization header:
Authorization: Bearer syn_dk_a1b2c3d4e5f6...Alternatively, you can use the x-api-key header. The Authorization: Bearer method is preferred.
Keep your key secret
Never expose API keys in client-side code, public repos, or browser requests. Use your key server-side only. If a key is compromised, rotate it immediately from the dashboard.
API keys follow the format syn_{tier}_{32chars}. The prefix identifies the tier:
| Prefix | Tier | Example |
|---|---|---|
syn_fr_ | Free | syn_fr_a1b2c3d4e5... |
syn_dk_ | Pro | syn_dk_x9y8z7w6v5... |
syn_pr_ | Business | syn_pr_m3n4o5p6q7... |
syn_tm_ | Enterprise | syn_tm_j8k9l0h1g2... |
/api/v1/interaction-checkCheck pharmacological interactions between 2–10 substances. Returns severity, confidence, and — for paid tiers — mechanism pharmacology, source references, and mitigation guidance.
substancesstring[]requiredArray of 2–10 substance identifiers. Accepts slugs (mdma), names (MDMA), or aliases (molly). Case-insensitive.
curl -X POST https://synapedia.com/api/v1/interaction-check \
-H "Authorization: Bearer $SYNAPEDIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"substances": ["mdma", "ssri", "alcohol"]
}'const response = await fetch(
"https://synapedia.com/api/v1/interaction-check",
{
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.SYNAPEDIA_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
substances: ["mdma", "ssri", "alcohol"],
}),
}
);
const { data, meta } = await response.json();
// Highest-severity interaction
const critical = data.interactions[0];
console.log(critical.severity); // "high"
console.log(critical.summary); // "Serotonin syndrome risk..."
console.log(critical.confidence.level); // "high"
// Mechanism data (Pro plan and above)
if (critical.pharmacology) {
console.log(critical.pharmacology.mechanisms);
console.log(critical.pharmacology.harm_reduction);
}import os
import requests
response = requests.post(
"https://synapedia.com/api/v1/interaction-check",
headers={
"Authorization": f"Bearer {os.environ['SYNAPEDIA_API_KEY']}",
"Content-Type": "application/json",
},
json={
"substances": ["mdma", "ssri", "alcohol"]
},
)
result = response.json()
interactions = result["data"]["interactions"]
for pair in interactions:
print(f"{pair['names'][0]} + {pair['names'][1]}")
print(f" Severity: {pair['severity']}")
print(f" Confidence: {pair['confidence']['level']}")
print(f" Summary: {pair['summary']}")
# Mechanism data (Pro plan and above)
if pair.get("pharmacology"):
print(f" Mechanisms: {pair['pharmacology']['mechanisms']}")
print(f" Mitigation: {pair['pharmacology']['harm_reduction']}")Successful responses return a 200 with two top-level objects: data and meta.
{
"data": {
"substances": [
{
"input": "mdma",
"slug": "mdma",
"name": "MDMA",
"class": "Empathogene",
"matched": true
},
{
"input": "ssri",
"slug": "ssri",
"name": "SSRI",
"class": "Antidepressiva",
"matched": true
}
],
"interactions": [
{
"pair": ["mdma", "ssri"],
"names": ["MDMA", "SSRI"],
"severity": "high",
"risk_classification": "dangerous",
"summary": "Serotonin syndrome risk. SSRIs block MDMA's primary mechanism and create dangerous serotonin accumulation.",
"confidence": {
"score": 85,
"level": "high",
"evidence_basis": "curated"
},
"pharmacology": {
"mechanisms": [
"Competitive SERT binding",
"Serotonin reuptake inhibition stacking",
"MAO pathway interference"
],
"explanation": "Both MDMA and SSRIs act on the serotonin transporter (SERT). SSRIs block reuptake while MDMA forces serotonin release, creating dangerous accumulation that can trigger serotonin syndrome.",
"harm_reduction": [
"Do not combine. Minimum 2-week SSRI washout before MDMA.",
"If symptoms occur (hyperthermia, rigidity, agitation): seek emergency medical attention immediately.",
"Fluoxetine requires 5+ weeks washout due to long half-life."
]
},
"sources": {
"count": 3,
"references": [
{ "label": "Gillman PK (2005) — Monoamine oxidase inhibitors, opioid analgesics and serotonin toxicity", "url": "https://pubmed.ncbi.nlm.nih.gov/15784664/" },
{ "label": "Pilgrim JL et al. (2011) — Serotonin toxicity involving MDMA", "url": "https://pubmed.ncbi.nlm.nih.gov/21756931/" },
{ "label": "Vuori E et al. (2003) — Death following ingestion of MDMA and moclobemide", "url": "https://pubmed.ncbi.nlm.nih.gov/14517580/" }
]
},
"last_reviewed": "2025-11-15",
"warnings": []
}
],
"pairs_checked": 1,
"unresolved": []
},
"meta": {
"api_version": "v1",
"data_source": "curated",
"disclaimer": "This data is for scientific and educational purposes only. It does not constitute medical advice.",
"timestamp": "2026-04-08T14:30:00.000Z",
"request_id": "req_a1b2c3d4e5f6a1b2c3d4e5f6"
}
}Unlock the full pharmacological picture
Pro includes mechanisms, PubMed sources, harm reduction steps, and review dates. 7-day free trial.
data.interactions[]
pair[string, string]Canonical slugs of the two substances.
names[string, string]Human-readable display names.
severitystringRisk level: high, moderate, low, or unknown.
risk_classificationstringHuman-readable classification: dangerous, caution, low_risk, or unknown.
summarystringOne-line description of the interaction risk. Always included on all tiers.
confidenceobjectData quality assessment. See Confidence Scoring.
pharmacologyobject | nullMechanism data. null on Free tier. See Field Gating.
sourcesobjectSource references. count always included. references[] on Pro+ only.
last_reviewedstring | nullISO 8601 date of last editorial review. Pro+ only.
warningsstring[]Data quality warnings — e.g., class-based data caveats.
meta
api_versionstringAlways v1.
data_sourcestringcurated, database, or curated+database.
disclaimerstringLegal/educational disclaimer. Display this to your end users.
timestampstringISO 8601 response timestamp.
request_idstringUnique ID for debugging. Include in support requests.
The same request, two different responses. Free gives you the risk signal. Pro gives you the full pharmacological picture.
{"pair": ["mdma", "ssri"],"severity": "high","risk_classification": "dangerous","summary": "Serotonin syndrome risk. SSRIs block MDMA's primary mechanism...","confidence": {"score": 85,"level": "high","evidence_basis": "curated"},"pharmacology": null,"sources": {"count": 3,"references": []},"last_reviewed": null,"warnings": []}
pharmacology, sources.references, last_reviewed — locked
Unlock the full pharmacological picture
Pro includes mechanisms, PubMed sources, harm reduction steps, and review dates. 7-day free trial.
Every interaction result includes a confidence object. This tells you how much to trust the data — not just what the risk is, but how sure we are.
| Score | Level | What it means |
|---|---|---|
| 70–100 | high | Editorially reviewed, substance-specific data with clinical citations. |
| 40–69 | moderate | Pharmacological class-based data. Structurally sound but not substance-specific. |
| 1–39 | low | Limited data. Computed from partial signals or class heuristics. |
| 0 | none | No interaction data available. Absence of data does not imply safety. |
Recommendation: Use the confidence level to gate your UI. Show a "data quality" indicator to your users. Treat none as "no data — consult a professional," not "safe."
The evidence_basis field tells you how the interaction data was derived. The API uses a tiered evidence system:
Editorially reviewed by pharmacologists. Substance-specific mechanism data with PubMed citations. 48 curated interaction pairs covering major combinations including SSRI, SNRI, TCA, and MAOI interactions.
Derived from pharmacological class membership. Covers 360+ substances but uses category-level templates (e.g., all SSRIs share one interaction profile). Structurally accurate but not substance-specific. The warnings[] array flags when this applies.
No interaction data in the system. The response will include severity unknown and a warning that absence of data does not imply safety. Your product should surface this clearly.
The Free tier includes severity, confidence, and summary on every request. Deeper fields are gated by plan:
| Field | Free | Pro | Business |
|---|---|---|---|
| severity + summary | ✓ | ✓ | ✓ |
| confidence (score + level) | ✓ | ✓ | ✓ |
| evidence_basis | ✓ | ✓ | ✓ |
| sources.count | ✓ | ✓ | ✓ |
| pharmacology.mechanisms | ✓ | ✓ | |
| pharmacology.explanation | ✓ | ✓ | |
| pharmacology.harm_reduction | ✓ | ✓ | |
| sources.references[] | ✓ | ✓ | |
| last_reviewed | ✓ | ✓ | |
| Bulk matrix endpoint | ✓ | ||
| Knowledge graph queries | ✓ | ||
| Webhook alerts | ✓ |
On the Free tier, gated fields return null or empty arrays. The response includes a _locked_fields object showing you exactly what data is available on upgrade, plus an _upgrade_hint with a direct link.
{
"_upgrade_hint": "You're seeing severity + confidence only. Upgrade to Pro ($49/mo) to unlock: mechanism-level pharmacology, harm reduction guidance, PubMed source URLs, and review dates. 7-day free trial — no risk.",
"_locked_fields": {
"pharmacology.mechanisms": "🔒 3 mechanisms identified — upgrade to Pro to view",
"pharmacology.explanation": "🔒 Detailed explanation available — upgrade to Pro",
"pharmacology.harm_reduction": "🔒 2 harm reduction steps available — upgrade to Pro",
"sources.references": "🔒 3 PubMed references available — upgrade to Pro",
"last_reviewed": "🔒 Review date available — upgrade to Pro"
}
}Understand why an interaction is dangerous
Pro unlocks mechanism pharmacology, PubMed sources, and harm reduction steps. $49/mo — start free.
Test the API directly from this page. Enter two substances and see the real response. Pre-filled with MDMA + SSRI — one of the most dangerous combinations in our database.
Rate limits are enforced per API key using a sliding window. Every response includes rate limit headers:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Maximum requests per minute for your tier. |
| X-RateLimit-Remaining | Requests remaining in the current window. |
| X-RateLimit-Reset | Unix timestamp (seconds) when the window resets. |
| Retry-After | Seconds to wait before retrying (only on 429). |
| Tier | Requests / month | Requests / minute | Max substances / request |
|---|---|---|---|
| Free | 1,000 | 10 | 3 |
| Pro | 10,000 | 30 | 5 |
| Business | 100,000 | 120 | 10 |
| Enterprise | Custom | Custom | 10 |
async function fetchWithRetry(url, options, maxRetries = 3) {
for (let attempt = 0; attempt <= maxRetries; attempt++) {
const res = await fetch(url, options);
if (res.status !== 429) return res;
const retryAfter = parseInt(res.headers.get("Retry-After") ?? "5");
const jitter = Math.random() * 1000;
const delay = retryAfter * 1000 * Math.pow(2, attempt) + jitter;
await new Promise((r) => setTimeout(r, delay));
}
throw new Error("Rate limit exceeded after max retries");
}Errors return a consistent JSON structure with a machine-readable code and a human-readable message:
{
"error": {
"code": "TOO_FEW_SUBSTANCES",
"message": "Provide at least 2 substances."
}
}| HTTP | Code | Meaning |
|---|---|---|
| 400 | INVALID_JSON | Request body is not valid JSON. |
| 400 | MISSING_FIELD | Required "substances" array not provided. |
| 400 | INVALID_TYPE | "substances" is not an array of strings. |
| 400 | TOO_FEW_SUBSTANCES | Fewer than 2 substances provided. |
| 400 | TOO_MANY_SUBSTANCES | More than 10 substances provided. |
| 400 | INVALID_SUBSTANCE | A substance entry is not a valid non-empty string. |
| 401 | MISSING_API_KEY | No API key provided in the request. |
| 401 | INVALID_API_KEY | The API key is not valid or has been revoked. |
| 402 | SUBSCRIPTION_REQUIRED | Active subscription required for this tier. |
| 429 | RATE_LIMITED | Per-minute rate limit exceeded. Check Retry-After header. |
| 429 | QUOTA_EXCEEDED | Monthly request quota exhausted. |
| 500 | INTERNAL_ERROR | Internal server error. Report with request_id. |
{
"error": {
"code": "MISSING_API_KEY",
"message": "API key required. Include in Authorization header: Bearer syn_..."
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit of 10 requests/minute exceeded. Retry after 42s."
}
}Check the confidence level before displaying results
A "high" severity with "low" confidence needs different UI treatment than high/high. Surface both signals to your users.
Display the disclaimer
The meta.disclaimer field is required to be shown to end users. This is scientific information, not medical advice.
Handle unresolved substances gracefully
If a substance isn't in our database, data.unresolved will list it. Show a clear message — don't silently drop it.
Read the warnings array
Class-based results include a warning that data is not substance-specific. Pass this context through to your users.
Cache responses when appropriate
Interaction data changes infrequently. Cache results for the same substance pair for up to 24 hours to reduce API calls.
Implement exponential backoff on 429s
If rate-limited, respect the Retry-After header. Exponential backoff with jitter prevents thundering herd issues.
Use the request_id for support
Every response includes meta.request_id. Include it in support tickets for fast debugging.
Most drug interaction databases return a flat severity label. Synapedia returns the full pharmacological picture.
| Dimension | Typical interaction API | Synapedia |
|---|---|---|
| Output | Severity label only | Severity + mechanism + mitigation + confidence |
| Confidence | None | Numeric score (0–100) + evidence basis |
| Mechanisms | Not available | Receptor conflicts, CYP pathways, pharmacological explanation |
| Mitigation | "Avoid combination" | Specific washout periods, emergency protocols, timing guidance |
| Sources | None | PubMed URLs per interaction pair |
| Coverage | Prescription drugs only | 360+ substances including research chemicals, supplements, recreational |
| Data quality signal | None | Per-result warnings + evidence_basis flag |
Used for high-risk decision support
Get your API key in 30 seconds. Free tier includes 1,000 requests per month — no credit card required.
Synapedia provides scientific information only. It does not constitute medical advice. Some interaction data is derived from pharmacological class, not substance-specific evidence. Always consult a qualified healthcare professional before making clinical decisions.
Questions or issues? api@synapedia.com