Paid by credits
Upscaling requires a signed-in account and spends credits based on input size and scale factor.
404 · frame missing
The link may be old, but your cleanup workflow is still here.
Repair studio
Start automatically. You will only see the selection tools if the mark needs a closer look.
History
Private to this browser. Open any result for a larger before / after view.
AI image upscaler
Use credits to upscale images after cleanup, product prep, or archive repair. DeWatermark keeps enhancement private, account-based, and tied to your credits.
Upscaling requires a signed-in account and spends credits based on input size and scale factor.
Your browser sends the image to DeWatermark, and the enhancement runs through the same protected backend flow as cleanup.
Clean the watermark first, then upscale the finished image for larger listings, client previews, or archives.
Credit tool
Upload a JPG, PNG, WebP, or AVIF. Choose 2x or 4x, confirm rights, and spend credits only when the backend accepts the job.
Add an image to begin.
Watermark remover API
Use DeWatermark API keys to send image and mask payloads from your backend, detect likely marks, process repeat cleanup jobs, and spend the same credits your team uses in the web studio.
POST /api/create-job
POST /api/detect-watermark
POST /api/upscale-image
GET /api/api-keys
Batch watermark remover
For product photos, catalog repairs, archive date stamps, and repeated overlays, DeWatermark is batch-ready through the API today. Send image and mask payloads from your backend, spend account credits, and keep the web studio for review work.
Consistent corner logos, date stamps, labels, mockup marks, product-photo overlays, and cleanup queues where the mask pattern is predictable.
Create an API key, submit each image with a black-and-white mask, and let DeWatermark return a cleaned result while enforcing account limits.
The first web batch flow will target short, practical Pro jobs: upload a set, reuse or adjust masks, then review before final download.
Web batch MVP
Upload a set, choose a reusable mask pattern, confirm rights, and DeWatermark will process the files one by one with the same cleanup endpoint used by the studio.
Add images to build a queue.
Pro waitlist
Stills are shipping now. Video is in research — frame-consistent masking, short clips first, and a Pro-only queue. Tell us what you'd run through it and we'll prioritize accordingly.
Account
Sign in to see your plan and manage your subscription.
Current plan
Sign in with the email you used at checkout to recover an unclaimed credit pack.
Auto-reload
Save a card and we'll quietly top up credits before you run out. Cancel anytime.
Add a card once. We'll charge it for the pack you pick whenever your balance dips.
You're billed only when a top-up runs. We charge the pack amount, never per credit.
Need help?
Open a support ticket and we'll dig into your account. Refunds within reason on misfired credits, of course.
Support
Send a short ticket with the issue, order context, or API behavior you'd like us to inspect. Real people, fast turnaround.
Sign in to view support tickets.
Developer API
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 docsCreate 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.
Send an image, a matching black/white mask, and a unique Idempotency-Key. White pixels are repaired. HTTP 202 returns a job_id; poll GET /api/repairs/{job_id} for completion. Retry an uncertain submission with the same key and identical input.
POST /api/create-job
Authorization: Bearer dw_live_...
Idempotency-Key: unique-request-id-0001
Content-Type: application/json
{
"image": "data:image/png;base64,...",
"mask": "data:image/png;base64,...",
"width": 1200,
"height": 800,
"quality": "standard",
"ownershipAccepted": true
}
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,
"pipeline": "v2"
}
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}`,
"Idempotency-Key": crypto.randomUUID(),
"Content-Type": "application/json"
},
body: JSON.stringify({
image,
mask,
width,
height,
quality: "standard",
ownershipAccepted: true
})
}
);
if (!response.ok) throw new Error("Submission failed");
let job = await response.json();
while (!["complete", "failed", "cancelled"].includes(job.status)) {
await new Promise(resolve => setTimeout(resolve, 2500));
const status = await fetch(
`https://dewatermark.com/api/repairs/${job.job_id}`,
{headers: {Authorization: `Bearer ${process.env.DEWATERMARK_API_KEY}`}}
);
if (!status.ok) throw new Error("Status unavailable; retry later");
job = await status.json();
}
if (job.status !== "complete") throw new Error(job.error);
// Download job.result_url; it expires in five minutes.
Pass data URLs or public image URLs. For best results, provide a precise mask.
import os, time, uuid, requests
res = requests.post(
"https://dewatermark.com/api/create-job",
headers={
"Authorization": f"Bearer {os.environ['DEWATERMARK_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4())
},
json={
"image": image,
"mask": mask,
"width": 1200,
"height": 800,
"quality": "standard",
"ownershipAccepted": True
}
)
res.raise_for_status()
job = res.json()
while job["status"] not in ("complete", "failed", "cancelled"):
time.sleep(2.5)
status = requests.get(
f"https://dewatermark.com/api/repairs/{job['job_id']}",
headers={"Authorization": f"Bearer {os.environ['DEWATERMARK_API_KEY']}"},
timeout=30,
)
status.raise_for_status()
job = status.json()
if job["status"] != "complete":
raise RuntimeError(job.get("error", "Repair failed"))
print(job["result_url"])
Cleanup submissions count against per-key rate limits and spend credits based on image size and quality. Status polling does not consume the submission allowance. Completed files remain private for seven days; signed download links last five minutes and can be refreshed by reading the job again.
API pricing
Plan a cleanup budget without a sales call. Public rates, the same credits in the browser and backend, and hash-only API keys you can rotate at any time.
ceil(processed megapixels) credits. Best Repair costs ceil(processed megapixels × 2). A 4MP Balanced repair costs 4 credits; downloading never costs extra. Upscaling has its own credit cost; see the docs.
API calls spend the same credit pool as your studio cleanups. No separate billing dashboard, no "API plan" upsell — flip between web review and backend automation in one account.
Each key gets a per-minute and per-day limit, viewable in your account. Pro and Business plans get higher ceilings; raise further with a support ticket if your job profile demands it.
Keys are stored as SHA-256 hashes — we can't read your secret after creation. Lose it, rotate it; we'll never email you the key back. Create one →
The public price is the price. Start with a small pack, measure real image costs, then subscribe only when the volume is predictable.
Exact cost depends on processed megapixels and quality. Use the estimator in the studio before you run a repair.
API docs
Use DeWatermark from your backend for permitted image cleanup. Create an API key, submit an image with a black-and-white mask, and receive the cleaned result while credits and rate limits stay attached to your account.
POST https://dewatermark.com/api/create-job
Authorization: Bearer dw_live_...
Idempotency-Key: unique-request-id-0001
Content-Type: application/json
{
"image": "data:image/png;base64,...",
"mask": "data:image/png;base64,...",
"width": 1200,
"height": 800,
"quality": "standard",
"ownershipAccepted": true
}
Generate keys in the API section after signing in. Store keys on your backend only; browser clients should use the web app auth flow.
White pixels are removed and black pixels are preserved. Precise masks produce more predictable results than broad boxes.
Default key limits are 20 requests per minute and 500 requests per day. Cleanup jobs spend credits based on size and quality.
Signed-in accounts can call POST /api/upscale-image with image, width, height, scale, and ownershipAccepted. Upscaling spends credits just like cleanup jobs.
Admin
Visible only to codyberlin@gmail.com.
Manage tickets in the dedicated Support console.
Support
Triage, reply context, and resolve customer tickets.