For publishing pipelines

Automated fact-checking for your publishing pipeline.

Fact-check articles, posts, and AI-drafted content automatically — before they go live. Lenz verifies every factual claim against real independent sources and returns verdicts your pipeline can act on: auto-approve what holds up, flag the rest for human review.

Human review doesn't scale with content volume. Automated verification does — and it leaves an audit trail.

The pipeline, end to end.

Lenz supplies the verdicts. Your gate applies your thresholds.

  1. Draft lands

    An article, a product description, an AI-written summary — anything headed for publication enters the pipeline.

  2. Extract the claims

    POST /extract splits the draft into atomic, verifiable claims — opinions and meta-commentary skipped, pronouns resolved, compound sentences split. Free at 1,000/day.

  3. Verify each claim

    POST /assess returns a 3-model panel verdict per claim in ~5-10s; escalate low-confidence claims to the full POST /verify pipeline for a sourced verdict with citations.

  4. Your gate decides

    Your pipeline applies your thresholds: high-confidence content auto-approves and flows through; flagged claims route to a human reviewer with the evidence attached. The decision stays yours — Lenz supplies the verdicts and the receipts.

  5. Publish, with a record

    What ships, ships verified — and every verdict keeps its full audit trail for editorial accountability.

Built for async volume.

Submit with webhook_url=... and Lenz POSTs the HMAC-signed result when each verification finishes — no polling loops in your worker. Bulk fact-checking runs through /assess at batch throughput; /verify handles the deep checks. Idempotency keys ship by default, so a retry never double-spends.

A publishing gate in 12 lines

Python pip install lenz-io

# pre-publish gate: verify the draft, apply YOUR threshold
from lenz_io import Lenz

client = Lenz(api_key="lenz_...")
claims = client.extract(text=draft).identified_claims
r = client.assess(text=" ".join(claims))

flagged = [c for c in r.claims
           if c.verdict in ("False", "Misleading") or c.confidence == "low"]

if flagged:
    send_to_review(draft, flagged)   # your reviewer, with evidence attached
else:
    publish(draft)                   # your gate, your call

TypeScript SDK too: npm install lenz-io. Webhooks replace the wait in production.

Accountability you can show.

Every verification ships the full trace — framing, sources graded for authority, citations, the adversarial debate, and the reviewers' reasoning. When someone asks how a published piece was checked, the answer is a record, not a recollection.

Pricing

Start free, no card required.

Free

$0

/extract · 1,000/day
/assess · 100/mo
/verify · 10/mo

Wire the gate in today, zero spend.

Pro

$99/mo

/assess · 5,000/mo
/verify · 500/mo
/ask · 1,000/mo

Self-serve. $999/yr annual.

Enterprise

Custom

Volume, SLA, white-label.

Talk to us →

Frequently asked questions

Between draft and publish: /extract splits the draft into verifiable claims, /assess or /verify checks each one, and your pipeline applies its own thresholds — high-confidence content flows through, flagged claims route to a human reviewer.

No. Lenz returns verdicts, scores, and confidence per claim, with cited sources. Your pipeline owns the approve-or-flag decision, using whatever thresholds fit your risk tolerance.

Verification runs asynchronously: submit with a webhook_url and Lenz POSTs the signed result when each finishes. /assess handles bulk throughput at ~5-10s per call; /verify runs the deep pipeline on the claims that matter.

Every verification ships a complete audit trail — sources, citations, the adversarial debate, and reviewer reasoning. Editorial accountability becomes a record you can show, not a process you describe.

Yes — the Lenz Workbench is a browser surface where a reviewer can submit claims, read the full evidence behind each verdict, and keep a library of checked claims. No code required.

By use case

Publish verified. Automatically.

Self-serve from day one. Free tier, no card required.