Developer Documentation
Programmatically remove invisible AI watermarks from text using our REST API. Perfect for automating content workflows at scale.
Why Use the API?
Automate at Scale
Process thousands of documents automatically. Integrate watermark removal into your content pipeline, CMS, or publishing workflow.
Same Detection Engine
Uses the exact same watermark detection and removal logic as our web app. Catches 40+ invisible Unicode characters used by AI systems.
Simple REST Interface
One endpoint, one header, one JSON field. Works with any programming language that can make HTTP requests.
1,000 Calls/Month
Every premium subscription includes 1,000 API calls per month. Credits reset automatically on the 1st of each month.
Getting Started
Get a Premium Subscription
API access is included with all premium subscriptions (weekly, monthly, or lifetime).
View pricingGenerate Your API Key
Go to your subscription management page and click "Generate API Key". Your key will be shown only once, so save it securely.
Go to subscription pageMake API Requests
Include your API key in the X-API-Key header and send a POST request with your text.
Regenerating Your API Key
If you need a new API key (e.g., if your key was compromised), go to the subscription page and click "Regenerate Key". This will immediately revoke your old key and generate a new one. Any requests using the old key will fail.
API Reference
Endpoint
https://bqjklvkgqafwsoxujtjx.supabase.co/functions/v1/api-clean-textHeaders
| Header | Required | Description |
|---|---|---|
| Authorization | Required | Bearer token with Supabase anon key |
| X-API-Key | Required | Your API key (starts with gwrk_) |
| Content-Type | Required | Must be application/json |
Request Body
| Field | Type | Description |
|---|---|---|
| text | string | The text to clean (max 100,000 characters) |
Response
{
"cleaned_text": "Your clean text without watermarks",
"credits_used": 156,
"credits_remaining": 844
}| Field | Description |
|---|---|
| cleaned_text | The text with all watermarks removed |
| credits_used | Total credits used this month (after this request) |
| credits_remaining | Credits remaining this month |
Error Responses
// 401 Unauthorized - Missing or invalid API key
{ "error": "Invalid API key" }
// 403 Forbidden - No active subscription
{ "error": "Active subscription required to use the API" }
// 429 Too Many Requests - Credit limit exceeded
{
"error": "Monthly API credit limit exceeded",
"used": 1000,
"limit": 1000,
"resets_at": "2025-02-01T00:00:00.000Z"
}
// 400 Bad Request - Invalid input
{ "error": "Missing or invalid \"text\" field in request body" }
{ "error": "Text exceeds maximum length of 100,000 characters" }Code Examples
cURL
curl -X POST \
'https://bqjklvkgqafwsoxujtjx.supabase.co/functions/v1/api-clean-text' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImJxamtsdmtncWFmd3NveHVqdGp4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDkwNTQ2MzYsImV4cCI6MjA2NDYzMDYzNn0.x_rZafJnNu1a_vovrAbEXSzQSUQ9b_E_4qShKAhHkls' \
-H 'X-API-Key: gwrk_your_api_key_here' \
-H 'Content-Type: application/json' \
-d '{"text": "Your text with hidden watermarks here"}'Python
import requests
API_KEY = "gwrk_your_api_key_here"
ANON_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImJxamtsdmtncWFmd3NveHVqdGp4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDkwNTQ2MzYsImV4cCI6MjA2NDYzMDYzNn0.x_rZafJnNu1a_vovrAbEXSzQSUQ9b_E_4qShKAhHkls"
API_URL = "https://bqjklvkgqafwsoxujtjx.supabase.co/functions/v1/api-clean-text"
def clean_text(text: str) -> str:
"""Remove invisible AI watermarks from text."""
response = requests.post(
API_URL,
headers={
"Authorization": f"Bearer {ANON_KEY}",
"X-API-Key": API_KEY,
"Content-Type": "application/json"
},
json={"text": text}
)
response.raise_for_status()
return response.json()["cleaned_text"]
# Example usage
dirty_text = "Hello world with hidden watermarks"
clean = clean_text(dirty_text)
print(f"Cleaned: {clean}")JavaScript / Node.js
const API_KEY = "gwrk_your_api_key_here";
const ANON_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImJxamtsdmtncWFmd3NveHVqdGp4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDkwNTQ2MzYsImV4cCI6MjA2NDYzMDYzNn0.x_rZafJnNu1a_vovrAbEXSzQSUQ9b_E_4qShKAhHkls";
const API_URL = "https://bqjklvkgqafwsoxujtjx.supabase.co/functions/v1/api-clean-text";
async function cleanText(text) {
const response = await fetch(API_URL, {
method: "POST",
headers: {
"Authorization": `Bearer ${ANON_KEY}`,
"X-API-Key": API_KEY,
"Content-Type": "application/json"
},
body: JSON.stringify({ text })
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || "Failed to clean text");
}
return response.json();
}
// Example usage
const result = await cleanText("Your text here");
console.log("Cleaned text:", result.cleaned_text);
console.log("Credits remaining:", result.credits_remaining);Rate Limits & Quotas
- 1,000 API calls per month included with every premium subscription
- 100,000 characters maximum per request
- Credits reset automatically on the 1st of each month at 00:00 UTC
- Check your remaining credits on the subscription page
Ready to Get Started?
Subscribe to get API access, then generate your key and start cleaning text programmatically.