Research API

Access the Blossom psychedelic research database programmatically. Papers, clinical trials, country reports, compounds, researchers, and co-authorship networks — available as JSON, CSV, and downloadable datasets for R, Python, and SPSS.

Quick Start

1. Create an API Key

Go to your Account Settings and create an API key. Copy it immediately — it's only shown once. Use the key in the Authorization header for all requests.

2. Make a request

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.moreblossom.com/api/v1/countries/germany"

3. Get CSV for R/SPSS

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.moreblossom.com/api/v1/papers?format=csv&compound=psilocybin" \
  -o papers.csv

Endpoints

MethodPathDescriptionTier
GET/api/v1/papersList papers with metadata (paginated, filterable)free
GET/api/v1/papers/:slugSingle paper detail — Pro adds outcome measures & adverse eventsfree
GET/api/v1/trialsList clinical trials (paginated, filterable)free
GET/api/v1/trials/:slugSingle trial detail — Pro adds arms, dosing, eligibilityfree
GET/api/v1/trials-forecastRanked trial catalyst forecasts — Pro adds narrative and operational detailfree
GET/api/v1/compoundsList compounds with trial/paper countsfree
GET/api/v1/compounds/:slugComplete published compound report, linked research, and timeline availabilitypro
GET/api/v1/compounds/:slug/timelineCurated compound research-journey timeline, programmes, and milestonespro
GET/api/v1/topicsList topics/indications with trial/paper countsfree
GET/api/v1/topics/:slugComplete published topic report, including linked evidence and research summariespro
GET/api/v1/research/:compound/:topicCompound × topic evidence page with matching papers, trials, and available summariespro
GET/api/v1/research/:compound/:topic/adverse-eventsPublished adverse-event evidence summary for a compound × topic pairpro
GET/api/v1/research/:compound/:topic/dose-summariesPublished dose evidence summary for a compound × topic pairpro
GET/api/v1/countriesList country reports with public indicators and search linksfree
GET/api/v1/countries/:slugSingle country report - Pro adds deep report fields, reimbursement, trials, stakeholders, and eventsfree
GET/api/v1/countries/:slug/scorecardCountry policy and access scorecard, including published subnational and advocacy contextpro
GET/api/v1/countries/:slug/subnational/:subnationalSlugComplete published subnational policy, access, research, and ecosystem reportpro
GET/api/v1/regionsList published regional reportsfree
GET/api/v1/regions/:slugComplete regional research, policy, and aggregate intelligence reportpro
GET/api/v1/personsList researchers with affiliationsfree
GET/api/v1/persons/:slugComplete researcher profile with affiliations, research footprint, and linked entitiespro
GET/api/v1/journalsList journals with h-indexfree
GET/api/v1/journals/:slugComplete journal profile with linked papers and research footprintpro
GET/api/v1/stakeholdersList organisations and other research stakeholdersfree
GET/api/v1/stakeholders/:slugSingle stakeholder with related trialsfree
GET/api/v1/networkCo-authorship network graph (nodes + edges)pro
GET/api/v1/evidence-matrixCompound × topic evidence matrixpro
GET/api/v1/downloadsList available dataset files for downloadfree
GET/api/v1/changes?since=ISO-8601Published-record sync feed (upserts only; no deletion tombstones yet)pro

Query Parameters

Common list query parameters (some are endpoint-specific):

ParameterDescription
limitResults per page (1–100, default 25)
cursorPagination cursor (use value from response meta.cursor)
qFull-text search query — matches paper titles and abstracts (papers endpoint only)
doiFilter by DOI (papers endpoint only). Accepts DOI path or DOI URL.
compoundFilter by compound slug (e.g., psilocybin)
topicFilter by topic slug (e.g., depression)
sinceFilter by date (ISO 8601, e.g., 2024-01-01)
sponsorFilter trials and forecasts by sponsor slug
phaseFilter trial forecasts by phase
formatResponse format: json (default) or csv

OpenAPI and incremental sync

The complete, machine-readable OpenAPI 3.1 contract for all v1 GET routes is available in the API specification. Pro integrations can start an incremental sync with a strict ISO-8601 since value, then send only the opaque meta.cursor returned by each page. Do not inspect or construct cursors.

Each change includes stable ID, entity type, slug, timestamp, canonical and API paths, resource links, and locator fields. Subnational records include both countrySlug and slug; evidence summaries include compound and topic slugs. The feed currently covers published Sanity documents and upserts only. It does not emit deletion tombstones or revisions to code-backed compound timelines, so consumers should periodically reconcile full listings and treat timeline data as snapshot-only.

# First page
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.moreblossom.com/api/v1/changes?since=2026-07-01T00:00:00Z"

# Continuation: use the exact opaque meta.cursor, without since
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.moreblossom.com/api/v1/changes?cursor=OPAQUE_CURSOR"

Compound reports and timelines

The compounds list is a compact index. Pro keys can retrieve the full published compound report as structured JSON, including portable-text content, linked research, and timeline availability. Where a curated research-journey timeline is published, its milestones and programme threads are available from the timeline endpoint. Open-ended timeline acts use until: null with openEnded: true.

# Complete compound report, including timeline availability
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.moreblossom.com/api/v1/compounds/psilocybin"

# Full curated research-journey timeline (published compounds only)
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.moreblossom.com/api/v1/compounds/psilocybin/timeline"

Topic reports and research evidence

Pro keys can also retrieve complete published topic reports and the evidence pages that connect a compound with an indication. The compound-topic endpoint returns its matched papers and trials alongside any published safety and dose summaries. The two summary endpoints return their complete underlying evidence rows.

# Complete topic report
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.moreblossom.com/api/v1/topics/depression"

# Evidence for one compound and indication, with matching papers and trials
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.moreblossom.com/api/v1/research/psilocybin/depression"

# Complete safety and dose evidence, where published
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.moreblossom.com/api/v1/research/psilocybin/depression/adverse-events"
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.moreblossom.com/api/v1/research/psilocybin/depression/dose-summaries"

DOI Lookup Flow

Use /api/v1/papers?doi=... to find a paper by DOI, then use the returned slug with /api/v1/papers/:slug for full detail.

# Bare DOI
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.moreblossom.com/api/v1/papers?doi=10.1038/s41591-023-02565-4"

# DOI URL
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.moreblossom.com/api/v1/papers?doi=https://doi.org/10.1038/s41591-023-02565-4"

# Then fetch full paper by slug
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.moreblossom.com/api/v1/papers/:slug"

Response Format

JSON responses follow a consistent envelope:

{
  "data": [ ... ],
  "meta": {
    "cursor": "abc123",
    "hasMore": true
  }
}

Code Examples

Python

import requests

API_KEY = "your_api_key_here"  # From Account Settings → API Keys

headers = {"Authorization": f"Bearer {API_KEY}"}

# Filter by compound slug
resp = requests.get(
    "https://www.moreblossom.com/api/v1/papers",
    params={"compound": "psilocybin", "limit": 50},
    headers=headers,
)
papers = resp.json()["data"]

# Full-text search across titles and abstracts
resp = requests.get(
    "https://www.moreblossom.com/api/v1/papers",
    params={"q": "santo daime", "limit": 25},
    headers=headers,
)
papers = resp.json()["data"]

R (httr2)

library(httr2)

# Store your API key in .Renviron: BLOSSOM_API_KEY=your_key_here
resp <- request("https://www.moreblossom.com/api/v1/papers") |>
  req_headers(Authorization = paste("Bearer", Sys.getenv("BLOSSOM_API_KEY"))) |>
  req_url_query(compound = "psilocybin", format = "csv") |>
  req_perform()

papers <- read.csv(textConnection(resp_body_string(resp)))

R (download CSV)

# Discover the current download URL (datasets are refreshed daily)
downloads <- request("https://www.moreblossom.com/api/v1/downloads") |>
  req_headers(Authorization = paste("Bearer", Sys.getenv("BLOSSOM_API_KEY"))) |>
  req_perform() |>
  resp_body_json()

files <- downloads$data
is_papers <- vapply(
  files,
  function(file) identical(file$filename, "papers-metadata.csv"),
  logical(1)
)
papers_url <- files[[which(is_papers)[1]]]$url
papers <- read.csv(papers_url, na.strings = "NA", fileEncoding = "UTF-8-BOM")

Downloadable Datasets

Pre-generated datasets are refreshed daily. Available in CSV (R/SPSS compatible) and JSON formats. Use the /api/v1/downloads endpoint to list all available files with download URLs.

FileDescriptionTier
papers-metadata.csvAll papers: DOI, PMID, title, date, study type, authors, compounds, topicsfree
papers-outcomes.csvPer-arm outcome measures: timepoints, estimates, CIspro
papers-contrasts.csvBetween-group contrasts: effect sizes, p-valuespro
papers-adverse-events.csvPer-arm TEAE countspro
trials.csvAll trials: registry, phase, status, compound, sponsorfree
trials-detailed.csvTrials with eligibility, therapy, sitespro
persons.csvResearchers with affiliations and paper/trial countsfree
compounds.csvCompounds with pharmacology and countsfree
topics.csvIndications with prevalence and countsfree
evidence-matrix.csvCompound x topic evidence ratingspro
network.jsonCo-authorship network graphpro

Rate Limits

Free

100

requests / minute

Pro

500

requests / minute

CSV Conventions

All CSV files follow these conventions for compatibility with R, SPSS, JASP, and Excel:

  • UTF-8 with BOM (Windows Excel compatible)
  • Comma-delimited
  • NA for missing values (R convention)
  • ISO 8601 dates (YYYY-MM-DD)
  • Multi-value fields joined with semicolons (e.g., "compound1; compound2")
  • snake_case column names