API reference
Every endpoint of the oncolabels JSON API, with its parameters, an example and the fields it returns. The reference is generated from the API's own schemas, so it always matches what the API does.
Overview
- Address
https://oncolabels.com/api/v1- Requests
- GET only, with the parameters in the query string or the path.
- Responses
- JSON in UTF-8. Each answer names the dataset version and the date of its EMA data.
- Limits
- 120 requests a minute from one network. Past that the API answers 429 for the rest of the minute.
- Caching
- An answer can be up to five minutes old.
- Errors
- 400 lists the invalid parameters, 404 says how to ask instead, and 429 means too many requests.
- Other sites
- Open to requests from any website (CORS).
- Description
- OpenAPI 3.1.0, for code generators and custom GPT actions.
- Licence
- The data is under CC BY 4.0. Credit oncolabels and the European Medicines Agency, and say that the entries are generated by AI.
Search indications
GET/api/v1/indications
Find the EU-approved indications of targeted cancer therapies (EMA SmPC section 4.1) by tumour, biomarker, line of therapy, setting or medicine. `query` takes free text, read like the oncolabels search box ("NSCLC EGFR 2nd line", "HER2-low breast", "adjuvant melanoma"); the structured fields are added to it. Give a PD-L1 score to see which cut-offs it meets. A histology with a tumour keeps the approvals the label allows for it, and those for any histology. The result says how the query was read; if words were not understood, rephrase or look the term up with list_values. Approvals without a line restriction count in every line.
| Parameter | Type | Description |
|---|---|---|
q | string | Free text: tumour, biomarker, line, setting or medicineup to 300 characters |
tumour | string | Tumour type, e.g. 'NSCLC', 'colorectal cancer', 'AML'up to 120 characters |
histology | string | Histology within the tumour, e.g. 'squamous', 'adenocarcinoma', 'non-squamous', 'clear cell', 'medullary'up to 60 characters |
biomarker | string | Biomarker, optionally with the alteration, e.g. 'EGFR', 'BRAF V600E', 'HER2-low', 'MSI-H'up to 120 characters |
line | 1L | 2L | 3L+ | Line of therapy: 1L, 2L or 3L+ (approvals without a line restriction are included) |
setting | neoadjuvant | adjuvant | perioperative | maintenance | induction | consolidation | early | locally-advanced | advanced | metastatic | Treatment phase or disease stage |
medicine | string | INN or brandup to 120 characters |
pd_l1_system | TPS | CPS | TC | IC | TAP | The scoring system of a PD-L1 score to compare with the cut-offs |
pd_l1_value | number | A PD-L1 score to compare with the cut-offs |
detail | concise | full | full adds the label sentence, cut-off, scoring system and SmPC linkdefault concise |
limit | integer | 1 to 100, default 25 |
offset | integer | 0 to 9007199254740991, default 0 |
Example
curl "https://oncolabels.com/api/v1/indications?q=HER2%20gastric&limit=3"
Response fields
understoodarray of objectsHow the query was readkindstringvaluestringfromstring
not_understoodarray of stringWords that matched nothingtotalintegeroffsetintegernext_offsetinteger or nullhintstring or nullentriesarray of objectsidstringStable entry ID; pass it to get_indication for the label sentencemedicinestringINN, with the EU brand names in bracketstumourstringhistologystring or nullThe histology the label limits the indication to within the tumour, e.g. 'Squamous cell carcinoma only'; null when any histology qualifiessettingstringLine of therapy or treatment phase, and disease stagerequirementstringThe biomarker condition in the label, or 'no biomarker required'biomarker_must_be_absentbooleanThe label requires the biomarker to be absent (EGFR/ALK-negative, RAS wild-type)other_biomarkersarray of stringFurther biomarkers the label requires or excludes, e.g. 'HER2-positive' next to PD-L1 CPS ≥ 1; searches find the entry under these tooregimenstringconditionsstring or nullHistology, prior therapy, eligibility and follow-on treatment named in the labelconditional_approvalbooleanneeds_reviewbooleanThe label is ambiguous for this entry: check the SmPCpatient_scoremeets the cut-off | scored differentlyOnly when the search gave a PD-L1 scorelinkstringThe entry on oncolabelstumour_as_labelledstringThe tumour in the label's words; several when entries of one product read alike (detail: full)label_sentencestring or nullThe SmPC section 4.1 sentence (detail: full)cut_offstring or nullscoring_systemstring or nullage_groupstringsmpcstring or nullProduct information PDF (detail: full)
datasetobjectversionstringema_data_ofstringDate of the EMA medicines data the dataset was built fromcheckedstringDay oncolabels last found EMA's data still matching the dataset (checked every morning)noticestring
One indication
GET/api/v1/indications/{id}
One entry in full: the SmPC section 4.1 sentence it was read from, every field, the product and its SmPC link. With include_trace, also how the entry was made: what each AI reader found and what the adjudicator decided where they disagreed, with its reasons.
| Parameter | Type | Description |
|---|---|---|
idrequiredin the path | string | Entry ID from search_indications or get_drugup to 40 characters |
include_trace | boolean | default false |
Example
curl "https://oncolabels.com/api/v1/indications/6772c64cec6d4d1e"
Response fields
entryobjectidstringStable entry ID; pass it to get_indication for the label sentencemedicinestringINN, with the EU brand names in bracketstumourstringhistologystring or nullThe histology the label limits the indication to within the tumour, e.g. 'Squamous cell carcinoma only'; null when any histology qualifiessettingstringLine of therapy or treatment phase, and disease stagerequirementstringThe biomarker condition in the label, or 'no biomarker required'biomarker_must_be_absentbooleanThe label requires the biomarker to be absent (EGFR/ALK-negative, RAS wild-type)other_biomarkersarray of stringFurther biomarkers the label requires or excludes, e.g. 'HER2-positive' next to PD-L1 CPS ≥ 1; searches find the entry under these tooregimenstringconditionsstring or nullHistology, prior therapy, eligibility and follow-on treatment named in the labelconditional_approvalbooleanneeds_reviewbooleanThe label is ambiguous for this entry: check the SmPCpatient_scoremeets the cut-off | scored differentlyOnly when the search gave a PD-L1 scorelinkstringThe entry on oncolabelstumour_as_labelledstringThe tumour in the label's words; several when entries of one product read alike (detail: full)label_sentencestring or nullThe SmPC section 4.1 sentence (detail: full)cut_offstring or nullscoring_systemstring or nullage_groupstringsmpcstring or nullProduct information PDF (detail: full)
productobjectbrandstringema_product_numberstring or nullsmpc_enstring or nulllabel_updatedstring or null
traceobject or nulldatasetobjectversionstringema_data_ofstringDate of the EMA medicines data the dataset was built fromcheckedstringDay oncolabels last found EMA's data still matching the dataset (checked every morning)noticestring
What to test
GET/api/v1/tests
List the biomarkers that decide eligibility for at least one EU-approved targeted therapy in a tumour (optionally a line or setting), grouped by how a pathology lab tests them, with the cut-offs and the medicines each result opens. Testing routes are curated from pathology practice, not from the labels.
| Parameter | Type | Description |
|---|---|---|
tumourrequired | string | Tumour type, e.g. 'metastatic colorectal cancer', 'NSCLC'up to 120 characters |
histology | string | Histology within the tumour, e.g. 'squamous', 'adenocarcinoma'up to 60 characters |
line | 1L | 2L | 3L+ | |
setting | neoadjuvant | adjuvant | perioperative | maintenance | induction | consolidation | early | locally-advanced | advanced | metastatic |
Example
curl "https://oncolabels.com/api/v1/tests?tumour=colorectal%20cancer"
Response fields
tumourstringgroupsarray of objectshowstringTesting routetestsarray of objectsbiomarkerstringmethodstringresultstringWhat result the therapies needcut_offsarray of stringmedicinesarray of stringonly_tumour_agnosticboolean
datasetobjectversionstringema_data_ofstringDate of the EMA medicines data the dataset was built fromcheckedstringDay oncolabels last found EMA's data still matching the dataset (checked every morning)noticestring
One drug
GET/api/v1/medicines/{name}
Everything oncolabels holds on one medicine: all EU-approved indications, target and mechanism of action (SmPC section 5.1), approval status, ATC code, biosimilars and generics, and links to the SmPC and EPAR.
| Parameter | Type | Description |
|---|---|---|
namerequiredin the path | string | INN or EU brand, e.g. 'osimertinib' or 'Tagrisso'up to 120 characters |
Example
curl "https://oncolabels.com/api/v1/medicines/osimertinib"
Response fields
medicinestringproductsarray of objectsbrandstringholderstring or nullatcstring or nulltargetstring or nullmechanismstring or nullauthorisedstringlabel_updatedstring or nullconditional_approvalbooleanorphanbooleansmpc_enstring or nullsmpc_destring or nulleparstring or nullbiosimilars_and_genericsarray of string
totalintegerindicationsarray of objectsidstringStable entry ID; pass it to get_indication for the label sentencemedicinestringINN, with the EU brand names in bracketstumourstringhistologystring or nullThe histology the label limits the indication to within the tumour, e.g. 'Squamous cell carcinoma only'; null when any histology qualifiessettingstringLine of therapy or treatment phase, and disease stagerequirementstringThe biomarker condition in the label, or 'no biomarker required'biomarker_must_be_absentbooleanThe label requires the biomarker to be absent (EGFR/ALK-negative, RAS wild-type)other_biomarkersarray of stringFurther biomarkers the label requires or excludes, e.g. 'HER2-positive' next to PD-L1 CPS ≥ 1; searches find the entry under these tooregimenstringconditionsstring or nullHistology, prior therapy, eligibility and follow-on treatment named in the labelconditional_approvalbooleanneeds_reviewbooleanThe label is ambiguous for this entry: check the SmPCpatient_scoremeets the cut-off | scored differentlyOnly when the search gave a PD-L1 scorelinkstringThe entry on oncolabelstumour_as_labelledstringThe tumour in the label's words; several when entries of one product read alike (detail: full)label_sentencestring or nullThe SmPC section 4.1 sentence (detail: full)cut_offstring or nullscoring_systemstring or nullage_groupstringsmpcstring or nullProduct information PDF (detail: full)
datasetobjectversionstringema_data_ofstringDate of the EMA medicines data the dataset was built fromcheckedstringDay oncolabels last found EMA's data still matching the dataset (checked every morning)noticestring
What's new
GET/api/v1/changes
Changes since a date: medicines newly authorised in the EU, product information updates, and what changed in oncolabels' entries (indications added, changed or removed). Defaults to the last 90 days.
| Parameter | Type | Description |
|---|---|---|
since | string | YYYY-MM-DDa date as YYYY-MM-DD |
limit | integer | 1 to 100, default 30 |
Example
curl "https://oncolabels.com/api/v1/changes?since=2026-08-07"
Response fields
sincestringnew_medicinesarray of objectsmedicinestringbrandstringauthorisedstringtumoursarray of string
label_updatesarray of objectsmedicinestringbrandstringupdatedstring
entry_changesarray of objectsdatestringmedicinestringaddedarray of stringchangedarray of stringremovedarray of string
datasetobjectversionstringema_data_ofstringDate of the EMA medicines data the dataset was built fromcheckedstringDay oncolabels last found EMA's data still matching the dataset (checked every morning)noticestring
Known terms
GET/api/v1/values/{kind}
The tumour types, histologies, biomarkers, medicines, lines of therapy or settings oncolabels knows, with how many entries each has. Use it when a search term is not understood.
| Parameter | Type | Description |
|---|---|---|
kindrequiredin the path | tumours | histologies | biomarkers | medicines | lines | settings |
Example
curl "https://oncolabels.com/api/v1/values/biomarkers"
Response fields
kindstringvaluesarray of objectsvaluestringlabelstringentriesinteger or nullnotestring or null