API Documentation
← All tools
GET
/api/v1/clinical-trials/topicsClinical Trials by Topic
clinical-trialsNo success wrapper
Search trials by OpenAlex topic name (exact PHRASE match over openalex_topics[].topic_name; relevance-sorted by default). Accepts every optional filter from the registry search. Get exact topic_name strings from the sample endpoint or from trial documents - fuzzy strings will not match.
When to use it
- trials under an OpenAlex research topic
- topic-restricted listing with status/phase/sponsor filters
Getting started
Base URL
https://app.caelrith.com/api/v1/toolsAuthentication
Include your API key in the x-api-key header.
Parameters
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| search | string | No | Additional full-text PHRASE match over title/summary text (same semantics as the registry search). |
| page | number | No | Page number (default 1). Range: 1 to ∞ |
| limit | number | No | Results per page (1-100, default 20). Range: 1 to 100 |
| status | string | No | Exact trial status, case-insensitive input (stored uppercase). Common values: RECRUITING, ACTIVE_NOT_RECRUITING, COMPLETED, TERMINATED, WITHDRAWN, SUSPENDED, NOT_YET_RECRUITING, ENROLLING_BY_INVITATION, UNKNOWN. |
| phase | string | No | Exact normalized phase value (stored form). |
| sponsor | string | No | Exact match against resolved sponsor names (no fuzzy matching). |
| condition | string | No | Exact match against resolved condition names (no fuzzy matching). |
| disease_id | string | No | Disease CURIE with uppercase prefix (e.g. EFO:0003767, MONDO:0004992). Values without a colon are silently ignored by the server (filter dropped). Get CURIEs from the Disease Autocomplete tool. |
| enrollment_min | number | No | Minimum enrollment (inclusive). |
| enrollment_max | number | No | Maximum enrollment (inclusive). |
| start_date_after | string | No | YYYY-MM-DD; matches trials with start_date >= this date. |
| completion_date_before | string | No | YYYY-MM-DD; matches trials with completion_date <= this date. |
| sort | string | No | Sort order (server default for topic search: relevance). 'updated' returns only trials with an update timestamp; 'enrollment' only trials with non-null enrollment. Allowed values: updated, enrollment, relevance |
| order | string | No | Sort direction (default desc); applies to updated/enrollment. Allowed values: asc, desc |
| sex | string | No | Eligible sex, e.g. ALL, FEMALE, MALE. |
| min_age_years | number | No | Minimum participant age in years. |
| max_age_years | number | No | Maximum participant age in years. |
| healthy_volunteers | boolean | No | Accepts healthy volunteers (true/false). |
| design_allocation | string | No | Allocation methodology pass-through (e.g. Randomized). |
| design_masking | string | No | Masking methodology pass-through (e.g. Double, Single). |
| design_primary_purpose | string | No | Primary purpose pass-through (e.g. Treatment). |
| sponsor_trial_count_max | number | No | Only trials having some sponsor (resolved or raw) with a total trial count below this number - finds small/emerging sponsors. |
| pi_author_id | string | No | OpenAlex author id for a principal investigator. Accepts A#######, openalex_A####### or the full https://openalex.org/... URL. Invalid ids return HTTP 400. Obtain a real id from the user or from the Trial Full Record endpoint's data.researchers[].author_key - there is no name-to-id resolution, so never invent one. |
| pi_match_tag | string | No | Restrict PI links by resolution confidence: verified = institution gate passed (safe), shortcut = name-only match (provisional), llm = LLM-arbiter accepted. Only meaningful together with pi_author_id; on its own it does NOT filter (the full corpus total is returned). Allowed values: verified, shortcut, llm |
| topic | string | Yes | OpenAlex topic name, phrase-matched exactly (e.g. 'CAR-T cell therapy research'). Prefer exact topic_name strings seen in trial documents. |
Example request
curl -H "x-api-key: YOUR_API_KEY" \ "https://app.caelrith.com/api/v1/clinical-trials/topics?topic=your_topic"
Response envelope
This endpoint returns an implicit 2xx response - there is no success flag in the body.
{
"data": { /* payload */ },
"meta": { /* pagination, totals */ }
}
// No "success" flag on this endpoint - any 2xx JSON is a success.Response shape
List responseTRIALS
Payload: data — Topic Trials
Exact total: meta.totalItems
Pagination: server-side via page and limit
Common row fields
| Field | Description |
|---|---|
| trial_id | ID |
| title | Title |
| status | Status |
| phase | Phase |
| start_date | Start Date |
| enrollment | Enrollment |
Empty results: No matching rows (HTTP 200)
Catalog version 0.0.0-generated · generated from the API source