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.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 support@deepaidetector.com with your call site — we'll write the migration patch on Plus tier and above.
Sign up