- Integrations
- n8n
Add fact-checking to any n8n workflow.
Drop it in after an AI content step, before a send, or wherever a false claim would cause a problem. Verify (Deep) gives you a sourced verdict, score and citations back as structured JSON. Review Draft checks a whole draft in one step.
- NodeCommunity registry
- SetupLenz sign-in or API key
- OperationsNineteen, in five groups
- OutputStructured JSON
01What you can build
Anywhere content is generated, there’s a place to verify it.
Screen AI-written content before it publishes
Route by verdict to approve, revise, or escalate to your reviewers.
Verify claims before they feed downstream
Check what you extract from documents or web content before it reaches other systems or summaries.
Add a sourced step to content QA
Verify (Deep) returns the verdict, score and source URLs as structured fields, ready to branch on.
Queue low-confidence results for people
Send uncertain results to your reviewers, then continue automatically once they clear.
02Operations
Nineteen operations, each with its own JSON shape.
| Operation | Time | Returns |
|---|---|---|
| Claim · check something | ||
| Verify (Deep) | ~90 s | status, passed, verdict, confidence, lenz_score, key_finding, executive_summary, citations, suggested_rewrite, verification_id. Detailed below. |
| Assess (Fast) | ~15 s | status (ok | no_claim) and claims[], one entry per claim found, each with claim, verdict, confidence, passed and verification_url. No score, summary or citations. |
| Extract Claims | free | Takes a block of text, or a single public web page URL (http or https, nothing else in the field): Lenz reads the page, a Google Doc, a PDF (.pdf), a YouTube video’s transcript, or an image (.png, .jpg, .jpeg, .webp), up to its first 50,000 characters. Pages behind a login can’t be read. Returns the /extract response: claim, identified_claims and the rest of the public extract fields. |
| Verification · submitted and stored work | ||
| Get Status | — | The state of a submitted verification, by task_id, and its result once it completes. |
| Select Claims | — | Resolves a verification paused at needs_input: one verification per claim you pick, one item each. |
| Submit Batch | — | A batch of claims at once, without waiting: one item per task, each with its task_id. |
| Get | — | A stored verification, by verification_id. |
| Get Many | — | The verifications stored on your account, across all its keys. |
| List Related | — | Public verifications related to a given one. |
| Delete | — | Deletes one of your stored verifications. |
| Review · a whole draft, or its citations | ||
| Review Draft | 2–4 min | Checks a whole draft (up to 50,000 characters, or one public web page, Google Doc, PDF, YouTube video, or image by URL) in one step: finds its claims, quick-checks each, deep-checks the doubtful ones and, with Suggest Edits on, returns the smallest edits that fix the draft. outcome (clean | issues_found | incomplete | unchecked), passed, issues[] and credits.charged. |
| Check Citations | — | Checks whether each cited source says what the text attributes to it, from a text with its links, DOIs or [n] markers, or from statement-source pairs you list. 1 credit per citation checked; a source that could not be read is refunded. citation_issues[], worst first. |
| Get Review | — | A review by review_id, for one that outlasted the wait. |
| Get Citation Check | — | A citation check by citecheck_id. |
| Ask · follow-up questions | ||
| Send | — | answer: a grounded reply about a completed Verify (Deep) result, addressed by its verification_id. |
| Get History | — | The stored conversation for a verification, and how many follow-up questions are left. |
| Reset History | — | Deletes the stored conversation for a verification. |
| Account | ||
| Get Usage | — | The /me/usage response: your credit balance and the price of each call. |
| Get Webhook Secret | — | For a connection made by signing in: webhook_secret, the secret Lenz signs that connection’s webhook deliveries with. Run it once before you set a Webhook URL. |
Nodes saved before v0.1.10 keep the original flat list of five: Verify (Deep), Assess (Fast), Extract Claims, Ask Follow-Up (Send) and Check Usage (Get Usage).
03Verify (Deep) output
Branch on status. Then on passed.
- Check
statusfirstOnlycompletedcarries a verdict.needs_input,timeoutandfailedneed their own path. - Use
passedto approve or escalateThe ready-made boolean. Addverdictorlenz_scorefor a finer threshold. When no public record settles the claim,verdictreadsNo Public Recordandpassedandlenz_scorearenull: an answer that is neither a pass nor a fail, and not a False. Route it to your reviewers. - Send
key_findingto peopleOne sentence, sized for Slack or email.executive_summaryis the longer write-up;citationsis an array of sources, each with atitleand aurl. - Read
suggested_rewritebefore you use itThe claim with its wrong part corrected, written from the findings for a person to review. It is not verified itself, and it is empty when there is nothing to correct. - Keep
verification_idAsk → Send needs it, and it pulls the full reasoning trace from the API later: the node doesn’t carry the trace inline.
Verify (Deep) output · JSON
{
"status": "completed", // needs_input | timeout | failed
"passed": true, // True and Mostly True; null for No Public Record
"verdict": "Mostly True",
"lenz_score": 7, // 1–10; null for No Public Record
"confidence": "high", // high | medium | low
"key_finding": "…",
"executive_summary": "…",
"citations": [ { "title": "…", "url": "…" } ],
"suggested_rewrite": "", // not verified; empty when none
"verification_id": "a1b2c3d4"
}
{ "skipped": true, "reason": "empty_input" }, with no status field. Test skipped before branching.{ "error": "…" } on the item.status: "timeout" with the task_id; nothing is lost, and Get Status collects it later. Screen in bulk with Assess and save Verify for the claims that matter.04Getting started
Three steps to a working node.
Add the Lenz node
Search for Lenz in the n8n node panel and drag it into your workflow. It’s in the community nodes registry: no manual install.
Connect it and wire it
Create a credential, click Connect my account and sign in to Lenz (n8n 2.12.0 or later). On an older n8n, pick API Key and paste a lenz_… key instead. Then connect input and output.
05Other ways to connect
The same verdicts, wherever you work.
- Claude and ChatGPTAdd Lenz to the assistant you already use. One sign-in, no key to paste.
- Google DocsCheck a draft from the Extensions menu. The findings appear beside your text.
- MCP serverClaude Code, Cursor, VS Code, Codex and other coding tools: one command, then sign in.
- ZapierThe same trigger-and-actions shape for Zaps, with the same structured output.
- API & SDKsThe CLI and the REST API, with typed Python and TypeScript SDKs.
Add fact-checking to your n8n workflow.
Self-serve from day one · free tier, no card