COVID-19 Records

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.

Start here

ResourceWhat 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.

CollectionConcept typeCarries
/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.mdGlossary 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

EndpointParametersReturns
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/coveragefrom, 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/searchq, 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/glossaryAcronyms 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.