Claude Watermark Removal API — Free Tier Available

Integrate watermark detection and removal into your applications with our simple REST API. Free tier includes 1,000 requests per day.

Authentication

The free tier requires no authentication. Simply send requests to the endpoints below. For higher rate limits, include your API key in the X-API-Key header.

Endpoints

POST /api/v1/check

Detect whether text contains a Claude watermark.

# Request
curl -X POST https://claudewatermark.net/api/v1/check \
  -H "Content-Type: application/json" \
  -d '{"text": "Your text to scan for watermarks..."}'

# Response
{
  "watermark_detected": true,
  "confidence": 0.94,
  "method": "distributional_token_bias",
  "tokens_analyzed": 347,
  "green_ratio": 0.71,
  "zero_width_chars": 0
}

POST /api/v1/remove

Remove watermark from text and return cleaned output.

# Request
curl -X POST https://claudewatermark.net/api/v1/remove \
  -H "Content-Type: application/json" \
  -d '{"text": "Your watermarked text...", "options": {"aggressive": false}}'

# Response
{
  "cleaned_text": "Your cleaned text...",
  "tokens_modified": 23,
  "chars_stripped": 0,
  "post_check": {
    "watermark_detected": false,
    "confidence": 0.12
  }
}

Python Example

import requests

# Check for watermark
response = requests.post(
    "https://claudewatermark.net/api/v1/check",
    json={"text": "Your Claude-generated text here..."}
)
result = response.json()
print(f"Watermark detected: {result['watermark_detected']}")
print(f"Confidence: {result['confidence']:.0%}")

# Remove watermark
response = requests.post(
    "https://claudewatermark.net/api/v1/remove",
    json={
        "text": "Your watermarked text...",
        "options": {"aggressive": False}
    }
)
cleaned = response.json()
print(cleaned["cleaned_text"])

Node.js Example

const response = await fetch("https://claudewatermark.net/api/v1/check", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    text: "Your Claude-generated text here..."
  })
});

const result = await response.json();
console.log(`Watermark: ${result.watermark_detected}`);
console.log(`Confidence: ${(result.confidence * 100).toFixed(0)}%`);

// Remove watermark
const removeResponse = await fetch("https://claudewatermark.net/api/v1/remove", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    text: "Your watermarked text...",
    options: { aggressive: false }
  })
});

const cleaned = await removeResponse.json();
console.log(cleaned.cleaned_text);

Rate Limits

The free tier allows 1,000 API requests per day per IP address. Each request can process up to 10,000 characters. Responses include rate limit headers:

If you need higher limits for production use, contact us for a free API key that raises the limit to 10,000 requests per day. Enterprise plans with unlimited requests are available through claudeaiwatermark.com.

Error Handling

The API returns standard HTTP status codes. A 200 response indicates success. A 400 response means the request body was malformed or the text field was empty. A 429 response means you have exceeded the rate limit. A 500 response indicates a server-side error — retry after a brief delay. All error responses include a JSON body with a message field explaining the issue.

Webhooks (Coming Soon)

We are developing a webhook system for asynchronous batch processing. Register a callback URL and submit large batches of text — we will process them in the background and POST results to your endpoint as each text completes. This feature is currently in beta testing. Check back soon or subscribe to our changelog for updates.