Content Credentials on every file, in one sign call
Each file gets a signed C2PA manifest that records its origin and binds its exact bytes. Any C2PA-aware validator can read it, with or without us.
manifestC2PA 2.4
claimwho signed, with what software
assertions
- c2pa.actionscreated / opened, digitalSourceType
- c2pa.hash.databinds the exact bytes
- c2pa.soft-bindingimage fingerprint, when requested
- c2pa.ingredientthe file it was made from
signature
- x.509 certificate chainthe signing certificate
- RFC 3161 timestampcheckable after the cert expires
What a signature records
A hard binding to the bytes
The manifest carries a hash of the exact file. Change one byte and validation reports the mismatch.
A key in hardware-backed key management
Manifests are signed with a key held in a hardware-backed key management service. The key does not leave it.
Timestamp evidence
The signature carries RFC 3161 timestamp evidence, which keeps it checkable after the signing certificate expires.
Declared AI origin
With a sign-only recipe, an ai_declaration records the IPTC digital source type, your system's name and version, and the models you disclose.
Your statement, recorded as yours
What you declare is recorded as made by you. The manifest shows declared origin, not a verdict on whether the content is authentic.
Readable without us
Content Credentials follow the open C2PA standard. Any C2PA-aware tool can read an embedded manifest without calling our API.
Upload a file. Sign it with one call.
The simplest request signs with C2PA Content Credentials and nothing else. Set watermark or fingerprint to true to add either. The full script shows the upload before it and the poll after it.
# OP_API: your API endpoint. OP_API_KEY: a key from the console.
curl -X POST "$OP_API/v1/sign" \
-H "Authorization: Bearer $OP_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"asset_id": "ast_...",
"watermark": false,
"fingerprint": false}'202 Acceptedresponse
{
"job_id": "job_...",
"asset_id": "ast_...",
"recipe_id": "rcp_system_sign",
"state": "accepted",
"watermark": false,
"fingerprint": false
}Three signing lanes
The media type decides how a manifest is attached.
- Embedded (decoded). JPEG, PNG, WebP, TIFF, AVIF, WAV, MP3, AAC in MP4 and MP4 video. The manifest is embedded in the file, and these types can also take a watermark and fingerprints.
- Structural (not decoded). HEIC, HEIF, GIF, JPEG XL, SVG, DNG, FLAC, QuickTime and AVI. The manifest is written into the container without decoding the media. Sign only.
- Sidecar manifest. PDF and other documents, plain text, HTML and XML, fonts, ML model files and some containers. The original bytes stay unchanged and a separate
.c2pamanifest is published next to them.
See every format and its upload limit, or read the formats reference.
Signing modes
| You want | Request fields | What the job does |
|---|---|---|
| C2PA Content Credentials only | "watermark": false, "fingerprint": false | Signs the file with a C2PA manifest that binds its exact bytes. No watermark, no fingerprint. |
| Sign + watermark | "watermark": true | Embeds an invisible watermark, then signs the watermarked file. No fingerprint. |
| Sign + watermark + fingerprint | "watermark": true, "fingerprint": true | Embeds an invisible watermark, records perceptual fingerprints, then signs the watermarked file. |
Built for production integrations
- Batch signing.
POST /v1/sign/batchtakes up to 100 sign requests in one call. - Signing profiles. Set the default recipe, watermark strength and allowed options for each API key.
- Signed webhooks. Learn when an asset is published without polling.
- Safe retries. Every write takes an
Idempotency-Key, so a retry never signs twice. - Retention per key. Keep published outputs for 1 hour, 24 hours, 72 hours, or until you delete them. New keys default to 72 hours.
C2PA signing questions
What is a C2PA manifest?
A C2PA manifest is signed metadata attached to a file. It records who signed the file, what they declared about how it was made, and a hash that binds it to the exact bytes. Validators use it to check that the file has not changed since signing.
Can I sign without a watermark or fingerprint?
Yes. A request with watermark and fingerprint set to false signs with a C2PA manifest and does nothing else. It is the default for a key created with one click in the console.
Can I declare that a file was made with AI?
Yes, with a sign-only recipe. Send an ai_declaration with the IPTC digital source type (trainedAlgorithmicMedia, compositeWithTrainedAlgorithmicMedia or compositeSynthetic) and your software agent's name. A declaration is refused with a watermark recipe today.
Is there a synchronous option?
For JPEG, PNG, WebP, TIFF and AVIF images, express mode runs sign plus watermark plus fingerprint as one uninterrupted job and waits for it. The response carries the completed job, or the usual job snapshot if it has not finished within the wait. Other requests are asynchronous: poll the job or use webhooks.
How is signing billed?
One unit per signed file, whatever its type or size. Units are graduated per month, from $0.015 down to $0.0025, on top of the $99 platform subscription.
Sign your first file
Create an API key with one click and send one sign request.