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.ai | Deep AI Detector | Notes |
|---|---|---|
data.ai.score | score | AI probability 0-1. Same scale, same direction. |
data.ai.confidence | meta.reliability.level | We expose "low" / "high" based on word count; their numeric confidence is approximate. |
data.plagiarism.score | plagiarism.report.overallPercent | Different endpoint — see /v1/plagiarism. Both report overall similarity percentage. |
data.plagiarism.sources[].url | plagiarism.report.sources[].url | Per-source citation list. Our scan covers 7 layers vs their 1 layer. |
data.readability.score | document_rhythm.flesch_kincaid | Readability proxy. We expose more rhythm metrics under document_rhythm. |
public_link | document_id | We 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(notX-OAI-API-KEY); body is JSON. - 80-word floor on detection. Below this we return
422 insufficient_textrather than a low-confidence number. - Plagiarism min is 80 words / 200 chars. Below this we return
422. - No public share links. Use
document_idto 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
- Generate a Deep AI Detector API key in your dashboard.
- Split the call site — issue parallel
detect+plagiarismcalls instead of one Originality scan. - Swap auth header:
X-OAI-API-KEY: ...→Authorization: Bearer dad_live_.... - Change content-type to
application/jsonand serialise the body. - Update response parsing per the field map.
- Add 422 handling for short text.
- (Recommended) drop in
@deepaidetector/clientfor 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