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_xxxxxxxxxxxxxxxxxxxxxxxxPOST /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
| Field | Type | Notes |
|---|---|---|
text | string | Required. Length limited by plan. |
rules | object | Optional. Any rule omitted keeps its default. |
detectOnly | boolean | Optional. Report without rewriting. |
Rules
| Rule | Default | What it does |
|---|---|---|
invisible | true | Zero-width characters, bidi controls, tag characters, private use |
spaces | true | Folds 16 exotic spaces to U+0020 |
confusables | true | Cyrillic and Greek lookalikes, fullwidth forms |
math | true | Mathematical alphanumerics to plain letters |
punctuation | false | Em 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
| Status | Meaning | What to do |
|---|---|---|
| 400 | Missing or non-string text | Check the body |
| 401 | Missing or invalid key | Check the Authorization header |
| 429 | Quota reached, or too many requests from one connection | Read usage in the body; upgrade or wait |
| 503 | Cleaner temporarily unavailable | Retry. 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
| Plan | Requests / month | Characters / request |
|---|---|---|
| Starter | 100,000 | 100,000 |
| Growth | 500,000 | 250,000 |
| Scale | 2,000,000 | 500,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.