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

1

Get a Premium Subscription

API access is included with all premium subscriptions (weekly, monthly, or lifetime).

View pricing
2

Generate 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 page
3

Make 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

POSThttps://bqjklvkgqafwsoxujtjx.supabase.co/functions/v1/api-clean-text

Headers

HeaderRequiredDescription
AuthorizationRequiredBearer token with Supabase anon key
X-API-KeyRequiredYour API key (starts with gwrk_)
Content-TypeRequiredMust be application/json

Request Body

FieldTypeDescription
textstringThe text to clean (max 100,000 characters)

Response

{
  "cleaned_text": "Your clean text without watermarks",
  "credits_used": 156,
  "credits_remaining": 844
}
FieldDescription
cleaned_textThe text with all watermarks removed
credits_usedTotal credits used this month (after this request)
credits_remainingCredits 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.