Loading the page.
Four endpoints live
Catalyst is building a computational substrate for human biology, starting with 117,642 entities and 1,385findings in a provenance-aware knowledge graph. The API serves those views to a program rather than to a browser. Four read endpoints are live: the relations of one node, findings and hypotheses separately, with the record and the licence on every row; the sources the graph is built from; the reactions a compound or protein takes part in; and the compounds one compound can become through them.
documented returns its findings, each with its evidence_strength, quoted sentence and paper. inferred returns what the reference databases state about it, each row a hypothesis labelled as one in the data, with the upstream record, its release and its licence. Filter by predicate, source and role; page with limit (to 200) and offset; the totals are exact. Serves the Core release tier only — sources whose terms are public domain or attribution — and says how many rows it withheld and from which sources. Sixty requests a minute per caller; the whole graph is the export.evidence_strength is a field on every finding and a filter on the request. Its value is one of five named levels, strongest first: strong, moderate, limited, very_limited, insufficient. As a filter it is a floor, not an exact match: evidence_strength=moderate returns moderate and strong findings. Relations from the reference databases carry no evidence strength and are not filtered by it. A request that still sends the old grade parameter is refused with a 400 whose message names the replacement (evidence_strength=moderate), rather than answered unfiltered.inferred: what a reference database states, a hypothesis about the body rather than a finding. The one exception rides beside it, never in place of it: conversion is set when a finding in the graph reports the same conversion, and carries that finding’s own evidence_strength and permalink. Page with limit (to 100) and offset. A reaction has no evidence strength, so there is nothing to filter by it.to, every compound it reaches, paged with limit (to 100) and offset; with it, whether that one compound is reached and by which route. Each route names the reactions that witness it, their catalysts and compartments, and how many routes there are. Every route is inferred: what the body could do by these public releases, never a report of what it does. Each answer carries a coverage sentence saying what was searched, so “not built yet” and a currency species excluded by design are never read as “not reachable”.All four are read-only and share the per-caller rate limit stated for relations. Reactions and reach refuse the retired grade parameter with a 400 rather than ignore it.
Answering a question about a compound with something that carries an evidence strength and a citation, rather than with a confident sentence assembled from search results.
Asking what has been measured against an endpoint, with what strength of evidence, in which populations — and getting the null results in the same response as the positive ones.
Building a product that needs to say something defensible about a supplement, without becoming a curation team first.
The rows are the cheap part. What takes the time is everything that decides whether a row is allowed to exist, and it is the part a scraper cannot copy because it is not in the output.
Not a citation — the quoted span, stored on the row and rendered beside it. Of 9,162 papers read so far, 836 sources carry a finding that survived. A claim whose quote does not support it on its own is rejected, which is a rule that costs findings rather than one that produces them.
Study design sets a ceiling, weaknesses in the row lower it, and one narrow bonus can raise it. No author sets the strength of their own evidence and no confidence score is an input. Two people running the same rows get the same result.
31 predicates, and adding another requires a written decision. A schema that grows to fit whatever arrived cannot be queried consistently, which is what makes most extracted graphs unusable at the second question.
A connection assembled through shared biology is labelled a hypothesis in the data, not only in the rendering. A consumer can ask for one, the other, or both, and can never be handed an inference that looks like a report.
A search that found nothing is recorded as having found nothing. That is different from a question nobody asked, and the difference is queryable.
Described so it can be argued with before it is built, not as a commitment to a date. None of these three is live yet. They will share the relations endpoint’s response shape and its evidence_strength filter.
Until it exists, the whole graph is already readable as documents: every entity has a stable URL, every finding is rendered as text beside its figure, and llms.txt describes the surface for an agent reading the site directly.
The same rows as a file, with provenance columns intact.
The function, its ceilings and every penalty, with the distribution it has produced.
What the reference layer is built from, and the terms each part carries.