API Documentation

The ClaudeRewrite API rewrites text programmatically. POST text, get a clean, watermark-free rewrite back in JSON. Use it to build removal into your own scripts, workflows, or product.

How it works

Claude embeds a statistical watermark in generated text by biasing token choices during generation. The signal is invisible to readers but detectable by anyone with Anthropic's key.ClaudeRewrite removes it in two steps:

  1. Invisible character scrub (zero cost) β€” strips ZWSP, bidi overrides, tag characters, and other invisible Unicode that some watermarks embed directly.
  2. Structural rewrite β€” a different model rewrites sentence structure, clause order, and phrasing while preserving every fact, number, date, name, URL, and code block. This changes the token pattern the watermark relies on.
  3. Automatic meaning check β€” a second pass compares the original against the rewrite and flags any fact that changed, was dropped, or was added. You see a green pass or a list of issues before you copy.

No honest tool can guarantee the mark is fully undetectable because Anthropic keeps its detector private.ClaudeRewrite performs the strongest available removal and is transparent about the residual risk.

Authentication

Every request needs your personal API key in the Authorization header. Find and manage it in your account page. API access requires an active paid plan (Starter, Professional, or Business). Keep your key secret.

Authorization: Bearer YOUR_API_KEY

Rewrite text

POST https://removeclaudewatermark.com/api/v1/rewrite

Send a JSON body with the text to rewrite and an optional model. Rate limit: 30 requests/minute, 300/day.

cURL

curl -X POST https://removeclaudewatermark.com/api/v1/rewrite \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "The quick brown fox jumps over the lazy dog."}'

Python

import requests

res = requests.post(
    "https://removeclaudewatermark.com/api/v1/rewrite",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={"text": "Your Claude output here."},
)
data = res.json()
print(data["rewritten"])

JavaScript (Node)

const res = await fetch("https://removeclaudewatermark.com/api/v1/rewrite", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ text: "Your Claude output here." }),
});
const data = await res.json();
console.log(data.rewritten);

Request body

{
  "text": "the text to rewrite (required)"
}

Response

A JSON object with the rewritten text and word count:

{
  "rewritten": "The speedy fox clears the dozing hound.",
  "words": 10,
  "invisibleCharsStripped": 3
}

invisibleCharsStripped tells you how many invisible Unicode characters (watermark carriers) were removed from your input before the rewrite. Zero means none were found. This field is omitted when the count is zero.

Limits

  • Max input: 200,000 characters per request
  • Max words per rewrite: Starter 5,000 / Professional 10,000 / Business 10,000 words
  • Rate limit: 30 requests per minute, 300 per day
  • Monthly quota: Free tier gets 5 rewrites/mo; paid plans draw from your monthly word quota
  • Long text: split large documents into ~30,000 character chunks and rewrite each part separately

Errors

  • 401 - missing or invalid API key
  • 402 - free monthly rewrites or paid quota/credits exhausted
  • 429 - rate limit exceeded
  • 400 / 413 - bad request or text too long
  • 502 - the rewrite model failed

Need higher limits or a bespoke integration? Get in touch.