Developers

WriteGuard API

Check text for plagiarism and AI-generated content from your own application. Submit text, poll for results, get per-source matches and per-sentence AI scores.

Get an API keyOpenAPI spec
Available on paid plansAnyone can read these docs. Making calls requires a paid plan — a key on the free plan returns 403 plan_required. See plans.

Authentication

Create a key in Settings → API and send it as a bearer token. The key is shown once when created — it is stored only as a hash, so it cannot be recovered later. Treat it as a password and keep it server-side.

Authorization: Bearer wgk_your_key_here

How billing works

A scan costs its word count once per tool. Checking 800 words for both plagiarism and AI costs 1,600 words. Words are taken from your monthly allowance first and then from any purchased balance. If a scan cannot be queued, its words are refunded automatically. Rate limit is 60 requests per minute per key.

Text must be at least 50 words. Anything shorter is rejected with 400 text_too_short before any words are charged — below that length neither check can return a meaningful result.

Quick start

Scans are asynchronous: submitting returns 202 immediately, then you poll until the status is completed.

cURL

curl -X POST https://app.plagiarismcheckerplus.com/api/public/v1/scans \
  -H "Authorization: Bearer $WRITEGUARD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "The text you want to check.",
    "tools": ["plagiarism", "ai_detect"]
  }'

Node.js

const BASE = "https://app.plagiarismcheckerplus.com/api/public/v1";
const headers = {
  Authorization: `Bearer ${process.env.WRITEGUARD_API_KEY}`,
  "Content-Type": "application/json",
};

// 1. Submit — returns 202 straight away.
const res = await fetch(`${BASE}/scans`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    text: "The text you want to check.",
    tools: ["plagiarism", "ai_detect"],
  }),
});
const { id } = await res.json();

// 2. Poll until it finishes (usually 30-90s).
let scan;
do {
  await new Promise((r) => setTimeout(r, 3000));
  scan = await fetch(`${BASE}/scans/${id}`, { headers }).then((r) => r.json());
} while (scan.status === "pending" || scan.status === "processing");

console.log(scan.results.plagiarism?.score, scan.results.aiDetection?.score);

Python

import os, time, requests

BASE = "https://app.plagiarismcheckerplus.com/api/public/v1"
headers = {"Authorization": f"Bearer {os.environ['WRITEGUARD_API_KEY']}"}

scan_id = requests.post(
    f"{BASE}/scans",
    headers=headers,
    json={"text": "The text you want to check.", "tools": ["plagiarism", "ai_detect"]},
).json()["id"]

while True:
    scan = requests.get(f"{BASE}/scans/{scan_id}", headers=headers).json()
    if scan["status"] not in ("pending", "processing"):
        break
    time.sleep(3)

print(scan["results"]["plagiarism"]["score"])

Reference

Every endpoint, with schemas and a live console. Click Authorize and paste a key to run requests against your own account.