Clinical trial search
Clinical studies registered on ClinicalTrials.gov by condition, intervention, title, outcome, sponsor, location or any text, with filters for overall status, phase, study type, sex, age group, funder type, posted results, healthy volunteers, start, completion, first-posted and last-update date ranges, distance from a point and NCT ids, and sort. Each study has NCT id, titles, status, type, phases, enrollment, conditions, keywords, interventions, sponsor and collaborators, key dates, results flag, location count and countries, brief summary and link. Pass next_cursor back as cursor; null on the last page.
Every response includes credits_used: the credits this call cost.
Parameters
| name | type | description |
|---|---|---|
condition | string | Condition or disease. Example: lung cancer |
q | string | Any text (all fields). |
intervention | string | Drug, device, procedure or other intervention. |
title | string | Words in the title or acronym. |
outcome | string | Outcome measure words. |
sponsor | string | Sponsor or collaborator name. |
lead_sponsor | string | Lead sponsor name. |
study_id | string | NCT id or other study id. |
location | string | Location terms: facility, city, state or country. |
status | string | Comma-separated overall statuses: recruiting, not_yet_recruiting, active_not_recruiting, enrolling_by_invitation, completed, suspended, terminated, withdrawn, unknown, available, no_longer_available, temporarily_not_available, approved_for_marketing, withheld. Example: recruiting |
phase | string | Comma-separated phases: early1, 1, 2, 3, 4, na. Example: 3 |
study_type | string | Comma-separated: interventional, observational, expanded_access. |
sex | string | Comma-separated: female, male, all. |
age_group | string | Comma-separated: child, adult, older_adult. |
funder_type | string | Comma-separated: nih, fed, industry, other. |
has_results | boolean | Only studies with (true) or without (false) posted results. |
healthy_volunteers | boolean | true: only studies accepting healthy volunteers. |
start_from | string | Start date on or after (YYYY-MM-DD). |
start_to | string | Start date on or before (YYYY-MM-DD). |
completion_from | string | Primary completion on or after (YYYY-MM-DD). |
completion_to | string | Primary completion on or before (YYYY-MM-DD). |
posted_from | string | First posted on or after (YYYY-MM-DD). |
posted_to | string | First posted on or before (YYYY-MM-DD). |
updated_from | string | Last updated on or after (YYYY-MM-DD). |
updated_to | string | Last updated on or before (YYYY-MM-DD). |
lat | number | Latitude of a point; with lon, only studies with a site within radius_miles. |
lon | number | Longitude of the point. |
radius_miles | integer | Distance from lat/lon in miles (default 50). Example: 50 |
nct_ids | string | Comma-separated NCT ids. |
sort | updated | -updated | start | -start | posted | -posted | completion | enrollment | Sort order (default relevance). |
limit | integer | Studies per page, 1-100. Example: 20 |
cursor | string | Paging cursor: pass next_cursor from the previous page; it is null on the last page. |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/clinicaltrials/v1/search?condition=lung+cancer" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/clinicaltrials/v1/search",
params={"condition": "lung cancer"},
headers={"x-api-key": os.environ["APISH_KEY"]},
timeout=120,
)
res.raise_for_status()
data = res.json() const url = new URL("https://api.api.sh/clinicaltrials/v1/search");
url.searchParams.set("condition", "lung cancer");
const res = await fetch(url, { headers: { "x-api-key": process.env.APISH_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); Response
A JSON object with the fields described above, plus raw (the source's own data), cached, fetched_at and credits_used. Errors return {"success": false, "error": "…"} with the HTTP status (see errors). A lookup that ran but found nothing (404) costs the price above; refused calls and errors on our side are free (what's charged).