Quickstart — Clean text in one request
No SDK, no API key, no signup. Every endpoint is a plain HTTPS POST to https://api.claudewatermark.org. Here is the whole thing.
Scan text for hidden characters
bash
curl -X POST https:"syn-comment">//api.claudewatermark.org/v1/text/scan \
-H "syn-string">"Content-Type: application/json" \
-d &"syn-comment">#39;{"syn-string">"text":"syn-string">"Your text here"}39;
javascript
class="syn-keyword">const res = await fetch(class=class="syn-string">"syn-string">"https:class=class="syn-string">"syn-comment">//api.claudewatermark.org/v1/text/scan", {
method: class=class="syn-string">"syn-string">"POST",
headers: { class=class="syn-string">"syn-string">"Content-Type": class=class="syn-string">"syn-string">"application/json" },
body: JSON.stringify({ text: class=class="syn-string">"syn-string">"Your text here" })
});
class="syn-keyword">const data = await res.json();
console.log(data.total_invisible, data.invisible);
python
class="syn-keyword">import requests
r = requests.post(class=class="syn-string">"syn-string">"https:class=class="syn-string">"syn-comment">//api.claudewatermark.org/v1/text/scan",
json={class=class="syn-string">"syn-string">"text": class=class="syn-string">"syn-string">"Your text here"})
print(r.json()[class=class="syn-string">"syn-string">"total_invisible"])
Clean or rewrite
/v1/text/clean strips hidden characters and normalizes. /v1/text/rewrite paraphrases the text to reduce statistical watermark signal (it changes word choice; it does not guarantee removal).
bash
curl -X POST https:"syn-comment">//api.claudewatermark.org/v1/text/clean \
-H "syn-string">"Content-Type: application/json" \
-d &"syn-comment">#39;{"syn-string">"text":"syn-string">"Your text here"}39;
"syn-comment"># -> { "syn-string">"cleaned": "syn-string">"...", "syn-string">"removed_count": 0, ... }
bash
curl -X POST https:"syn-comment">//api.claudewatermark.org/v1/text/rewrite \
-H "syn-string">"Content-Type: application/json" \
-d &"syn-comment">#39;{"syn-string">"text":"syn-string">"Your text here"}39;
"syn-comment"># -> { "syn-string">"rewritten": "syn-string">"...", ... }
Strip image metadata (EXIF / XMP / C2PA)
bash
curl -X POST https:"syn-comment">//api.claudewatermark.org/v1/image/strip \
-H "syn-string">"Content-Type: image/jpeg" \
--data-binary @photo.jpg
"syn-comment"># -> { "syn-string">"format":"syn-string">"jpeg", "syn-string">"removed":[...], "syn-string">"cleaned_base64":"syn-string">"..." }
Honest note: these tools remove hidden characters and metadata, and can paraphrase text. They cannot read or guarantee removal of a statistical token-level watermark, which needs the model owner’s private key.