Invisible PDF watermarking API

Send a PDF and a reference. You get a PDF back with its text, fonts and drawings untouched, and an invisible watermark on every page.

Switch between the original and the watermarked page, show its text, then look at the difference.

spacex-page-42.pdf960 × 540 pt
Watermarked page. Close-up of a slide: two columns of white text over a night sky with a rocket trailAfter: the PDF the API returned
47.5 dB
PSNR of the whole page at 144 dpi
806 of 806
characters of text identical afterwards
1 overlay
added; the page’s own drawing code is untouched
A real API result: page 42 of a public SpaceX roadshow deck, shown as a close-up rendered by PDFium and stored losslessly. One example, not a guarantee for every document. No affiliation with SpaceX.

Still a PDF, part by part.

Etchv adds one thin layer to each page: two faint textures that blend into what is already there. Pages are never turned into flat images. Everything else is kept, removed or refused.

Kept as it was

Checked before delivery, or carried through untouched.

  • Text: still selectable and searchable, and identical when extracted
  • The page’s own drawing instructions, so vectors stay vectors
  • Fonts, exactly as the file had them
  • Page count and page sizes
  • Scanned pages and embedded images
  • Links, text notes and popups
  • JSON attachments, byte for byte

Removed

Taken out of the watermarked copy instead of refusing the file.

  • Actions a viewer runs by itself when the document or a page opens
  • Document-level JavaScript

Refused

You get an error and no charge. Nothing is changed silently.

  • Encrypted or password-protected PDFs
  • Digitally signed PDFs
  • Forms
  • Rotated pages
  • Other annotation types, and scripts on links
  • Attachments that aren’t JSON
1–8
pages per PDF
20 MB
going in
64 MB
coming out, and for detection
4 MP
per page at 144 dpi: A4 and US Letter fit

Files grow. The textures are stored for every page. The example above went from 319 KB to 690 KB.

Include your fonts in the PDF. Etchv leaves fonts alone. If a PDF doesn’t include its fonts, each PDF app draws it with its own replacements, as it does today.

Supported PDFs and limits

Every page, read back twice.

PDF apps don’t all draw a page the same way. So before a job succeeds, Etchv draws every page of the finished file with two different PDF engines and reads the watermark back from both.

A page that fails gets one more attempt. If it still fails, so does the job.

In the published benchmark, 1 of 6 test PDFs was refused at this check in 3 of 10 runs rather than delivered.

How PDFs are verified

Checked on the finished PDF

The document

  • Same number of pages, same page sizes
  • Extracted text identical on every page

Each page

  • Rendered at 144 dpi by two independent engines, PDFium and Poppler
  • At least 35 dB PSNR against your original, in both
  • The exact watermark read back from the page, in both
200
Every page passed. You receive the PDF.
422
A page failed. You receive an error, never a document.

Find the watermark again, page by page.

Send a PDF to the detect endpoint and get a result for every page. The file counts as watermarked only when every page returns the same watermark, so swapped or missing pages show up instead of hiding.

No original needed

Each page carries a random lookup code. Etchv keeps the link from that code to your watermark ID, so you only send the copy you found.

From an image of a page

An image of a whole page can go to image detection. In the saved run behind the example above, a 1440 × 810 PNG of the page returned the exact watermark.

What isn’t promised

An image of part of a page usually keeps too little of the watermark, and Etchv then reports no watermark rather than guess. Printing, re-saving in other software and edits can stop recovery too. Etchv has measured three digital changes to a page so far, and no prints or scans.

The packet on a page256 bits
  • Headermarks it as an Etchv packet32
  • Lookup tokenrandom; Etchv links it to your watermark ID96
  • Error correctionrepairs the rest124

Repairs up to 16 wrong bits. If a page’s packet can’t be verified, the page carries the full 256-bit watermark instead.

Saved run · image detection

page-42-capture.png1440 × 810 PNG of the whole page

fb25a14e…900912Exact ID recovered, 0.9996 confidence

How long it takes. What it costs.

PDF watermarking is part of the Growth plan and above, and of the free trial.

Measured on the live API

  • EmbedCPU8.6 s
  • EmbedGPU, on Business and Enterprise6.8 s
  • DetectCPU2.2 s

Median time to finish one request at a time, measured September 29, 2026 on 6 test PDFs of up to eight pages. A PDF near the size limit can take a minute or more. Across every published run, 855 of 855 operations on accepted PDFs completed.

Performance benchmarks

Credits for PDFs

1
credit per page watermarked: an eight-page PDF is eight credits
1
credit per PDF checked, whatever its page count, found or not
0
for refused or failed PDFs, retries with the same idempotency key and result downloads
3×
credits on GPU, or the standard rate if the request runs on CPU instead
Plans and credits

Two requests. One for each direction.

Embed when a document goes out. Detect when a copy comes back.

RequestPOST /watermarks/documents
curl --fail-with-body https://api.etchv.com/watermarks/documents \
  -H "X-API-Key: $ETCHV_API_KEY" \
  -H "Idempotency-Key: delivery_0084" \
  -F 'file=@board-pack.pdf' \
  -F 'data={"delivery":"delivery_0084"}' \
  -D response-headers.txt \
  --output response-body
Response200 · application/pdf
HTTP/2 200
content-type: application/pdf
content-disposition: attachment;
  filename="board-pack-watermarked.pdf"
x-watermark-id: ea112880a8774fd1a251…b57654f3

# On 200 the body is the watermarked PDF.
# Save the full 64-character watermark ID with your record.
# A 202 body is a job receipt instead.
RequestPOST /watermarks/documents/detect
curl --fail-with-body https://api.etchv.com/watermarks/documents/detect \
  -H "X-API-Key: $ETCHV_API_KEY" \
  -F 'file=@found-copy.pdf'
Response200 · application/json
{
  "watermarked": true,
  "watermark_id": "ea112880a8774fd1a251…b57654f3",
  "confidence": 0.98,
  "units": [
    { "index": 0, "watermarked": true, "confidence": 0.99,
      "watermark_id": "ea112880a8774fd1a251…b57654f3" },
    { "index": 1, "watermarked": true, "confidence": 0.98,
      "watermark_id": "ea112880a8774fd1a251…b57654f3" }
  ]
}

One document. A copy for each reader.

The pattern is the same wherever a document goes to more than one person. What changes is the record the watermark leads to.

  • Boards and leadership

    Board packs

    Each director gets their own copy of the pack. If a page reaches the press, it can lead back to one copy, not to the whole board.

    The watermark leads toDirector’s copy
  • Deals and data rooms

    CIMs and term sheets

    Bidders download clean documents with no stamp to crop out. Every download is a different copy.

    The watermark leads toBidder and download
  • Investor relations

    Drafts before filing

    Earnings drafts, roadshow decks and filings circulate under embargo among advisers. Each adviser’s copy carries its own watermark.

    The watermark leads toAdviser and draft
  • Legal

    Settlement drafts and productions

    The same document goes to several parties. A page that surfaces can lead back to the party it was produced to.

    The watermark leads toParty and production
  • Research and publishing

    Paid reports

    Subscribers receive a normal PDF they can read anywhere. A copy passed around a group chat can still lead back to its subscription.

    The watermark leads toSubscription
  • Studios

    Scripts and treatments

    Scripts go to cast, crew and vendors as PDFs. A page posted online can lead back to the copy it came from.

    The watermark leads toRecipient’s copy

Design a recipient attribution workflow

Every copy.
Its own watermark.

Start with 200 free credits: enough to watermark 200 pages.

7 days · 200 credits · No card required

Your privacy, your choice

We use essential cookies to keep Etchv working. Optional analytics helps us improve the site. Analytics is on by default; you can turn it off in preferences. PostHog loads only if you accept all. Privacy policy

ETCHV

Privacy preferences

Choose what you allow on this browser. Analytics is enabled by default. You can turn it off, and change your choice at any time.

Essential

Always active

Supports secure sign-in, account sessions, site security, and remembering your privacy choice. These are needed for Etchv to work.

Analytics

Helps us understand visits and improve the website using page-view and device statistics, which do not use cookies. PostHog also measures visits and campaigns and may set cookies; it loads only after you save a choice with analytics on. Turning this off stops future analytics events.

We do not load advertising scripts. Meeting calendars load only when you open them. These preferences do not change your account, watermarking requests, or asset storage.

Your choice is remembered for 180 days on this browser. Privacy policy