Skip to main content

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

GPTZeroDeep AI DetectorNotes
documents[0].class_probabilities.aiscore0-1 probability the text is AI-generated. Same range, same direction.
documents[0].predicted_classbandCategorical. Their {human, ai, mixed} maps to our 7-band scale; "mixed" ≈ paraphrased.
documents[0].class_probabilities.human1 - scoreWe expose the AI probability; subtract for human.
documents[0].sentences[].generated_probper_passage[].scorePer-sentence breakdown. Same intent, paid tier only.
documents[0].languagedetected_languageISO 639-1.
documents[0].overall_burstinessdocument_rhythm.burstinessBurstiness metric. Comparable scale.
documents[0].perplexitylayers.perplexityEquivalent perplexity-style signal from our advanced detection model.

Behaviour differences to know

  • 80-word floor. Below 80 words we refuse with 422 insufficient_text instead of returning a low-signal verdict. GPTZero scores everything.
  • Authentication. Bearer header (Authorization: Bearer dad_live_...), not x-api-key.
  • Endpoint base. https://api.deepaidetector.com, not api.gptzero.me.
  • Sentence breakdown is paid. Free tier returns macro band only; per-passage requires Plus or higher.
  • Pricing quote. Every response includes pricing_quote showing 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: true flag needed.

Migration checklist

  1. Generate a deepaidetector key in your dashboard.
  2. Swap the URL: https://api.gptzero.me/v2/predict/texthttps://api.deepaidetector.com/v1/detect.
  3. Swap the auth header: x-api-keyAuthorization: Bearer ....
  4. Rename request field: documenttext.
  5. Update response parsing per the field map above.
  6. Add a 422 branch — handle "text too short" explicitly.
  7. (Recommended) replace your raw fetch with @deepaidetector/client to 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