Skip to content

Reference

API Documentation

One base URL, three endpoints, JSON in and JSON out.

Authentication

Every request carries your key as a bearer token. Create one at signup; you can add, label and revoke keys from the dashboard. The plaintext key is shown once and stored only as a hash, so if you lose it, revoke it and make a new one.

Authorization: Bearer awr_live_xxxxxxxxxxxxxxxxxxxxxxxx

POST /api/v1/clean

Cleans text and returns it. This is the endpoint you will use.

curl -X POST https://aitextwatermarkremoval.com/api/v1/clean \
  -H "Authorization: Bearer $AWR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "Your AI text here"}'

Body

FieldTypeNotes
textstringRequired. Length limited by plan.
rulesobjectOptional. Any rule omitted keeps its default.
detectOnlybooleanOptional. Report without rewriting.

Rules

RuleDefaultWhat it does
invisibletrueZero-width characters, bidi controls, tag characters, private use
spacestrueFolds 16 exotic spaces to U+0020
confusablestrueCyrillic and Greek lookalikes, fullwidth forms
mathtrueMathematical alphanumerics to plain letters
punctuationfalseEm dashes and curly quotes to ASCII. Off by default: this is real punctuation, not a watermark.

POST /api/v1/detect

Same input, but reports what is there without changing it. The response has no text field.

curl -X POST https://aitextwatermarkremoval.com/api/v1/detect \
  -H "Authorization: Bearer $AWR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "Check this"}'

GET /api/v1/usage

Your plan, this period's usage and a 30-day daily breakdown.

curl https://aitextwatermarkremoval.com/api/v1/usage \
  -H "Authorization: Bearer $AWR_KEY"

Examples

JavaScript

const res = await fetch('https://aitextwatermarkremoval.com/api/v1/clean', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.AWR_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ text }),
})
const { text: cleaned, found } = await res.json()

Python

import os, requests

r = requests.post(
    "https://aitextwatermarkremoval.com/api/v1/clean",
    headers={"Authorization": f"Bearer {os.environ['AWR_KEY']}"},
    json={"text": text},
    timeout=10,
)
r.raise_for_status()
cleaned = r.json()["text"]

Errors

StatusMeaningWhat to do
400Missing or non-string textCheck the body
401Missing or invalid keyCheck the Authorization header
429Quota reached, or too many requests from one connectionRead usage in the body; upgrade or wait
503Cleaner temporarily unavailableRetry. The request is not counted against your quota.

A failed request is never billed: the quota is claimed before the work and given back if the work does not happen.

Limits

PlanRequests / monthCharacters / request
Starter100,000100,000
Growth500,000250,000
Scale2,000,000500,000

Scope

This API removes characters: invisible Unicode, non-standard spaces, lookalike letters, styled letterforms and, on request, typographic punctuation. The complete list is here.