Skip to content

Invisible watermarks for AI-generated images

Embed a watermark in the pixels of JPEG, PNG, WebP, TIFF and AVIF images, then sign the result with C2PA Content Credentials. For images, express mode returns the finished file in the same request.

Magnifying loupe revealing a hidden pattern in a photo printMagnifying loupe revealing a hidden pattern in a photo print
CR · Content Credentials
MANIFEST
Embedded · valid
WATERMARK
In the pixels or samples
RESULT
Declared origin readable

Recovery is a lead back to your signed record, not cryptographic proof. Picture: AI-generated illustration.

Image algorithms

Algorithmwatermark_algorithmC2PA soft binding
Meta PixelSeal (default)pixelsealNot registered
Adobe TrustMark Btrustmark-bNot registered
Adobe TrustMark Ctrustmark-cRegistered
Adobe TrustMark Ptrustmark-pRegistered
Adobe TrustMark Qtrustmark-qRegistered
Meta VideoSeal 1.0 (image mode)videoseal-imageNot registered

When a registered algorithm is embedded, the manifest records the watermark as a C2PA soft binding, so any validator that supports it can use the watermark to find the manifest again. The others are server-side recovery signals for your account.

Formats and limits

FormatUpload limit
JPEG25 MiB
PNG50 MiB
WebP50 MiB
TIFF128 MiB
AVIF50 MiB

HEIC, HEIF, GIF, JPEG XL, SVG and DNG are signed without decoding and take no watermark. See supported formats.

Billing

One watermark unit per image, whatever its resolution. Units are graduated per month, from $0.015 down to $0.0025, and billed separately from signing and fingerprinting.

Watermark and sign an image

The upload is the same as for signing only. Set watermark to true.

# After the upload is complete (see the quickstart):
curl -sS -X POST "$OP_API/v1/sign" \
  -H "Authorization: Bearer $OP_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d "{\"asset_id\": \"$ASSET_ID\", \"watermark\": true, \"watermark_strength\": \"balanced\"}"
# Omit watermark_algorithm for the default (pixelseal), or name one listed by GET /v1/capabilities.

Try it on your own images

Create an API key, upload an image and send one sign request with watermark set to true.