CopySeal
API Documentation

CopySeal API Reference

Integrate invisible watermarking into your applications

Authentication

All API requests require authentication via an API key or session cookie. Include your API key in the request header:

Authorization: Bearer wsk_your_api_key_here

API keys are available on Business and Enterprise plans. Free and Creator users can use the web dashboard or session-based authentication.

Embed Watermark

Hide invisible watermark text inside an image.

POST/embed
Embed a watermark into an image file

Request

Content-Type: multipart/form-data

{
  "file":           <binary>,   // Image file (PNG, JPG, WebP, BMP)
  "watermarkText":  "string",   // Text to hide in the image
}

Response

{
  "id":           "uuid",
  "wm_shape":     42,           // Key needed for extraction
  "download_url": "/api/download/{id}", // Same-origin proxy URL — Content-Disposition carries the friendly filename
  "expires_at":   "2024-01-02T00:00:00Z"  // URL expiry (null = permanent)
}

Example (cURL)

curl -X POST https://copyseal.ink/embed \
  -H "Authorization: Bearer wsk_your_api_key" \
  -F "file=@photo.png" \
  -F "watermarkText=Copyright 2024"

Extract Watermark

Reveal the hidden watermark from a previously embedded image.

POST/extract
Extract a watermark from an image file

Request

Content-Type: multipart/form-data

{
  "file":        <binary>,  // Image file with embedded watermark
  "wmShape":     42,        // WM Shape key from embedding
}

Response

{
  "watermark_content": "Copyright 2024"
}

Example (cURL)

curl -X POST https://copyseal.ink/extract \
  -H "Authorization: Bearer wsk_your_api_key" \
  -F "file=@watermarked_photo.png" \
  -F "wmShape=42"

Embed PDF WatermarkBeta

Embed an invisible per-page cryptographic watermark into a PDF document. The watermark survives Save As, screenshots, and printing.

PDF watermarking is currently in beta. The key_id returned is unique per document and used to trace leaked copies.

POST/embed/pdf
Embed a per-page cryptographic watermark into a PDF

Content-Type must be application/pdf

Request

Content-Type: application/pdf
Authorization: Bearer wsk_your_api_key

<raw PDF binary in request body>

Response

{
  "id":           "uuid",
  "key_id":       "8f3a2b1c4d5e6f70",   // Unique per-document key_id (hex)
  "download_url": "/api/download/{id}",         // Same-origin proxy URL — Content-Disposition carries the friendly filename
  "page_count":   12,                    // Total pages in source PDF
  "pages_marked": 12,                    // Pages successfully watermarked
  "frame":        0,                     // Frame index used during embedding
  "expires_at":   "2024-01-02T00:00:00Z"
}

Example (cURL)

curl -X POST https://copyseal.ink/embed/pdf \
  -H "Authorization: Bearer wsk_your_api_key" \
  -H "Content-Type: application/pdf" \
  --data-binary "@contract.pdf" \
  -o watermarked_contract.pdf

Extract PDF WatermarkBeta

Extract the per-page key_id from a watermarked PDF. Use the key_id to trace which user/account embedded the file.

POST/extract/pdf
Extract the cryptographic key_id from a watermarked PDF

Content-Type must be application/pdf

Request

Content-Type: application/pdf
Authorization: Bearer wsk_your_api_key

<raw watermarked PDF binary in request body>

Response

{
  "key_id":    "8f3a2b1c4d5e6f70",   // Cryptographic key_id extracted
  "frame":     0,                     // Frame index where watermark was found
  "page_index": 3,                    // Page index where watermark was found
  "plaintext": "optional-payload"     // Optional embedded text (if any)
}

Example (cURL)

curl -X POST https://copyseal.ink/extract/pdf \
  -H "Authorization: Bearer wsk_your_api_key" \
  -H "Content-Type: application/pdf" \
  --data-binary "@watermarked_contract.pdf"

Returns 404 if no watermark is found or the key_id doesn't belong to the authenticated user.

Rate Limits

API rate limits depend on your subscription tier.

TierMonthly ImagesMax File SizeAPI Calls/DayBatch Limit
Free55MB----
Creator10025MB--10
Business50050MB10050
Enterprise2,000100MBUnlimited500

Error Codes

401Unauthorized - Invalid or missing API key
403Forbidden - Feature not available on your plan
429Too Many Requests - Monthly image limit reached
500Internal Server Error - Processing failed

Ready to get started?

Create a free account and start protecting your images.