For machines
This corpus is built to be read by language models and agents as well as by people. The subpoenaed records were published as PDFs — many of them scans with no text layer at all — which made them effectively unsearchable. Here they are OCRed, segmented into individual communications, and served as structured markdown and JSON, with a citation on every record.
Read this before reporting anything
The failure modes of this corpus are specific and known. An interface
that hands back bare numbers will reproduce them at scale, so every JSON
response carries the caveat that applies to it, and
/api/guidance states the rules in
machine-readable form.
- Statements are graded. Only
grade: beliefmay be attributed to a person as their own view — about 38% of extracted statements are quoted, paraphrased, sarcastic, hypothetical or draft wording. Never report a total claim count. - Absence is not deletion. A missing record may have been withheld, never existed, belonged to a custodian outside these subpoenas, or sit in a package not yet ingested.
- Density is not importance. The busiest months are retrospective argument; the decisive weeks are nearly empty. Scope by date when the question is about when something was first known.
- Chat recipients are inferred from channel membership, not per-message addressing.
- Quote from the cited page, not from a snippet.
Start here
| Resource | What it is |
|---|---|
/llms.txt |
Plain-text orientation: what the corpus is, how to read it without misreporting it, and where everything lives |
/api |
Endpoint discovery as JSON |
/api/openapi.json |
OpenAPI 3.1 description for tool-calling agents |
/api/guidance |
The caveats above, keyed and machine-readable |
/okf/index.md |
The analysis as an OKF v0.2 bundle — 764 cross-linked markdown concepts |
The OKF bundle
The derived analysis is published as an Open Knowledge Format v0.2 bundle: a directory of markdown files with YAML frontmatter, no tooling required. It is the right entry point for an agent that should read rather than query — start at the root index and follow links.
| Collection | Concept type | Carries |
|---|---|---|
/okf/people/ | Person |
engagement, correspondents, topics, statement timeline with page citations |
/okf/topics/ | Topic |
principal voices, chronological statements, the terms that trigger the tag |
/okf/sources/ | Released Document Package |
page counts, OCR recovery, SHA-256, link to the original PDF |
/okf/outlets/ | Media Outlet |
articles, circulated links, press-direction passages |
/okf/organizations/ | Organization |
affiliated people, documents mentioning the body |
/okf/conversations/ | Conversation |
full transcripts of substantial sessions and threads |
/okf/glossary.md | Glossary |
133 acronyms, harvested from the records themselves |
Every concept carries sources provenance pointing at the
released package it derives from, generated naming the pipeline
that produced it, and bundle-relative links so an agent can traverse
people → topics → sources without a database.
Endpoints
| Endpoint | Parameters | Returns |
|---|---|---|
GET /api/search |
q, mode (keyword | hybrid | semantic),
limit |
Ranked passages with citations. Accepts natural questions. |
GET /api/doc/{doc_id} | context |
One record in full, participants, topics, citation |
GET /api/person/{person_id} | grade |
Engagement metrics, statement strata, graded statements |
GET /api/topic/{topic_id} | — | Principal voices and a statement timeline |
GET /api/timeline |
person, topic, since, until, limit |
Dated events in order, with citations |
GET /api/coverage | from, to (YYYY-MM) |
Per-source monthly counts and each package's date window |
GET /api/sources | — | Released packages with SHA-256 and original PDF URLs |
GET /api/page/{source_id}/{page_no} | raw |
Our OCR text of one page — what a citation actually points at. ?raw=1 returns the uncleaned extraction as an audit trail. |
GET /api/pages/search | q, limit |
Searches OCR text page by page rather than record by record — reaches duplicate copies and pages no record covers. Use it to decide whether an absence from /api/search is real. |
GET /api/glossary | — | Acronyms and expansions |
Search modes
keyword is literal BM25 — best for exact identifiers such as a
Bates number or a grant ID, and the only mode that highlights matches.
hybrid fuses BM25 with dense retrieval by reciprocal rank
fusion and is the right default for a question, because the records rarely
use a question's vocabulary: the most important passage in this corpus
describes an engineering concern without ever using the word “engineered”.
semantic ranks by meaning alone.
Example
curl "https://randpaulcovid.org/api/search?q=did+anyone+privately+think+the+virus+was+engineered&mode=hybrid&limit=2"
{
"query": "did anyone privately think the virus was engineered",
"acronym_expansion": [
"engineered -> inserted, furin cleavage site, \u2026"
],
"count": 2,
"results": [
{
"doc_id": "baric_ti:utt:01125",
"date": "2026-04-10T09:00:00",
"type": "transcript_segment",
"subject": null,
"snippet": "\u2026",
"citation": "Baric Transcribed Interview (Redacted), pp.131-133",
"url": "https://randpaulcovid.org/doc/baric_ti:utt:01125"
}
]
}
A person, with strata
curl "https://randpaulcovid.org/api/person/anthony_s_fauci"
{
"person_id": "anthony_s_fauci",
"name": "Anthony S. Fauci",
"engagement": {
"authored": 2368,
"substantive": 2148,
"threads": 52,
"active_days": 2077
},
"statement_strata": {
"belief": 1145,
"context_required": 143,
"excluded": 730,
"total": 2018
},
"statements_shown_at_grade": "belief",
"statements": [
{
"ts": "2020-01-31T00:00:00",
"grade": "belief",
"attribution": "speaker_own",
"quote": "\u2026",
"doc_id": "fauci_diary:entry:00026",
"page_no": 12
}
],
"caveats": [
"Extracted statements are not necessarily the speaker's own view\u2026"
]
}
Note statement_strata. Reporting the total as this person's
statements would misrepresent them — only the belief count is
their own substantive voice.
Terms
Read-only and unauthenticated. Please be considerate with request rates. Source documents are public records published by the Committee; this site hosts none of them and adds none. If you build on this, cite the original PDF on paul.senate.gov, not this site.