Limited time — 50% off Pro

Watermark anything, via API or no-code.

Drop a file in the editor or hit one endpoint from your code. Image, video, and PDF watermarks at production scale — burned into pixels, not metadata.

Images
Video
PDFs
  • No signup for the editor
  • Sub-second image latency
  • Free tier · 100 calls/mo

How it works

From upload to watermarked, in one call

Whether you have ten files or ten thousand, the flow is the same.

1,000+ Files Uploaded

Applying global watermark layout instantly...

0% Complete

Features

Everything you need to ship watermarking

No glue code, no FFmpeg containers, no ImageMagick CVEs.

Text & image overlays

Drop text or upload a logo. Full control over font, color, opacity, rotation, and per-edge padding.

Drag to position

Nine presets, freeform drag, or fractional coordinates from the API. Pixel-perfect placement.

Tiled / diagonal

Repeat the watermark across the whole canvas with configurable angle and gap — crop-proof protection.

Opacity & blend

Subtle from 5% to bold at 100%. Preserves alpha channels and original color profiles.

Sync + async

Images and PDFs return instantly. Videos queue on dedicated FFmpeg workers — poll for progress.

Batch processing

Upload up to 20 files in one call, get a ZIP back. Or fire 10k calls in parallel from the API.

Clean REST API

One endpoint per format. Multipart for files, JSON for jobs. Same shape across cURL, Node, Python.

Tracked & metered

Every request is logged with status, latency, file size, and source. Dashboard or via the usage API.

Developer-first

One endpoint. Any language.

POST a file and a config. Get a watermarked file back. No SDK lock-in — works the same from cURL, fetch, requests, Go, anything that speaks HTTP.

  • API key auth · per-key rate limits
  • Multipart for files, JSON for video jobs
  • Same params across image, video, PDF
  • Webhook-style polling for async jobs
  • Usage logged per call with latency + size
  • OpenAPI spec at /api/openapi.json
cURL
curl -X POST https://api.apiwatermark.com/watermark \
  -H "Authorization: Bearer aw_••••••••" \
  -F "image=@photo.jpg" \
  -F "text=© MyBrand" \
  -F "position=bottom-right" \
  -F "opacity=0.5" \
  -o watermarked.jpg
JavaScript
const form = new FormData();
form.append("image", file);
form.append("text", "© MyBrand");
form.append("position", "bottom-right");

const res = await fetch("https://api.apiwatermark.com/watermark", {
  method: "POST",
  headers: { Authorization: `Bearer ${API_KEY}` },
  body: form,
});

const watermarked = await res.blob();
Python
import requests

with open("photo.jpg", "rb") as f:
    res = requests.post(
        "https://api.apiwatermark.com/watermark",
        headers={"Authorization": f"Bearer {API_KEY}"},
        files={"image": f},
        data={"text": "© MyBrand", "position": "bottom-right"},
    )

open("watermarked.jpg", "wb").write(res.content)

Use cases

Built for real workflows

Photographers

Stamp proofs before sending galleries. Batch 200 photos, get a ZIP, deliver client-safe previews.

200 photos → batch endpoint → ZIP

E-commerce platforms

Auto-brand every product image on upload. One API call between your CDN and your storage.

Image uploaded → API → branded image stored

Document platforms

Burn the viewer's email + IP into every page of a PDF before serving it. Audit-trail built in.

User opens PDF → stamp with their email → serve

Start watermarking in 60 seconds

Free up to 100 calls a month. No credit card. Drop a file in the editor or hit the API right now.