API reference

PDF watermarking

PDF watermarking API reference: watermark PDF pages while keeping text selectable and vector content intact. Pages are not flattened. Up to 20 MB, 8 pages.

POST/watermarks/documents
Upload
20 MB · 8 pages
Output
Selectable PDF
CPU cost
1 credit / page

Request

Send a PDF and a JSON reference object that is not empty. Your API key needs the watermarks:embed permission.

Shell
curl --fail-with-body https://api.etchv.com/watermarks/documents \
  -H "X-API-Key: $ETCHV_API_KEY" \
  -H "Idempotency-Key: investor-preview-42" \
  -F 'file=@presentation.pdf' \
  --form-string 'data={"delivery":"investor-preview-42"}' \
  -D response-headers.txt --output response-body

A 200 response returns the watermarked PDF. A 202 response returns a job receipt instead, so check the status before you save the body as a PDF. Save the watermark ID from the X-Watermark-ID header with your record. Response headers and request options.

Choose sync or async

OperationEndpoint
EmbedPOST /watermarks/documents
DetectPOST /watermarks/documents/detect with file and watermarks:detect
Background embed / detectAppend /async to either endpoint
Embed
Endpoint
POST /watermarks/documents
Detect
Endpoint
POST /watermarks/documents/detect with file and watermarks:detect
Background embed / detect
Endpoint
Append /async to either endpoint

Async requests support webhook_id. Both modes support accelerator=gpu on Business and Enterprise plans. Embedding also supports storage_destination_id and storage_key. Jobs · GPU · Storage.

Supported files

RequirementLimit
DocumentPassive, unencrypted PDF; 1–8 unrotated pages with standard page units
Upload / output / detection20 MB / 64 MB / 64 MB
Rendered pixels at 144 dpi4 MP per page; 16.8 MP total, enough for eight A4 or US Letter pages
Page contentText, vectors, scanned images or a mixture
UnsupportedForms, digital signatures, active content and annotation types not listed below
Document
Limit
Passive, unencrypted PDF; 1–8 unrotated pages with standard page units
Upload / output / detection
Limit
20 MB / 64 MB / 64 MB
Rendered pixels at 144 dpi
Limit
4 MP per page; 16.8 MP total, enough for eight A4 or US Letter pages
Page content
Limit
Text, vectors, scanned images or a mixture
Unsupported
Limit
Forms, digital signatures, active content and annotation types not listed below

Text stays searchable and selectable. Fonts, vectors, page sizes, supported annotations and document metadata stay the same. The watermark is stored in added textures, which can make the file larger. Editing the layout or removing those textures can affect recovery.

Annotations, attachments and active content
  • Retained: links, text notes, popups and static PlyBorder annotations, including relationships and appearance streams. Borders need a normal Form appearance; actions on notes, popups and borders are unsupported.
  • JSON attachments: retained byte-for-byte, not watermarked. Require a .json name, application/json type and valid UTF-8 JSON object/array. Maximum 64 nesting levels, 64 KB each, 256 KB total and 16 files.
  • Removed: document/page open actions, additional actions and document-level JavaScript that run automatically.
  • Rejected: other active content (including scripts on links), non-JSON attachments, forms and digital signatures. Scanned handwritten signatures are ordinary page content.

Annotations are retained separately and do not receive their own watermark.

Rendering and verification

Etchv must detect the exact watermark on each final page. Each page must also meet 35 dB PSNR, a measure of how close the result looks to the original. Etchv checks this with two PDF rendering engines, using a standard 144 dpi RGB rendering with annotations hidden. Two blended textures carry the watermark; pages are not flattened.

Embed fonts in your source PDFs so they render the same everywhere. Etchv does not add fonts to your PDF. Its verification render uses standard substitute fonts, and other viewers may choose different ones. Printing, re-saving and edits can affect recovery.

Billing and results

  • Embed: one CPU credit per page, so an eight-page PDF costs 8. If the request fails, the reserved credits are refunded.
  • Detect: one CPU credit per PDF, whatever its page count. units reports each page. The top-level watermark ID is present only when Etchv finds the same watermark on every page.
  • Retrieve: job results last 24 hours. A retry with the same idempotency key returns the saved file without another charge.

SDKs

SDKEmbed / detect
Pythonembed_document / detect_document
Node.jsembedDocument / detectDocument
Python
Embed / detect
embed_document / detect_document
Node.js
Embed / detect
embedDocument / detectDocument

In these SDKs, the image field contains the PDF bytes. Save the file using the returned filename and the application/pdf content type. The other SDKs also support PDFs. DOCX and PPTX are not yet supported.

Asset library

X-Asset-ID identifies the saved output. X-Source-Asset-ID identifies the original. Manage files and retention.

View source on GitHub

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