The whole corpus is published as static files under /api/v1/ with permissive CORS: JSON per entity and per kind, one-line-per-record NDJSON, CSV for spreadsheets, and a JSON Schema. No key, no rate limit beyond the CDN. Licence CC BY-NC 4.0.
The data are copyright OnCo and free for individual and educational use, including academic and non-profit use, under CC BY-NC 4.0, with the attribution “Data from OnCo (onco.cc)”: name OnCo and link to onco.cc wherever the data or text derived from it appears, for example Data from OnCo (onco.cc), CC BY-NC 4.0. Commercial use (inside a paid product or service, advertising-funded redistribution, or a company data pipeline) must contact us to pay for the data; the same terms apply to the API, the files and the CLI. Logos remain their owners' trademarks and molecule structures keep their PubChem and RCSB terms. The same notice is in /api/v1/meta.json, as the first line of every CSV and inside every JSON download from the site's tables.
| Path | Contents |
|---|---|
| /api/v1/all.json | All 19,545 entities, fully resolved with defaults, plus an incoming map of backlinks per id. |
| /api/v1/all.ndjson | The same entities, one JSON object per line with its route, for streaming tools (jq -c, DuckDB, pandas read_json(lines=True)). |
| /api/v1/schema.json | JSON Schema (draft 2020-12) of one entity, generated from the Zod schema that validates the corpus at build time. |
| /api/v1/openapi.json | OpenAPI 3.1 description of every file here and the feeds, generated at build time from the same layout that writes them. |
| /api/v1/search.json | Compact documents (id, kind, name, tldr, route) used by the site search. |
| /api/v1/cancers.json · .csv | 474 cancers. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/fronts.json · .csv | 20 fronts. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/technologies.json · .csv | 765 technologies. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/targets.json · .csv | 1,674 targets. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/drugs.json · .csv | 1,088 drugs. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/companies.json · .csv | 1,244 companies. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/institutions.json · .csv | 726 institutions. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/pathways.json · .csv | 109 pathways. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/terms.json · .csv | 1,227 terms. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/trials.json · .csv | 5,969 trials. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/pairings.json · .csv | 86 pairings. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/roadmaps.json · .csv | 38 roadmaps. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/ideas.json · .csv | 1,209 ideas. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/collections.json · .csv | 139 collections. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/people.json · .csv | 1,604 people. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/bottlenecks.json · .csv | 54 bottlenecks. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/key papers.json · .csv | 2,582 key papers. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/journals.json · .csv | 261 journals. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/biomarkers.json · .csv | 102 biomarkers. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/years.json · .csv | 174 years. The CSV flattens each record: lists of ids joined with “; ”, nested tables as JSON in the cell. |
| /api/v1/entities/<id>.json | One entity with its neighbours, e.g. tnbc.json, trop2.json. |
| /api/v1/my-cancers.json | Every cancer as id, name, route and hub group: the chooser list the site fetches on demand. |
| /api/v1/spotlight.json | The home page spotlight: one hero record per kind in the daily rotation, with the selection rule and the schedule. |
| /api/v1/ranking.json | Institution ranking rows with the score components. |
| /api/v1/meta.json | Build date, counts, schema version, the list of files and feeds. |
Every table on the site also has CSV and JSON buttons that export exactly the rows shown after filtering, and count what exists, and where exports its grid.
Atom 1.0 feeds for the parts of OnCo that move. Subscribe in any feed reader; the entries link back to the page and to the primary source.
| Feed | Contents |
|---|---|
| /feeds/changelog.xml Changelog | One entry per release of the site. |
| /feeds/regulatory.xml Regulatory events | Designations, filings, approvals, complete response letters, withdrawals and label changes, newest first (100). |
| /feeds/calendar.xml Readout calendar | Regulatory dates, advisory committees, expected readouts and congresses; expected dates are marked as editorial estimates. |
| /feeds/pulse.xml Research pulse | What the leading journals, regulators and news sources are saying, item by item with links. |
Each tagged version of OnCo is published as a GitHub release with the whole /api/v1/ tree attached as a tarball, the CSVs as a zip, the NDJSON, and SHA-256 checksums, so a paper or a pipeline can pin an exact snapshot. The repository carries a .zenodo.json so that Zenodo can archive each release and mint a DOI once archiving is switched on for the repository; until then, cite the release tag and commit.
OnCo contributors. OnCo: a public, cited map of oncology. Version <tag>, <date>. https://onco.cc (data CC BY-NC 4.0). https://github.com/judegomila/OnCo/releases/tag/<tag>The same files, two more ways in. onco is a command-line tool for terminals and shell pipelines; onco-mcp is a Model Context Protocol server that gives Claude, Cursor and other assistants the corpus as tools, with a citation on every fact. Both read /api/v1/ directly (no key, no checkout), run on Node 20 or later, and end every output with the attribution line. onco ask and the MCP ask tool run the same pipeline as Ask OnCo, so the three give the same cited answer.
| Command or tool | What it does |
|---|---|
| onco search <query> [--kind] | Word plus concept search, fused as the site does it; each hit says why it matched. |
| onco get <id|route> [--json] | One record: TL;DR, summary, key fields, connected records, sources. |
| onco list <kind> [--filter key=value] | Every record of a kind, filtered on any field. |
| onco ask "<question>" [--region UK] | The cited, templated Ask OnCo answer. |
| onco context <id> · onco kinds · onco export <kind> --csv|--json | Markdown context for a record, the kinds with counts, a kind as CSV or JSON. |
| MCP tools | search, get_entity, list_kind, ask, context, compare; resources onco://kinds and onco://kinds/{kind}; prompt onco-brief for a patient or clinician summary. |
# CLI
npx onco search "HER2-low breast cancer" --kind drug
npx onco get trastuzumab-deruxtecan
npx onco ask "What are the side effects of Enhertu?" --region UK
npx onco export cancer --csv > cancers.csv
ONCO_API=./out/api/v1 npx onco kinds # any copy of /api/v1, including a local build
# MCP: Claude Code
claude mcp add onco -- npx -y onco-mcp
# MCP: Claude Desktop or Cursor (claude_desktop_config.json, .cursor/mcp.json)
{ "mcpServers": { "onco": { "command": "npx", "args": ["-y", "onco-mcp"] } } }Source and full references: packages/onco-cli and packages/onco-mcp in the repository, and docs/ACCESS.md. A larger MCP server with biomarker matching, calendar and live trial lookup runs from a checkout with npm run mcp.
Every entity shares base fields (id, kind, name, aka, tldr, summary, status, asOf, wikipedia, links, tags) and relationship arrays (related, cancers, sections, technologies, targets, drugs, companies, institutions, pathways, terms, trials) holding ids. Kind-specific fields are documented in src/lib/schema.ts in the repository, which is the source of truth and is enforced at build time; schema.json is generated from it.
# one entity and its neighbouring products
curl -s https://onco.cc/api/v1/entities/trop2.json | jq '.entity.name, .neighbours.drug[].name'
# every approved product as CSV, in a spreadsheet or DuckDB
curl -sO https://onco.cc/api/v1/drugs.csv
duckdb -c "select name, modality, status from read_csv('drugs.csv', header=true, skip=1) where status='approved'"
# stream the whole corpus one record at a time
curl -s https://onco.cc/api/v1/all.ndjson | jq -c 'select(.kind=="trial") | {id, name, status}'