Skip to main content

API docs → Migrate from Originality.ai

Migrate from Originality.ai

Two big differences up front: our detection and plagiarism live on separate endpoints (call both in parallel for the equivalent of their "Scan"), and our plagiarism layer covers the open web + 7 academic databases + Wikipedia instead of just the open web.

Why switch

  • Academic plagiarism coverage. 700M+ papers across OpenAlex, CrossRef, Semantic Scholar, arXiv, CORE, plus full Wikipedia and the open web. Originality covers only the open web.
  • Per-sentence highlighting. Plus tier and above ship paragraph + sentence breakdowns with the exact rule ids that fired.
  • Lower cost for short documents. Per-word mode at $0.0003/word vs flat $0.01/100 words; we're roughly 30% cheaper on a typical 1k-word article.
  • Privacy default. No public share links unless you opt in. Plaintext NOT retained.
  • Six-layer ensemble. Our verdict combines six signals — no single bypass technique breaks the stack.

Side-by-side

Before — Originality.ai
// Before: Originality.ai
const res = await fetch('https://api.originality.ai/api/v1/scan/ai', {
  method: 'POST',
  headers: { 'X-OAI-API-KEY': process.env.ORIGINALITY_KEY, 'Accept': 'application/json' },
  body: new URLSearchParams({ content: text, title: 'doc' }),
});
const data = await res.json();
const aiScore = data.data.ai.score;
const plagScore = data.data.plagiarism.score;
After — Deep AI Detector
// After: deepaidetector (split: detection + plagiarism are separate endpoints)
import { createClient } from '@deepaidetector/client';
const client = createClient({ apiKey: process.env.DEEPAIDETECTOR_KEY });

const [detect, plag] = await Promise.all([
  client.detect({ text }),
  client.plagiarism({ text }),
]);
const aiScore = detect.score;
const plagScore = plag.report.overallPercent / 100;

Field mapping

Originality.aiDeep AI DetectorNotes
data.ai.scorescoreAI probability 0-1. Same scale, same direction.
data.ai.confidencemeta.reliability.levelWe expose "low" / "high" based on word count; their numeric confidence is approximate.
data.plagiarism.scoreplagiarism.report.overallPercentDifferent endpoint — see /v1/plagiarism. Both report overall similarity percentage.
data.plagiarism.sources[].urlplagiarism.report.sources[].urlPer-source citation list. Our scan covers 7 layers vs their 1 layer.
data.readability.scoredocument_rhythm.flesch_kincaidReadability proxy. We expose more rhythm metrics under document_rhythm.
public_linkdocument_idWe use a stable UUID — build your own share-link off it (no public links by default for privacy).

Behaviour differences to know

  • Two endpoints, not one. Detection and plagiarism are independent — saves cost when you only need one. Call both in parallel for the bundled equivalent.
  • JSON body, not form-encoded. Bearer token in Authorization (not X-OAI-API-KEY); body is JSON.
  • 80-word floor on detection. Below this we return 422 insufficient_text rather than a low-confidence number.
  • Plagiarism min is 80 words / 200 chars. Below this we return 422.
  • No public share links. Use document_id to look up the report in your dashboard, or build your own share UI.
  • Multilingual is automatic. 20+ languages are detected and scored transparently — no flag.

Migration checklist

  1. Generate a Deep AI Detector API key in your dashboard.
  2. Split the call site — issue parallel detect + plagiarism calls instead of one Originality scan.
  3. Swap auth header: X-OAI-API-KEY: ...Authorization: Bearer dad_live_....
  4. Change content-type to application/json and serialise the body.
  5. Update response parsing per the field map.
  6. Add 422 handling for short text.
  7. (Recommended) drop in @deepaidetector/client for typed errors + retries.

Want a hand?

Email [email protected] with your call site — we'll write the migration patch on Plus tier and above.

Sign up