See what your AI is actually claiming. Verify the claims that matter.
Two API primitives. POST /extract pulls verifiable claims out of any
text — free, 1000 calls per key per day. POST /verify runs one
claim through a 7-model panel and returns a verdict with citations you can defend.
Use them together or alone.
OpenAPI 3.1 spec /api/v1/openapi.json →
Two primitives. Use them together or alone.
Extract the claims your model emitted. Verify the ones that matter.
POST /extract Free · 1000/day
# AI-generated brief in — atomic claims out brief = """ Albert Einstein won the 1921 Nobel Prize in Physics for his theory of general relativity. He developed the special theory of relativity in 1905 while working as a patent clerk in Bern. Born in Ulm in 1879, he emigrated to the US in 1933 and joined the Institute for Advanced Study. """ out = client.extract(text=brief) for c in out.identified_claims: print("-", c) # - Albert Einstein won the 1921 Nobel # Prize in Physics for his theory of # general relativity. # - Albert Einstein developed the special # theory of relativity in 1905 while # working as a patent clerk in Bern. # - Albert Einstein emigrated to the # United States in 1933.
Drop into CI tomorrow as “report what factual claims our AI made yesterday.” Zero spend, real signal.
POST /verify ~90s · 7-model panel
# verify the one that looks confident v = client.verify_and_wait( claim=out.identified_claims[0], ).verdict print(v.label, v.score, v.confidence) # → "false" 1.0 0.97 # The 1921 Nobel was awarded for the # photoelectric effect, not relativity. for s in v.sources[:2]: print(s.title, s.url) # → "Albert Einstein at UZH" # uzh.ch
A research desk of seven models works the claim. Returns a report with citations, not a similarity score.
Three ways teams plug us in.
Async runtime verification
Document or report pipelines that already take minutes. Agent checkpoints. Pre-send gates on outbound replies. Background grade passes on delivered output. ~90s fits inside any workflow that isn't token-streaming chat.
Pre-release / CI regression catching
Run your golden test set through /extract + /verify on every deploy. Catch hallucination regressions before they ship. /extract is the free entry point — wire it in today, before spending a euro.
Incident triage
A customer reported a bad answer. Paste it in, get back which claims are wrong, what the evidence says, and a citation trail you can send back to the customer.
Pricing
Self-serve from day one. Pay only for what runs the panel.
Free
$0
/extract · 1,000 calls/key/day
Prototype today, zero spend. No card required.
Pro
$99/mo
/verify · 500 verifications + 1,000 follow-ups/month
Self-serve. $999/yr annual.
10 lines from your terminal
The quickstart claim hits a pre-warmed cache so this returns in ~1.5s.
Python 3.9+
# pip install lenz-io from lenz_io import Lenz client = Lenz(api_key="lenz_...") v = client.verify_and_wait( claim="Einstein won the 1921 Nobel Prize " "for general relativity.", ) print(v.verdict.label, v.verdict.score) # false 1.0
TypeScript Node 18+
// npm install lenz-io import { Lenz } from "lenz-io"; const client = new Lenz({ apiKey: "lenz_..." }); const v = await client.verifyAndWait({ claim: "Einstein won the 1921 Nobel " + "Prize for general relativity.", }); console.log(v.verdict?.label, v.verdict?.score); // false 1.0
The boring infrastructure is taken care of.
Idempotency by default
A network drop after submit never spawns a duplicate task. The SDK auto-generates an Idempotency-Key per call.
Auto-retry on transient errors
5xx and 429 retried with exponential backoff. Retry-After honored.
HMAC-signed webhooks
Submit with webhook_url=..., Lenz POSTs the typed payload when done. LenzWebhooks.parse() verifies signatures in 4 lines.
Support-ready errors
Every error carries cause + fix + docs URL + a request_id you can quote on a ticket.