Category overview

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.

Get API key OpenAPI llms.txt

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
What we've seen in practice

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.