---
title: "Verify"
method: POST
path: "/api/v1/verify"
tags: ["Verify"]
---

# Verify

`POST /api/v1/verify`

## Request

- Base URL: `https://lenz.io`
- URL: `https://lenz.io/api/v1/verify`
- Auth: HTTP bearer

Submit a claim for verification.

The claim goes in ``claim``. (``text`` is accepted as an alias — a
document is ``text``, a claim is ``claim``; ``POST /extract`` is the
endpoint that takes a document.)

Returns a ``task_id`` immediately. Poll ``GET /verify/status/{task_id}``
or supply ``webhook_url`` in the body for an asynchronous callback when
the pipeline terminates.

**Duplicate submissions are collapsed.** With no ``Idempotency-Key``
header, the request body itself is the key: resubmitting an identical
body within 10 minutes returns the original ``task_id`` instead of
starting a second run. To run the same text twice on purpose, send your
own ``Idempotency-Key`` — a supplied key always wins.

**``depth``** selects how much work the check does. ``standard``
(default) is the full pipeline. ``low`` searches fewer sources, skips
the recovery fetch tiers and stops the debate after the opening
arguments (no rebuttal round), so it comes back sooner — with less
evidence behind the verdict. Framing, the adjudication panel and the
conclusion run unchanged, and every step runs the same models either
way; ``low`` is a volume lever, not a model downgrade.

``low`` costs **half the credits**, and you are charged for the depth you
REQUESTED. A claim answered from a check made in the last hour is free
(unless it issues you a new warranty certificate, which is charged at the
depth you requested). The completed result echoes the depth the verdict
was actually produced with, which is why that field can read ``standard``
on a ``low`` request: the echo describes the evidence.

**Versions.** 202: `2026-10-11` receives `VerifyAcceptedOut`, `2026-05-13` receives `VerifyAcceptedOutLegacy`; 422: `2026-10-11` receives `ValidationErrorOut`, `2026-05-13` receives `ValidationErrorOutLegacy`; default: `2026-10-11` receives `ErrorOut`, `2026-05-13` receives `ErrorOutLegacy`.

## Headers

- `X-Lenz-API-Version` string

## Request body

- VerifyIn
  - `claim` string, nullable: The claim to check. A statement in natural language; several claims in one string are split and handled separately.
  - `text` string: Accepted alias for `claim`. Send one or the other; `text` is used when it has content.
  - `source_url` string
  - `webhook_url` string, nullable: Where to POST this request's webhook. Omitted or `null`: your credential's default webhook URL, if it has one. `""`: no webhook for this request. API version `2026-05-13` reads `""` as omitted.
  - `language` string: ISO 639-1 code for the language of the verification and its source summaries. Omitted: English. `auto`: detected from the submitted text (the same rule as lenz.io: a supported language, or English when the text is short, English or in a language we do not answer in). A code always wins. Responses carry the code that was used, never `auto`.
  - `visibility` 'private' | 'unlisted'
  - `depth` 'standard' | 'low'

## Response `200`

Sent only to callers on `2026-05-13`: the same receipt for a repeat of a `/verify` answered from the first submission. Every other version answers 202.

- VerifyAcceptedOutLegacy: The /verify receipt as `2026-05-13` sends it: `chain_id` too (not on a repeat answered from the first submission, which is a 200).
  - `task_id` string, required
  - `status` 'queued', required
  - `chain_id` string

## Other responses

- `202`: Accepted
- `422`: A field to fix
- `default`: An error

---

[API](https://skmtc.dev/lenz/apis/lenz-ai-fact-checking-api.md) · [All operations](https://skmtc.dev/lenz/apis/lenz-ai-fact-checking-api/llms.txt) · [OpenAPI document](https://skmtc.dev/lenz/apis/lenz-ai-fact-checking-api/revisions/6150947324bf?raw)
