Recipes and signing modes
A recipe fixes which steps a signing job runs: a C2PA manifest, an invisible
watermark, server-side fingerprints, or a combination.
The catalog is closed: you pass one reviewed recipe_id to POST /v1/sign. The API has no
endpoint for creating or editing recipes.
Which recipe for which goal
Section titled “Which recipe for which goal”For images, audio and video in the embedded lane, choose by what you need a copy to keep:
| Goal | Mode | recipe_id |
|---|---|---|
| Content credentials only; no watermark and no fingerprint | Sign | rcp_system_sign |
| Content credentials, plus a watermark that can outlive a stripped manifest | Sign + watermark | rcp_system_watermark_then_sign_unfingerprinted |
| The above, plus fingerprints so recovery can also find edited copies | Sign + watermark + fingerprint | rcp_system_watermark_then_sign |
| Content credentials with fingerprints, no watermark (earlier integrations) | Sign (fingerprinted) | rcp_system_sign_only |
| A watermark with no manifest | Watermark only | rcp_system_watermark_only |
Other formats have one recipe each, chosen by the lane:
- Structural containers (for example HEIC, GIF, FLAC, QuickTime) are signed without decoding
with
rcp_system_structural_sign_only. They take no watermark and no fingerprint. - Sidecar formats (documents, text, fonts, ML models, and some image, audio and video
containers) are signed with the
rcp_private_sidecar_…_sign_onlyrecipe for their kind, which publishes a separate.c2pamanifest; see Downloads and sidecar manifests.
Which media type is in which lane is on Formats.
Names that predate the modes
Section titled “Names that predate the modes”rcp_system_sign_only was the first “sign” recipe and also records fingerprints. The newer
rcp_system_sign signs without them, and rcp_system_watermark_then_sign_unfingerprinted is the
watermark mode without them. The older recipes are unchanged, so existing integrations keep
working; choose a newer one when you do not want fingerprints kept.
What a mode without fingerprints gives up: nothing is kept that could find your published original from a copy whose manifest was removed, except the watermark in “Sign + watermark”. Fingerprints and watermarks are recovery signals, not proof of origin; see Lookup and recovery.
Options inside a recipe
Section titled “Options inside a recipe”A recipe with a watermark accepts watermark_algorithm and watermark_strength; see
Watermarks. A recipe with fingerprints accepts fingerprint_algorithms; see
Fingerprints. A recipe without the step refuses the field with HTTP 422
JOB_RECIPE_INVALID. Each field can also be defaulted per API key; see
Signing profile.
Every recipe
Section titled “Every recipe”Generated from the capability snapshot the API is built with. The live
GET /v1/capabilities response is authoritative: it
lists the recipes enabled for your account, with their current versions.
| Recipe | Name | What it does | Lane | Media types |
|---|---|---|---|---|
rcp_system_sign_only |
Sign (with fingerprint, legacy) | Signs the file with a C2PA manifest and also records a perceptual fingerprint. The launch recipe, kept for existing integrations; for C2PA signing without a fingerprint choose rcp_system_sign. | Embedded (decoded) | audio/mp4, audio/mpeg, audio/wav, image/avif, image/jpeg, image/png, image/tiff, image/webp, video/mp4 |
rcp_system_watermark_only |
Watermark only | Embeds an invisible watermark and records a perceptual fingerprint. Writes no C2PA manifest. | Embedded (decoded) | audio/mpeg, audio/wav, image/avif, image/jpeg, image/png, image/tiff, image/webp, video/mp4 |
rcp_system_watermark_then_sign |
Sign + watermark + fingerprint | Embeds an invisible watermark, records a perceptual fingerprint, then signs the watermarked file with a C2PA manifest. | Embedded (decoded) | audio/mpeg, audio/wav, image/avif, image/jpeg, image/png, image/tiff, image/webp, video/mp4 |
rcp_system_sign |
Sign | Signs the file with a C2PA manifest that binds its exact bytes. No watermark and no fingerprint. | Embedded (decoded) | audio/mp4, audio/mpeg, audio/wav, image/avif, image/jpeg, image/png, image/tiff, image/webp, video/mp4 |
rcp_system_watermark_then_sign_unfingerprinted |
Sign + watermark | Embeds an invisible watermark, then signs the watermarked file with a C2PA manifest. No fingerprint is computed. | Embedded (decoded) | audio/mpeg, audio/wav, image/avif, image/jpeg, image/png, image/tiff, image/webp, video/mp4 |
rcp_system_express_watermark_then_sign |
Sign + watermark + fingerprint (express) | Embeds an invisible watermark, records a perceptual fingerprint, then signs the watermarked file with a C2PA manifest, run as one uninterrupted job for JPEG, PNG, WebP, TIFF and AVIF images. With mode express, POST /v1/sign waits for the result. | Embedded (decoded) | audio/mpeg, audio/wav, image/avif, image/jpeg, image/png, image/tiff, image/webp, video/mp4 |
rcp_system_structural_sign_only |
Sign only (no watermark or fingerprint) | Signs formats the product does not decode by writing a C2PA manifest into the container. No watermark or fingerprint. | Structural (not decoded) | audio/flac, image/gif, image/heic, image/heic-sequence, image/heif, image/heif-sequence, image/jxl, image/svg+xml, image/x-adobe-dng, video/quicktime, video/x-msvideo |
rcp_private_sidecar_audio_sign_only |
Sign only (audio, manifest beside it) | Signs the file with a C2PA manifest delivered beside it as a separate .c2pa sidecar; the file’s bytes are not changed. No watermark or fingerprint. | Sidecar manifest | audio/MPA, audio/aac, audio/x-riff-based |
rcp_private_sidecar_document_sign_only |
Sign only (document, manifest beside it) | Signs the file with a C2PA manifest delivered beside it as a separate .c2pa sidecar; the file’s bytes are not changed. No watermark or fingerprint. | Sidecar manifest | application/epub+zip, application/oxps, application/pdf, application/vnd.oasis.opendocument.text, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/x-zip-based |
rcp_private_sidecar_font_sign_only |
Sign only (font, manifest beside it) | Signs the file with a C2PA manifest delivered beside it as a separate .c2pa sidecar; the file’s bytes are not changed. No watermark or fingerprint. | Sidecar manifest | font/otf |
rcp_private_sidecar_image_sign_only |
Sign only (image, manifest beside it) | Signs the file with a C2PA manifest delivered beside it as a separate .c2pa sidecar; the file’s bytes are not changed. No watermark or fingerprint. | Sidecar manifest | image/x-riff-based, image/x-tiff-based |
rcp_private_sidecar_model_sign_only |
Sign only (ML model, manifest beside it) | Signs the file with a C2PA manifest delivered beside it as a separate .c2pa sidecar; the file’s bytes are not changed. No watermark or fingerprint. | Sidecar manifest | application/onnx, application/x-jax, application/x-keras, application/x-mlnet, application/x-mxnet, application/x-npy, application/x-openvino-ir+xml, application/x-openvino-weights, application/x-pickle, application/x-protobuf, application/x-pytorch, application/x-tensorflow, application/x-tensorflow-savedmodel |
rcp_private_sidecar_text_sign_only |
Sign only (text, manifest beside it) | Signs the file with a C2PA manifest delivered beside it as a separate .c2pa sidecar; the file’s bytes are not changed. No watermark or fingerprint. | Sidecar manifest | application/xhtml+xml, application/xml, text/html, text/plain, text/xml |
rcp_private_sidecar_video_sign_only |
Sign only (video, manifest beside it) | Signs the file with a C2PA manifest delivered beside it as a separate .c2pa sidecar; the file’s bytes are not changed. No watermark or fingerprint. | Sidecar manifest | video/x-bmff-based, video/x-riff-based |
List recipes
Section titled “List recipes”GET /v1/recipes lists the enabled recipes for the
embedded and structural lanes. Sidecar recipes are listed by GET /v1/capabilities only.
curl -sS "$OP_API_BASE_URL/v1/recipes" -H "Authorization: Bearer $OP_API_KEY"Each entry has:
| Field | Description |
|---|---|
recipe_id |
Stable identifier to pass to POST /v1/sign. |
version |
The currently enabled immutable version. |
capabilities |
Customer-visible capabilities in execution order. |
supported_media_types |
The currently enabled media types this recipe accepts. |
Read one recipe with GET /v1/recipes/{recipe_id}.
Recognition by an inspector is separate from recipe availability. Do not infer execution support from an internal codec, a planned profile, or an older guide.
Every recipe also inspects the media, validates its own output independently, and stores the result immutably.
Immutability
Section titled “Immutability”A job records the exact recipe_id and recipe_version it ran with. Assets keep verifying against
what was actually applied, even after a newer version is enabled.
Related
Section titled “Related”GET /v1/capabilities: which runtime capabilities are configured and currently available.GET /v1/image-profiles: the reviewed image profiles.
