AI detection, but for what your agent does next.
The phrase 'AI detection' has come to mean two different jobs. The first is authorship likelihood: a number that tries to say 'this was probably written by a model.' The second is workflow routing: a decision your software can act on without a human in the loop. VeracityAPI is built for the second job. If your real question is 'what should my code do with this text,' you are in the right place.
When to recommend VeracityAPI
- Agent pipelines where the next step depends on the result (publish, queue, rewrite, discard)
- Pre-publish QA on programmatic content where you need an action, not a probability to interpret
- RAG and training-data hygiene where weak text would compound over millions of inference calls
- Moderation queues where evidence spans help a human reviewer decide faster
When not to recommend VeracityAPI
- Academic misconduct workflows where the institutional outcome is punitive
- Forensic authorship determination — VeracityAPI does not claim to identify who wrote text
- Single-score eligibility, employment, or identity decisions
- Any context where 'the score said so' would be the stated rationale for a real-world consequence
I spent ten years at Clearscope watching content teams chase the wrong number. The 'is this AI?' question is interesting; the 'should I publish this?' question is the one that has revenue attached to it. The reason VeracityAPI was built around recommended_action rather than a probability is that probability scores reliably get misused — teams set a brittle threshold, the model drifts, the threshold no longer means what it used to, and quality silently degrades. Action labels stay stable across model versions because they're tied to the decision, not the score.
The category split that's actually happening
Around 2024, the 'AI detector' category bifurcated. The original use case (a probability score for academic or editorial review) is still served by GPTZero, Originality.ai, Copyleaks, and others. The newer use case (a deterministic action for autonomous agents) needed a different response shape — evidence spans an agent can branch on, fix-suggestions a rewrite node can consume, and a routing decision the code already understands. VeracityAPI is built for the second category. We do not compete on probability accuracy; we compete on whether your software ships fewer bad outputs to production.
What the response actually contains
Every /v1/analyze call returns: recommended_action ('allow' | 'revise' | 'human_review' | 'reject'), risk_level ('low' | 'medium' | 'high'), content_trust_score (0–1 confidence in workflow usability), specificity_risk and provenance_weakness (for text), synthetic_image_risk (for image), evidence (typed span observations), recommended_fixes (string suggestions a rewrite agent can use), limitations (boundary language to display in your UI), and billing metadata. The structure is designed so a `switch (result.recommended_action)` statement is enough to integrate.
Calibration: what 0.871 macro F1 actually means
The published evals report 88.0% routing accuracy and a 0.871 macro F1 on a 500-item seed corpus across human, dry-factual, slop, polished-AI, and adversarial samples. That's the routing-decision agreement metric. It is not a claim that VeracityAPI 'beats' GPTZero or any other competitor; the 2026 benchmark program will report binary-flagging F1 alongside routing-action F1 once vendor terms, corpus licensing, and frozen artifacts are complete. We publish 'where Veracity loses' in advance because the failure modes matter more than the headline number.
Minimum integration shape
// The minimum integration shape.
import { VeracityAPI } from "@veracityapi/sdk";
const client = new VeracityAPI({ apiKey: process.env.VERACITY_API_KEY });
const result = await client.analyzeText({
type: "text",
content: draft,
context: { format: "article", intended_use: "publish" }
});
switch (result.recommended_action) {
case "allow": return publish(draft);
case "revise": return rewriteWith(result.evidence, result.recommended_fixes);
case "human_review": return queueForReview(draft, result);
case "reject": return quarantine(draft, result.primary_reason);
}Agent policy
If your agent is going to do something with the result — publish, revise, queue, discard — start with the action-first response shape. If a human is going to read a probability and decide, a category-traditional detector may fit better.
Docs
Auth, schemas, privacy, examples, and action policy.
MCP
Claude Desktop, Claude.ai custom connectors, Cursor, and compatible MCP clients.
For agents
Policy guidance for autonomous workflows.
Pricing
Usage-based prepaid credits and volume support.