---
title: "Check the citations of a draft"
method: POST
path: "/api/v1/citecheck"
tags: ["Citecheck"]
---

# Check the citations of a draft

`POST /api/v1/citecheck`

## Request

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

Check whether each cited source says what the draft attributes to it.

Send `text` (a draft with its links: markdown links, bare URLs, `doi:` and
`doi.org` forms, `[n]` markers with a reference list) or `pairs` (up to 20
statements, each with the `url` or `doi` it cites). Returns 202 with a
`citecheck_id`; read the check at the `Location`
(`GET /citechecks/{citecheck_id}`), or receive `citecheck.completed` /
`citecheck.failed` at your webhook.

It costs 1 credit per checked citation: at most 1 credit per citation you
send (or `max_citations` for a text), and a citation that could not be
checked is refunded. `credits.charged` on the check says what it cost.

**Versions.** 402: `2026-10-11` receives `CitecheckErrorOut`, `2026-05-13` receives `CitecheckErrorOutLegacy`; 409: `2026-10-11` receives `CitecheckErrorOut`, `2026-05-13` receives `CitecheckErrorOutLegacy`; 429: `2026-10-11` receives `CitecheckErrorOut`, `2026-05-13` receives `CitecheckErrorOutLegacy`; 503: `2026-10-11` receives `CitecheckErrorOut`, `2026-05-13` receives `CitecheckErrorOutLegacy`; default: `2026-10-11` receives `ErrorOut`, `2026-05-13` receives `ErrorOutLegacy`.

## Headers

- `X-Lenz-API-Version` string

## Request body

- CitecheckIn: A draft whose citations to check, or the statement-source pairs themselves.
  - `text` string, nullable: The draft, up to 50,000 characters, with its links (markdown links, bare URLs, doi: and doi.org forms, [n] markers with a reference list). Send exactly one of text and pairs.
  - `pairs` CitationPairIn[], nullable: 1 to 20 statement-source pairs to check as they are. Send exactly one of text and pairs.
    - `statement` string, required: The sentence that cites the source, at most 1,000 characters.
    - `url` string, nullable: The cited page: http or https, at most 2,000 bytes.
    - `doi` string, nullable: The cited DOI alone, like 10.1038/nature12373.
    - `cite` string, nullable: A source named by its citation, alone: a legal authority such as a US case like `372 U.S. 335` (a caption may precede it), a statute like `42 U.S.C. § 1983`, a regulation like `17 C.F.R. § 240.10b-5` or an EU act like `Regulation (EU) 2016/679`, or a DOI. At most 300 characters. Read like a citation found in a text; a DOI is the same as `doi`.
    - `quotes` string[]: At most 3 excerpts the statement quotes from the source, each 15 to 500 characters and words of the statement.
    - `cited_title` string, nullable: With `doi`: the title the reference gives.
    - `cited_authors` string[]: With `doi`: the authors, family names, at most 10.
    - `cited_year` string, nullable: With `doi`: the year the reference gives, four digits.
    - `cited_journal` string, nullable: With `doi`: the journal the reference gives.
  - `max_citations` integer, nullable: With text: how many citations, in the draft's order. Default 20.
  - `language` string, nullable: The language Lenz writes the reasoning in. English when omitted. Hints are always in English.
  - `webhook_url` string, nullable: Omitted or null: the credential's default webhook URL. "": no webhook. A URL: citecheck.completed / citecheck.failed go there.

## Response `202`

Accepted

- CitecheckAcceptedOut
  - `citecheck_id` string, required
  - `status` 'queued', required: The acceptance receipt, not the current state.

## Other responses

- `402`: Payment Required
- `409`: Conflict
- `422`: Unprocessable Entity
- `429`: Too Many Requests
- `503`: Service Unavailable
- `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)
