DeWatermark A small darkroom for your photos

Developer API

Same engine, your pipeline.

Generate a key after signing in. API requests spend account credits, use your plan's size limits, and are rate-limited per key.

Open API docs

API keys

Create a key for backend use. The secret is shown once, then only the prefix is stored. Default limit: 20 requests/minute and 500 requests/day per key.

1. Create cleanup job

The cleanup endpoint requires both an image and a black/white mask. White pixels are removed. Bring your own mask for the best API results.

POST /api/create-job
Authorization: Bearer dw_live_...
Content-Type: application/json

{
  "image": "data:image/png;base64,...",
  "mask": "data:image/png;base64,...",
  "width": 1200,
  "height": 800,
  "quality": "standard",
  "ownershipAccepted": true
}

2. Optional suggestion beta

The detector can suggest a starting mask, but production API workflows should still review or provide a precise mask.

POST /api/detect-watermark
Authorization: Bearer dw_live_...
Content-Type: application/json

{
  "image": "data:image/png;base64,...",
  "width": 1200,
  "height": 800
}

JavaScript example

Use API keys only from your backend. Browser clients should use the web app auth flow.

const response = await fetch(
  "https://dewatermark.com/api/create-job",
  {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${process.env.DEWATERMARK_API_KEY}`,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      image,
      mask,
      width,
      height,
      quality: "standard",
      ownershipAccepted: true
    })
  }
);

const job = await response.json();

Python example

Pass data URLs or public image URLs. For best results, provide a precise mask.

import os, requests

res = requests.post(
  "https://dewatermark.com/api/create-job",
  headers={
    "Authorization": f"Bearer {os.environ['DEWATERMARK_API_KEY']}"
  },
  json={
    "image": image,
    "mask": mask,
    "width": 1200,
    "height": 800,
    "quality": "standard",
    "ownershipAccepted": True
  }
)

print(res.json())

Limits and billing

Each API request counts against per-key rate limits. Cleanup jobs also spend account credits based on image size and quality.

  • 20 requests per minute per key
  • 500 requests per day per key
  • Standard cleanup starts at 1 credit
  • Premium cleanup uses more credits

Sign in

Welcome back to the darkroom.

Keep credits, downloads, and billing connected across sessions.

or

Testimonial

Tell us what DeWatermark helped with.

Real notes from signed-in users help us earn trust without making anything up.