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:
X-RateLimit-Limit: Your daily request limitX-RateLimit-Remaining: Requests remaining todayX-RateLimit-Reset: Unix timestamp when the limit resets
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.