Extract
Extract verifiable claims from arbitrary text.
Runs the extraction step on its own — no research, no debate, no credit charge. Enumerates every distinct major factual claim in the input (up to 100), ordered most-check-worthy-first, in claims (one item for a single claim, [] for none). Claims returned here verify cleanly when submitted verbatim to POST /verify.
Pass focus to narrow the result to the claims you care about — a short description such as "market size, growth and competitors", at most 300 characters. A focus selects from the claims the extractor found and nothing else: it cannot add a claim, reword one, reorder them, change the language, or change what counts as a claim. Ordering stays most-check-worthy-first.
status is one of:
- ready — claims were found (and, with a focus, at least one matched).
- no_checkable_claim — no claim in the input could be checked against public evidence.
- no_match — claims were found but none fall within your focus. The unfocused list is never substituted; widen the focus and call again.
text can also be a single public web page URL (http or https, nothing else in the field). Lenz reads the page, or a YouTube video's transcript, and extracts the claims from its first 50,000 characters. Pages behind a login (Facebook, Instagram, Threads, LinkedIn) can't be read. A URL call typically takes 5-40 seconds, so give it a 90-second client timeout (SDK 2.13 and later do). A page that cannot be read answers 502 extraction_failed; when the services that read pages are down, 503 upstream_unavailable with Retry-After. Neither uses a unit of the daily cap.
Pass locate: true to keep only the claims that can be traced directly back to your text, and get each claim's positions: the passages that make it, with start / end offsets into text as you sent it, in Unicode code points. A claim the text does not make, or makes with a different figure, is left out, so the list says what the author wrote and nothing else. Offsets count code points, not UTF-16 units: in JavaScript slice with Array.from(text).slice(start, end).join(''). For a URL the offsets are null and each position carries its passage. Locating adds a few seconds, never more than 20. If it cannot run, every positions is null and the claims are returned unfiltered. locate defaults to false.
Accepts up to 50,000 characters (longer input is truncated). Free for API-key holders, capped at 1000 calls per ACCOUNT per day (resets at 00:00 UTC) regardless of input length — a focused call costs the same one unit as an unfocused one. The cap is shared across all of the account's keys.
Versions. 200: 2026-10-11 receives ExtractOut, 2026-05-13 receives ExtractOutLegacy; 422: 2026-10-11 receives ValidationErrorOut, 2026-05-13 receives ValidationErrorOutLegacy; default: 2026-10-11 receives ErrorOut, 2026-05-13 receives ErrorOutLegacy.
Request
- Base URL: https://lenz.io
- URL: https://lenz.io/api/v1/extract
- Auth: HTTP bearer
Headers
The API version to answer in, as a date. A date before 2026-10-11 (or a value that is not a date) gets 2026-05-13. See https://lenz.io/docs/api-versions.
Request body
Response
OK
Changes
No recorded changes to this operation across all 1 revision of this API.