API docs → Migrate from GPTZero
Migrate from GPTZero
Both APIs answer the same question. Ours adds explainability (per-layer scores, fired rule corpus, document-rhythm metrics) and tends to be cheaper at scale. For most call sites the migration is a one-line URL swap.
Why switch
- Lower per-call cost. $0.0003/word or $0.50/detection vs GPTZero's $0.02/1k characters.
- Industry-leading accuracy. Trained on 2 billion+ samples covering every major LLM family plus paraphrased and humanized AI text.
- Per-sentence verdicts. Every paid response includes sentence-level breakdown you can show to users or include in a report.
- Domain-aware calibration. Marketing copy and academic prose have different baselines — we calibrate per domain so technical docs aren't flagged for sounding like ChatGPT.
- Webhooks + SDKs. Official JS / Python clients with retries; webhooks for real-time fan-out.
Side-by-side
Before — GPTZero
// Before: GPTZero
const res = await fetch('https://api.gptzero.me/v2/predict/text', {
method: 'POST',
headers: { 'x-api-key': process.env.GPTZERO_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ document: text, multilingual: true }),
});
const data = await res.json();
const aiProb = data.documents[0].class_probabilities.ai;
const verdict = data.documents[0].predicted_class; After — Deep AI Detector
// After: deepaidetector
import { createClient } from '@deepaidetector/client';
const client = createClient({ apiKey: process.env.DEEPAIDETECTOR_KEY });
const data = await client.detect({ text, strictness: 'balanced' });
const aiProb = data.score; // 0-1, same as GPTZero's class_probabilities.ai
const verdict = data.band; // 7-band scale (definitely_ai, likely_ai, paraphrased, ...) Field mapping
| GPTZero | Deep AI Detector | Notes |
|---|---|---|
documents[0].class_probabilities.ai | score | 0-1 probability the text is AI-generated. Same range, same direction. |
documents[0].predicted_class | band | Categorical. Their {human, ai, mixed} maps to our 7-band scale; "mixed" ≈ paraphrased. |
documents[0].class_probabilities.human | 1 - score | We expose the AI probability; subtract for human. |
documents[0].sentences[].generated_prob | per_passage[].score | Per-sentence breakdown. Same intent, paid tier only. |
documents[0].language | detected_language | ISO 639-1. |
documents[0].overall_burstiness | document_rhythm.burstiness | Burstiness metric. Comparable scale. |
documents[0].perplexity | layers.perplexity | Equivalent perplexity-style signal from our advanced detection model. |
Behaviour differences to know
- 80-word floor. Below 80 words we refuse with
422 insufficient_textinstead of returning a low-signal verdict. GPTZero scores everything. - Authentication. Bearer header (
Authorization: Bearer dad_live_...), notx-api-key. - Endpoint base.
https://api.deepaidetector.com, notapi.gptzero.me. - Sentence breakdown is paid. Free tier returns macro band only; per-passage requires Plus or higher.
- Pricing quote. Every response includes
pricing_quoteshowing both billing modes so you can pick the cheaper one per call. - Multilingual is transparent. Submit any of 20+ languages — we detect,
translate internally, and score. No
multilingual: trueflag needed.
Migration checklist
- Generate a deepaidetector key in your dashboard.
- Swap the URL:
https://api.gptzero.me/v2/predict/text→https://api.deepaidetector.com/v1/detect. - Swap the auth header:
x-api-key→Authorization: Bearer .... - Rename request field:
document→text. - Update response parsing per the field map above.
- Add a 422 branch — handle "text too short" explicitly.
- (Recommended) replace your raw fetch with
@deepaidetector/clientto inherit retries + typed errors.
Need help?
Email support@deepaidetector.com with your GPTZero call site — we'll write the migration patch for you on Plus tier and above.
Sign up