Make every leaked lesson name the leaker
Piracy groups resell course bundles within days of launch, and DMCA whack-a-mole doesn't scale. What changes behavior is personalization: when every PDF page and video frame carries the buyer's own email, sharing the files means signing the leak.
A typical run
Input
Lesson 4 workbook + buyer checkout event
Watermark
'Licensed to jane@doe.com' on every page, per download
Output
Each buyer gets their own personalized copy
What unbranded images cost course creators
Your launch funds someone else's store
Course rips surface on Telegram channels and 'group buy' sites selling your $400 program for $15. Every anonymous copy you shipped is inventory for them; every personalized copy is a liability they can't resell cleanly.
Takedowns don't scale, deterrence does
You can DMCA one channel a week forever. Buyer-level watermarking works upstream: the person deciding whether to upload your files knows their name is on every page. Most leaks simply don't happen.
Manual personalization is impossible
You can't hand-stamp a workbook per student. This only works as automation: your platform's purchase webhook calls the API with the buyer's email, and delivery serves the personalized file.

The workflow that sticks
The pattern is per-download personalization: hook your checkout or LMS delivery event, watermark the master file with the buyer's identity, serve the result. PDFs process in real time at download; videos render once per buyer as background jobs.
- 1
Hook the purchase or download event
Teachable/Podia webhooks, your own LMS, or a signed download route — anywhere you know who's fetching the file is the right place for the call.
- 2
Stamp the buyer's identity
Send the master PDF plus text like 'Licensed to {email} · order #{n}'. Footer placement at moderate opacity keeps the workbook perfectly usable while making it unmistakably personal.
- 3
Serve the personalized copy
The API returns the marked file for your delivery flow. Cache per-buyer copies if students re-download; masters stay in your private storage.
- 4
Batch the video library per cohort
For video lessons, queue jobs with a cohort or buyer mark — rendering happens on our FFmpeg workers, and your platform serves each cohort its own set.
// On purchase webhook — personalize the lesson PDF
const form = new FormData();
form.append("image", workbookPdf); // PDFs use the same endpoint
form.append("type", "text");
form.append("text", `Licensed to ${buyer.email}`);
form.append("position", "bottom-center");
form.append("opacity", "0.5");
const res = await fetch("https://apiwatermark.com/api/watermark", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.WATERMARK_KEY}` },
body: form,
});
await storage.put(`delivery/${order.id}/workbook.pdf`, await res.arrayBuffer());FAQ
Course Creators ask us
Does buyer watermarking actually reduce piracy?
+
Will students find the watermark intrusive?
+
How does per-buyer video watermarking cost out?
+
What if a leak happens anyway?
+
Protect your next batch in minutes
Free up to 100 calls a month. No credit card. Start in the editor or wire up the API.