Skip to content

For software

Everything on this site is also a file: JSON records, agent briefs, Croissant, JSON-LD, and search and agent endpoints. No key, no rate limit.

Read limitations before capabilities

The failure this resource exists to prevent
An agent that ranks datasets by cohort size and then asks about outcome walks into cohorts like FM-AD: 18,004 patients with a vital status field filled for 100% of them and informative for none. It supports no survival analysis at any sample size. Nothing in its catalog entry says so.

Every agent brief puts constraints first for that reason, and every record carries limitations graded by severity. A blocking limitation rules out a class of analysis however the model is specified. Reading them costs one request.

Two flags carry most of the decision weight, both measured from field completeness rather than taken from a description: has_survival_endpoint and has_treatment_response. The analysis_fit array on /api/v1/datasets/{id} extends them to six analyses; its unknown status means the field was not measured for that record and must not be read as absent. A third, has_citable_accession, matters differently: when it is false, reuse could not be traced at all, so a missing reuse count says nothing about the dataset.

Files and endpoints

Everything is a static JSON or Markdown file with permissive CORS. No key, no rate limit, no account. A resource meant to resolve in five years should not depend on a running service.

PathContents
/data/index.jsonOne slim row per dataset with the measured capability flags. Start here.
/data/datasets/{id}.jsonThe complete record, including an evidence array on every substantive claim.
/api/v1/datasets/{id}The same record with analysis_fit added: six analysis verdicts (supported, limited, blocked, or unknown when not measured) derived from field completeness.
/data/agent/{id}.mdPlain-language brief for a language model. Constraints first, deliberately.
/data/croissant/{id}.jsonMLCommons Croissant, carrying per-field completeness and blocking limitations.
/data/jsonld/{id}.jsonldschema.org/Dataset with DCAT terms, for catalog and search-engine ingest.
/data/facets.jsonBrowse dimensions with counts.
/data/search.jsonFree text per dataset, split out of the index so the browse page need not ship it. The same text is on index.json as search_text; prefer that one.
/data/questions.jsonEvery curated research question, flattened.
/data/reuse_gap_model.jsonCoefficients and diagnostics for the underexplored label, so it can be recomputed.
/data/stats.jsonCorpus-level statistics.
/llms.txtOrientation file following the llms.txt convention.
/openapi.jsonOpenAPI 3.1 description of the JSON surface.

Dataset agent

GET /api/v1/agent?q=... · POST /api/v1/agent {"q": "..."}

Describe an analysis in plain language. The response is a ranked shortlist with the reasons each dataset fits and the blockers to check first. Retrieval, the capability checks and the ranking are deterministic, and that is the whole answer whenever the leading dataset meets every need the request stated. Only when none does, so the order turns on which caveat matters most, is the shortlist handed to a language model to rank and explain - and only if the server has an OPENROUTER_API_KEY (deepseek/deepseek-v4.1-flash unless OPENROUTER_MODEL says otherwise). mode says which wrote the wording, and on a rules answer note says why no model did.

Query endpoint

GET /api/v1/search

Capability-first filtering. Parameters: q, modality, site, access, repository, survival, treatment_response, underexplored, showcase, min_cases, min_modalities, limit.

A side-by-side comparison is also a URL: /compare?ids=a,b,c, up to four dataset ids.

# Cohorts where treatment-response analysis is actually possible
curl "/api/v1/search?treatment_response=true&survival=true&min_cases=200"

# Under-used datasets carrying a scarce measurement
curl "/api/v1/search?underexplored=true&modality=ubiquitylome"

# Then read the constraints before planning anything
curl "/data/agent/gdc-fm-ad.md"

Runnable workbooks

15 dataset pages carry a workbook executed end to end against the live public APIs. Each ships a receipt recording when it ran, with which package versions, how long it took and a hash of its outputs. So “executed” is a claim you can check.

Audit whether a dataset can answer your research question

Measures clinical completeness and returns a verdict for six analysis classes.

Survival from open data, endpoint derived correctly

Includes the three-field follow-up derivation that a naive version gets wrong.

Treatment response, after checking the field is real

Separates genuine response categories from disease-status codes.

Find and use the scarcest measurements

Ranks analytical fractions by scarcity across the Proteomic Data Commons.

Join the same patients across two repositories

Patient-level intersection of GDC molecular data with IDC imaging.

Select a dataset the way an agent should

Contrasts size-ranked with capability-ranked selection, then emits a task brief.

Source lives in workbooks/python/ as plain scripts in the # %% cell format; executed notebooks and receipts are in workbooks/executed/. Notebooks are build artifacts, not source, because notebook JSON is unreviewable in a diff.

What an agent should not conclude from this data

Full methodology, including where the whole approach is weak, is on the Methods page.