API documentation
Base URL https://api.phaserate.com · methodology
method-v0 · every figure on this page is a live response from the
service, not an illustration.
Why every response carries conditional_on
Published Phase 2 → Phase 3 success rates span 22% to 58%. That is not disagreement about the data. It is three declared choices, each measured on identical data:
| Choice | Effect | Measured by |
|---|---|---|
| Censoring rule | 16.9 pp | Aryal et al. 2026 (38.7% → 21.8%) |
| Estimator | 10.4 pp | Wong, Siah & Lo 2019 (48.6% vs 38.2%) |
| Counting unit | 8.6 pp | DiMasi et al. 2013 (41.6% vs 33.0%) |
Every one is larger than any therapeutic-area or data-vendor effect, and no
published source exposes them. So we return the conventions with the number and
let you change them. GET /v1/conventions documents all of them and
needs no key.
Quick start
curl https://api.phaserate.com/v1/base-rates \ -H "X-API-Key: $PHASERATE_KEY" \ -G --data-urlencode "therapeutic_area=oncology" \ --data-urlencode "modality=small_molecule" \ --data-urlencode "window_start=2015" \ --data-urlencode "window_end=2025"
{
"phase_pair": "phase2_to_phase3",
"therapeutic_area": "oncology",
"modality": "small_molecule",
"n": 978,
"n_transitioned": 233,
"rate": 0.23824130879345604,
"confidence_interval_95": [0.2125985414648905, 0.2659324150559984],
"coverage": 0.9649,
"counts": { "evaluable": 978, "transitioned": 233,
"censored": 299, "unresolved": 0 },
"conditional_on": {
"counting_unit": "asset_sponsor",
"censoring_rule": "quiet_is_failure",
"imputation_policy": "none",
"combination_handling": "dominant_sponsor",
"quiet_days": 540
},
"methodology": {
"version": "method-v0",
"snapshot_date": "2026-07-23",
"source": "ClinicalTrials.gov via AACT (CTTI)"
}
}
Authentication
Pass your key as X-API-Key, or as
Authorization: Bearer <key>. Keys are argon2-hashed and shown
once at issuance — we cannot recover one for you, only replace it.
Parameters
| Parameter | Values | Default |
|---|---|---|
phase_pair | phase2_to_phase3 | phase2_to_phase3 |
therapeutic_area |
oncology, infectious_disease, neurology, cardiovascular, immunology_inflammation, metabolic, endocrine, respiratory, ophthalmology, haematology, psychiatry, dermatology, gastro_hepatology, musculoskeletal, rare_genetic, womens_health, dental, ent, trauma | all |
modality | small_molecule, biologic | all |
window_start / window_end | year | 2015 / 2025 |
counting_unit |
asset_sponsor · asset_sponsor_indication · asset | asset_sponsor |
censoring_rule |
quiet_is_failure · quiet_dropped | quiet_is_failure |
imputation_policy |
none (path_by_path returns 501) | none |
combination_handling |
dominant_sponsor · split_components · exclude | dominant_sponsor |
quiet_days | 90–3650 | 540 |
Response fields
rate— the transition probability, ornullif suppressed.n— evaluable programmes in the denominator.confidence_interval_95— Wilson score interval, which behaves sensibly at the small sample sizes many slices live at.coverage— of the programmes that ran a Phase 2 in this slice, the share we could date and judge. Programmes that never ran a Phase 2 are out of scope and are not counted against it.counts— the full disposition: evaluable, transitioned, censored, unresolved.conditional_on— the conventions that produced the number.methodology— version, snapshot date, source and citation.
Errors and limits
| Code | Meaning |
|---|---|
| 401 | Missing, malformed, revoked or invalid key. |
| 429 | Monthly quota exhausted. Used and permitted counts are in the body; quota is on every successful response too. |
| 501 | A convention we do not implement. Returned rather than silently serving a figure computed under a different one. |
The demonstration worth running
The same slice, one parameter changed:
GET /v1/base-rates?therapeutic_area=ophthalmology
→ rate 0.177 n 265
GET /v1/base-rates?therapeutic_area=ophthalmology&censoring_rule=quiet_dropped
→ rate 0.573 n 82
Honesty guarantees
- Thin cells refuse to quote. Below 20 evaluable programmes
a cell returns
suppressed: truewith a reason, rather than a confident-looking number over a hollow base. - Unverified is not failed. A Phase 2 whose registry status has not been confirmed in over two years is reported separately, never counted as a failed transition.
- Non-efficacy terminations leave the denominator. A trial stopped for funding, enrolment or reorganisation says nothing about the asset. The count is reported.
- Unimplemented options error. Requesting
path_by_pathimputation returns 501, never an unimputed figure wearing the wrong label.
Known limitations
Stated here rather than discovered later.
- Registry-only visibility. Phase 3 programmes registered solely in EU CTR, jRCT or ChiCTR are invisible to us, which biases our rates downward.
- Therapeutic-area rates are weak predictors of individual diseases. FDA authors (Miller, Rabinovitz & Kerr, Nat Rev Drug Discov 18:658, 2019) found individual-disease probabilities deviating more than ten percentage points from their therapeutic-area figure. Use the area rate as a prior, not a forecast.
- A phase transition is a business decision. Programmes stop for portfolio and financing reasons as well as for data.
- Our default counting unit is asset × sponsor, coarser than
the drug-indication path published reports use. Set
counting_unit=asset_sponsor_indicationfor closer comparability.
Citation
Aggregate Analysis of ClinicalTrials.gov (AACT) Database. Clinical Trials Transformation Initiative (CTTI). aact.ctti-clinicaltrials.org.