Skip to content
Veritas

Developers

Integrate the engine, honestly

The same signed engine is reachable from Claude, the CLI, the REST API, and the Python SDK. Every surface below is labelled with its real maturity — and the exact boundary of what has been tested — so nothing reads as more finished than it is.

Live API base: https://veritas-backend-production-0aab.up.railway.app · public certificates: https://veritas-certificates-production.up.railway.app

Live surfaces

Live · user-ready

User-ready today: Claude via MCP, the CLI, the REST API, the web console, the Python SDK, the public signed certificate, and the reproducibility export.

REST API

curl
# 1. Sign up + get a token (OAuth2 password flow)
curl -X POST https://veritas-backend-production-0aab.up.railway.app/auth/signup \
  -H "Content-Type: application/json" \
  -d '{"email":"you@lab.org","password":"...","org_name":"Your Lab"}'

TOKEN=$(curl -s -X POST https://veritas-backend-production-0aab.up.railway.app/auth/token \
  -d "username=you@lab.org&password=..." | jq -r .access_token)

# 2. List bundled samples (no data of your own needed)
curl -s https://veritas-backend-production-0aab.up.railway.app/samples | jq '.samples[].id'

# 3. Open a signed certificate — NO AUTH required
curl -s https://veritas-backend-production-0aab.up.railway.app/verify/PUBLIC_ID | jq '.overall_verdict, .signature_valid'

Public certificate + reproducibility export

curl
# Anyone can re-check a certificate by its public id — no account.
# The endpoint reconstructs the engine certificate and recomputes its signature.
curl -s https://veritas-backend-production-0aab.up.railway.app/verify/PUBLIC_ID

# Download the reproducibility bundle (pins data, spec, deps) and reproduce:
curl -L -o bundle.zip https://veritas-backend-production-0aab.up.railway.app/verify/PUBLIC_ID/bundle
unzip bundle.zip && python reproduce.py   # asserts the signature matches

Python SDK

python
# The Python SDK is 'veritas-client' — a thin, typed client over the API.
# NOTE: it is NOT the unrelated PyPI package named 'veritas'. Install from source:
pip install ./backend/sdk/python

from veritas_client import VeritasClient

vc = VeritasClient("https://veritas-backend-production-0aab.up.railway.app")
vc.login("you@lab.org", "...")
org  = vc.my_orgs()[0]
proj = vc.create_project(org["id"], "Microglia study")
ds   = vc.upload_dataset(org["id"], proj["id"], "microglia.h5ad", fmt="h5ad")
an   = vc.create_analysis(org["id"], proj["id"], "condition-B DE",
                          dataset_id=ds["id"],
                          spec={"findings": [{ "gene": "GENE_1999",
                                "group_col": "condition", "group_a": "A",
                                "group_b": "B", "expected_direction": "up" }]})
# launch the async run, then poll for the engine's signed certificate
run  = vc.verify(org["id"], an["id"])
cert = vc.wait_for_certificate(org["id"], run["id"])
print(cert["overall_verdict"], cert["signature"])

CLI

shell
# The CLI ships with the engine package (entry point: 'veritas').
pip install -e .          # from the repo root (src layout)

# Verify a finding on any common single-cell artifact — zero code edits.
# DATA may be .h5ad, .loom, .rds (Seurat), a 10x MTX dir, or a raw matrix + --meta.
veritas verify microglia.h5ad \
  --map condition=diagnosis:AD/Control --map donor=Donor \
  --spec finding.json --bundle ./out

# The signed certificate prints to stdout; --bundle writes a reproducible zip.

Claude via MCP

mcp
# Claude via MCP — the connector exposes the SAME engine as a tool.
# Remote (hosted) endpoint:
https://veritas-mcp-production.up.railway.app/mcp

# Or run the local stdio server (Claude Code / Desktop mcp.json):
{
  "mcpServers": {
    "veritas": {
      "command": "python",
      "args": ["-m", "veritas.mcp_server"],
      "env": { "PYTHONUNBUFFERED": "1" }
    }
  }
}
# Claude may PROPOSE adversarial attacks; the engine executes them and owns the
# verdict. Claude never produces a statistic or a verdict.

Tested-local surfaces

Tested · local

Work today in a local setup, but are not published packages. The Jupyter magic is loaded from source via PYTHONPATH / %load_ext, not installed from a registry.

Jupyter %veritas magic

notebook
# Tested LOCAL notebook integration (NOT a published pip package).
# Put integrations/jupyter/veritas_magic.py on your PYTHONPATH, then:
%load_ext veritas_magic

# Verify a finding on an AnnData already in the kernel — renders the
# certificate inline. The engine computes every number; the magic only formats.
%veritas adata gene=LYZ group_col=cell_type \
         group_a=B_cell group_b=CD14_monocyte direction=up

Studio (static)

A static analysis studio surface.

Streamlit dashboard

The demo trust-map visual, run locally.

Reviewer-report generator

Generates a reviewer-facing report from a certificate.

Developer preview

Developer preview · source

Real source exists, but these are not installable products yet. We name the exact tested boundary rather than imply a finished package.

GitHub Action / CI

A CI integration exists in source form. It is not a published, installable action.

Do not use pip install veritas — the PyPI name veritas is an unrelated library. The engine installs from this repo (pip install -e .) and the SDK is veritas-client.

R SDK + RStudio addin

Real R client + RStudio addin source lives in the repo, but has not been verified against a live R runtime. Treat as source integration, not a released package.

Read a certificate over the wire

The public /verify endpoint needs no account — fetch any certificate as JSON and re-check its signature yourself.