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, academic databases, and reference works instead of just the open web.

Why switch

  • Academic plagiarism coverage. 700M+ papers across academic databases, plus broad reference-work coverage and the open web. Originality covers only the open web.
  • Per-sentence highlighting. Starter 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 support@deepaidetector.com with your call site — we'll write the migration patch on Plus tier and above.

Sign up