Build the request once. Run it on every file.
A workflow puts the steps in pipeline order: upload, watermark, fingerprint, AI mark, CAWG identity, sign, verify, webhook and a disclosure event. Save it as a template and sign with its id, or copy the request body it builds.
UploadPOST /v1/uploads
Watermark"watermark": true
Fingerprint"fingerprint": true
AI mark"ai_declaration": {…}
AI-generated mark needs a sign-only call (C2PA claim plan)
CAWG identity"identity": {…}
CAWG: identity certificate not enrolled yet
SignPOST /v1/sign
VerifyPOST /v1/verifications
Webhookjob events
Disclosure eventPOST /v1/disclosures/events
The builder refuses what the API refuses. With the reason, before you send it.
AI mark or watermark
A declared AI-generated manifest is signed only on a call without a watermark. Fingerprints are fine. The builder says: "AI-generated mark needs a sign-only call (C2PA claim plan)".
Identity: coming soon
CAWG identity is coming soon, so the block stays disabled until the identity certificate is enrolled, with the reason the server gives: "CAWG: identity certificate not enrolled yet".
One pipeline order
Upload and Sign are required, each block appears once, and blocks run in the fixed order. The API checks the same rules when you save a template.
Save a template. Sign with its id.
The server derives the sign request from the blocks. On a sign call, every field the request sends wins over the template's, so one template serves many products.
curl -sS -X POST "$OP_API/v1/workflow-templates" \
-H "Authorization: Bearer $OP_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"name": "EU AI Act: AI mark (sign-only)",
"blocks": [
{"type": "upload"},
{"type": "fingerprint"},
{"type": "ai_mark", "declaration": {
"digital_source_type": "trainedAlgorithmicMedia",
"software_agent_name": "Studio Nova Imagine"}},
{"type": "sign"},
{"type": "verify"},
{"type": "disclosure_event",
"kind": "visible_label_applied", "jurisdiction": "EU"}]}'Starter templates
The console starts you from a template per AI labeling rule. None combines a watermark with the AI mark, so where a rule can be met either way there are two variants. Each names the marking-check preset it is built to pass.
| Starter template | Blocks | Marking check preset |
|---|---|---|
| EU AI Act Art. 50: AI mark (sign-only) | upload, fingerprint, AI mark, sign, verify, disclosure event | eu_ai_act_art50 |
| EU AI Act Art. 50: watermark + fingerprint | upload, watermark, fingerprint, sign, verify, disclosure event | eu_ai_act_art50 |
| California SB 942 / AB 853 | upload, fingerprint, AI mark, sign, verify | us_ca_sb942 |
| China labelling: AI mark (sign-only) | upload, fingerprint, AI mark, sign, verify | cn_labeling_measures |
| China labelling: watermark + fingerprint | upload, watermark, fingerprint, sign, verify | none: the draft China preset needs the declaration |
| Korea AI Framework Act: AI mark (sign-only) | upload, fingerprint, AI mark, sign, verify | kr_ai_framework_act |
| Korea AI Framework Act: watermark + fingerprint | upload, watermark, fingerprint, sign, verify | kr_ai_framework_act |
| India synthetic information | upload, fingerprint, AI mark, sign, verify | in_synthetic_information |
The China watermark variant is listed because a workflow without the declaration is still useful, but the draft China preset asks for the declaration, so it does not pass that check. The rule readings behind every preset are drafts for owner and legal review.
Check the marking on what you published
A marking check verifies stored outputs against a preset: a C2PA manifest that validates, an AI declaration (a generative IPTC digital source type), and a recoverable watermark or fingerprint where the preset asks for one. Each item gets a pass or fail per requirement, and each item counts as one verification.
It is a technical check of the machine-readable marking a file carries. It cannot see visible labels on your pages, and it is not a legal determination.
Original Pictures shows where content came from and whether it has changed since it was signed. It does not prove that a depicted event is true. Using it supports your work on the EU AI Act, the California AI Transparency Act and other AI labeling rules, and it is not by itself legal compliance with any of them. Nothing on this site is legal advice.
Workflow questions
Do I need a template to sign?
No. A template only saves a request body. A sign request with plain flags works the same, and the builder shows the body it would send.
What happens to jobs when I change or delete a template?
Nothing. A job keeps the request it was admitted with. Changes apply to sign calls made afterwards.
Why can't a workflow have both a watermark and the AI mark?
The C2PA claim plan we sign with records an AI declaration only on a sign-only call. Use the AI mark with fingerprints, or a watermark with fingerprints; the starter templates offer both where a rule allows either.
Start from a template
Create an API key, open Workflows in the console and pick the starter for the rule you track.