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.
- 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
| Algorithm | watermark_algorithm | C2PA soft binding |
|---|---|---|
| Meta PixelSeal (default) | pixelseal | Not registered |
| Adobe TrustMark B | trustmark-b | Not registered |
| Adobe TrustMark C | trustmark-c | Registered |
| Adobe TrustMark P | trustmark-p | Registered |
| Adobe TrustMark Q | trustmark-q | Registered |
| Meta VideoSeal 1.0 (image mode) | videoseal-image | Not 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
| Format | Upload limit |
|---|---|
| JPEG | 25 MiB |
| PNG | 50 MiB |
| WebP | 50 MiB |
| TIFF | 128 MiB |
| AVIF | 50 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.

