CLAUDE WATERMARK REMOVER.

Clean Claude text
from code.

One endpoint. JSON in, cleaned text out. €0.0005 per request, billed separately from your web allowance.

POST https://removeclaudewatermark.net/v1/remove-watermark

01 / Start

Get a key in three steps.

  1. 1

    Enable billing

    Turn on metered API billing from your account. One Stripe checkout, then you are done.

  2. 2

    Create a key

    Generate a key on the same page. It starts with cwr_ and is shown once — copy it right away.

  3. 3

    Call the endpoint

    Swap YOUR_API_KEY into any example below. Each successful request is metered.

02 / Examples

Copy, paste, run.

curl -X POST "https://removeclaudewatermark.net/v1/remove-watermark" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "Hello\u200b world", "mode": "careful"}'

The examples send \u200b, a zero-width space, so you can see a finding in the response. Cleaning plain text is valid and simply returns an empty findings array.

03 / Reference

Request and response fields.

Request body

FieldTypeNotes
textstringRequired. The Claude text to clean. The whole request body must stay under 2 MB.
modestringOptional. careful (default) removes hidden Unicode only. thorough also rewrites the wording and accepts up to 20,000 characters.

Response body

FieldTypeNotes
textstringThe cleaned result, NFC normalized.
inspection_textstringThe text the findings describe. Your original input in careful, the rewritten text in thorough.
modestringThe mode that ran.
input_characters
output_characters
integerLength before and after cleaning.
removed_charactersintegerHow many characters were removed.
normalizedbooleanWhether NFC normalization changed the text on top of the removals.
findingsarrayOne entry per code point and outcome, with codepoint, tag, label, note, count, positions (first 8, 1-based), action (removed or preserved) and sensitive. Marks inside emoji sequences are preserved, not removed.
billingobjectmetered, price_eur_per_request and the stripe_usage_record_id for this call. The record id is null if Stripe could not be reached; the call is still logged for reconciliation.
rewrite
source_characters
object, integerthorough only. rewrite reports requested, applied, model and a warning when the wording pass was skipped and only Unicode cleaning ran.

04 / Errors

What can go wrong.

StatusCodeFix
401api_key_requiredAdd the Authorization: Bearer header.
401api_key_invalidKey is wrong or revoked. Create a new one.
402api_billing_requiredEnable metered API billing on your account.
429api_rate_limit_reachedWait for the Retry-After header value.
400No code field. Send a JSON object whose text is a string and whose mode is careful or thorough.
400thorough_text_requiredthorough needs text that is not blank.
413thorough_text_too_largeOver the max_characters returned in the body. Shorten it or use careful.
413The request body itself is over 2 MB.
503thorough_unavailableThorough is off on this server. Use careful.

Errors carry a human-readable error string, and a stable code wherever the table lists one. Rate limiting allows 60 requests per 60 seconds by default, counted per key and per account, so a second key does not raise your account ceiling. Only requests that reach cleaning are metered; rejected requests are never billed.