Send JSON with a text field. It is required and must be at least 50 words; shorter text is refused before it reaches the detector.
An optional sensitivity field sets how much of the text must read as AI-written before it is flagged. "standard" flags above 6%. It is the default, and a missing or unrecognized value is read as standard. "accusation-safe" flags above 15%, and misses more AI-edited text than the default. "sensitive" flags above 2%; in the default model’s release test it flagged 1 of 600 human-written papers the model had never been trained on, and the 95% ceiling on that false-flag rate is 0.788%. No setting turns an AI verdict into Human.
An optional model field picks which model reads the text. Leave it out and you get "standard", the default, and the request behaves exactly as it did before the field existed. "standard" (fewer false flags): Flagged none of 600 human-written papers. Called 20 of 176 humanized AI papers human. In a newer test of one humanizer tool, it called 231 of 255 rewritten long papers human. "humanizer" (catches more humanizers): Called 8 of 176 humanized AI papers human. In the same newer test, it called 219 of 255 rewritten long papers human. Flagged 2 of 600 human-written papers the default cleared. "students" (for student essays): Called none of 4,816 student essays AI. Caught 39 of 41 humanized student essays. In a newer test of one humanizer tool, it called 218 of 255 rewritten long papers human. Flagged 1 of 600 human-written papers the default cleared. Those counts are under the default verdict mode. The humanizer and students models run at sensitivity "standard" only: any other sensitivity with either is refused with 422. When you name a model, the response carries it back in a model field, and run names the run that read the text.
An optional mode field takes "verdict" (the default) or "edit", which returns more detail for each sentence.
Read the abstained field first. When it is true, the text was under 50 words, the verdict is "Unknown", and nothing else in the response is a reading. Otherwise verdict is "Human", "Mixed" or "AI". fraction_ai is the share of words in sentences labeled AI; it is not a confidence score. word_count is the number of words the detector counted. sentences is an ordered list of {start, end, label, label_3, p_ai, text}: the sentence as the detector split it, its label, and p_ai, an internal model score for that sentence.
To show highlights, render sentences[].text in order. The start and end numbers point into a normalized copy of your text, so they will not line up if you use them to slice your original string.