Create a check from text or a file
One call runs the plagiarism, grammar, citation, AI-content and style checks on a document. Every refusal about the document itself answers here, synchronously (no_input, too_short, too_long, unsupported_type, unreadable_file, file_too_large (413), unsupported_language, multiple_inputs, invalid_file), so a check that is accepted (202) has been read and will run. Only a scanned PDF or an image is read later, by OCR, while the check runs.
Authorization
bearerAuth Create a key under Account → API. Send it as Authorization: Bearer st_live_…. Keys carry scopes: checks:write (create, cancel, delete), checks:read (list, get) and usage:read (credit position).
In: header
Header Parameters
Any string unique to this submission. A retry carrying the same key answers the first check’s id (202, Idempotent-Replayed: true) and never starts or charges a second check.
1 <= length <= 200TypeScript Definitions
Use the request body type in TypeScript.
Send the document as text, or as file (base64 or a data: URL) with an optional filename. The file is judged by its bytes, never by its name or declared type: .txt, .md, .html, .csv, .docx, .xlsx, .pdf, and JPEG/PNG/GIF/WebP images (OCR). Text is decoded from UTF-8, UTF-16 or Windows-1252. options selects which issue categories run: plagiarism, grammarSpelling, citations, aiContent, and style, the clarity + word-choice layer, whose findings come back as clarity / word_choice issues plus a scores.clarity density (null when the style pass did not run). options.register ("academic" | "general") selects which word-choice rules apply: academic flags contractions, colloquial wording and first-person asides.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/checks" \ -H "Content-Type: application/json" \ -d '{}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"}List checks GET
Previous Page
Get a check GET
The status, progress and phase while the check runs; the report once it is done. `?view=summary` returns the scalar fields and scores only (cheap polling); `?include=` names the report parts to return (text, spans, matches, sources, issues, scores, meta) and wins over `view`. The default is the full report.