Build on the LCFA trial database
A public REST API over 14,500+ lung cancer clinical trials — sourced from ClinicalTrials.gov and 19 pharmaceutical registries, enriched with structured biomarkers and geocoded sites. Free for non-commercial use; request a key below.
Quickstart
Every request (except this page and /api/v1/docs) needs an API key. Pass it as a bearer token:
curl -H "Authorization: Bearer lcfa_pk_..." \
"https://lcfa-trial-finder.vercel.app/api/v1/trials?limit=5"Successful responses use a consistent envelope:
{
"data": [ /* array of trial objects */ ],
"meta": {
"total": 14534,
"limit": 50,
"offset": 0,
"quota_used": 17,
"quota_limit": 1000
}
}Check X-RateLimit-Limit and X-RateLimit-Remaining response headers, or hit /api/v1/meta for a quota snapshot without spending a call.
Rate limits
Daily quotas reset at UTC midnight. When you hit the limit you'll get a 429 with Retry-After set to seconds until reset. Tiers:
| Tier | Daily quota | Who it's for |
|---|---|---|
| Free | 100 requests/day | For personal or evaluation use. Any researcher or individual developer. |
| Standard | 1,000 requests/day | For patient-advocacy apps, research dashboards, and production nonprofit tools. |
| Partner | 10,000 requests/day | Negotiated. For high-volume integrators and LCFA partner organizations. |
Error responses: 401 missing/invalid key · 403 revoked · 429 quota exceeded.
Endpoints
/api/v1/trialsSearch trials. Supports diagnosis, location, biomarker, mutation, phase, status, age/gender, and ZIP-radius filters. Paginated. Returns a 5-location sample per trial.
Query parameters (16)
- diagnosisType
- nsclc | sclc | unknown (default: unknown)
- cancerStage
- SCLC only: limited | extensive — restricts results to that stage. Inclusive: rows that mention the chosen stage OR have no stage signal at all are included; rows that explicitly mention the opposite stage are excluded.
- country
- us | international
- state
- Two-letter US state code (e.g. CA)
- gender
- male | female
- age
- Integer (years)
- trialPhase
- Phase I | Phase II | Phase III | Phase IV | Interventional | Observational | All Phases
- trialStatus
- Recruiting | Enrolling | Active | Completed | Closed
- statusBuckets
- Comma-separated: recruiting,active,completed,unknown (default: recruiting,active,unknown)
- biomarkers
- Comma-separated: EGFR, ALK, ROS1, KRAS, BRAF, MET, RET, NTRK, HER2, PD-L1
- mutations
- biomarker:mutationId pairs, e.g. EGFR:L858R,KRAS:G12C
- firstPostedAfter
- ISO date (YYYY-MM-DD) — only trials first posted on/after this date
- zip
- US ZIP code (5 digits) — requires radius
- radius
- Miles (max 500) — requires zip
- limit
- Integer 1-200 (default 50)
- offset
- Integer (default 0)
/api/v1/trials/:nct_idFull detail for a single trial, including inclusion/exclusion criteria, outcomes, all locations with lat/lng, and structured biomarker requirements.
/api/v1/sourcesList of data sources (ClinicalTrials.gov + 19 pharma registries) with approximate trial counts.
/api/v1/metaReturns the calling key's label, tier, and today's quota usage. Does NOT count against the quota — safe to poll.
/api/v1/docsMachine-readable JSON version of this documentation. Unauthenticated.
Examples
Save your key to an env var first (export LCFA_KEY=lcfa_pk_...), then:
Most common concrete use-case — biomarker + location filter.
curl -H "Authorization: Bearer $LCFA_KEY" \
"https://lcfa-trial-finder.vercel.app/api/v1/trials?trialStatus=Recruiting&biomarkers=EGFR&mutations=EGFR:L858R&state=CA&limit=10"ZIP-radius search. US only; 97.7% of trial sites are geocoded.
curl -H "Authorization: Bearer $LCFA_KEY" \
"https://lcfa-trial-finder.vercel.app/api/v1/trials?zip=94103&radius=50&limit=20"Includes inclusion/exclusion criteria, all sites with lat/lng, and biomarkers.
curl -H "Authorization: Bearer $LCFA_KEY" \
"https://lcfa-trial-finder.vercel.app/api/v1/trials/NCT02193282"Does NOT count against your daily quota. Safe to poll.
curl -H "Authorization: Bearer $LCFA_KEY" \
"https://lcfa-trial-finder.vercel.app/api/v1/meta"Response fields
List endpoint
GET /api/v1/trials returns each trial with these fields:
nct_idofficial_titlebrief_summaryphasestatussponsorconditionsurlpharma_urlpharma_source_slugstudy_typestudy_startfirst_postedprimary_completionlast_updatedlocation_countlocations_sampleDetail endpoint
GET /api/v1/trials/:nct_id adds these on top of the list fields:
detailed_descriptionconditions_arrinterventionenrollmentage_minage_maxsexes_eligibleinclusion_criteriaexclusion_criteriamesh_termskeywordsstudy_completionsourceplain_language_summaryprimary_outcomessecondary_outcomesstudy_documentspublicationslocationsbiomarkersData sources + freshness
Trial records come from ClinicalTrials.gov (NIH) plus 19 pharmaceutical sponsor registries (AstraZeneca, Genentech/Roche, Pfizer, Merck/Daiichi, Novartis, and others). The dataset is refreshed monthly via an orchestrated pipeline (CT.gov API sync → pharma CSV import → HTTP + Firecrawl scrape → GPT-4o biomarker extraction → Nominatim geocoding → auto-flag).
Current coverage: 14,534 trials, 376K trial sites (97.7% geocoded), 7,704 structured biomarker requirements across 3,383 trials, with mutation-level granularity for EGFR, KRAS, BRAF, MET, ALK/ROS1/RET fusions, and PD-L1 expression.
Fetch GET /api/v1/sources for a live list of sources with per-source trial counts.
Terms of use
- Attribution is required: “Trial data via LCFA Next Breath (lcfa-trial-finder.vercel.app)” on any public surface using this data.
- Do not present API output as medical advice. Always link patients back to ClinicalTrials.gov or the original sponsor page (we include the
urlfield on every trial). - Don't re-host the full dataset as a competing database. Building search, decision support, notification, and analytics tools is encouraged.
- Respect your quota. If you need more, request a Partner tier.
Ready to build? Email us.
We manually provision every key — this keeps the service focused on legitimate patient-advocacy, research, and nonprofit use. Tell us who you are and what you're building, and we'll usually respond within a few business days.
Email trials@lungcancerfoundation.org →Include: organization name, what you're building, and expected daily request volume.
