Skip to content

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.

op.workflow-template.v1 · blocks in pipeline order
  1. UploadPOST /v1/uploads

  2. Watermark"watermark": true

  3. Fingerprint"fingerprint": true

  4. AI mark"ai_declaration": {…}

    AI-generated mark needs a sign-only call (C2PA claim plan)

  5. CAWG identity"identity": {…}

    CAWG: identity certificate not enrolled yet

  6. SignPOST /v1/sign

  7. VerifyPOST /v1/verifications

  8. Webhookjob events

  9. Disclosure eventPOST /v1/disclosures/events

The builder refuses what the API refuses. With the reason, before you send it.

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 templateBlocksMarking check preset
EU AI Act Art. 50: AI mark (sign-only)upload, fingerprint, AI mark, sign, verify, disclosure eventeu_ai_act_art50
EU AI Act Art. 50: watermark + fingerprintupload, watermark, fingerprint, sign, verify, disclosure eventeu_ai_act_art50
California SB 942 / AB 853upload, fingerprint, AI mark, sign, verifyus_ca_sb942
China labelling: AI mark (sign-only)upload, fingerprint, AI mark, sign, verifycn_labeling_measures
China labelling: watermark + fingerprintupload, watermark, fingerprint, sign, verifynone: the draft China preset needs the declaration
Korea AI Framework Act: AI mark (sign-only)upload, fingerprint, AI mark, sign, verifykr_ai_framework_act
Korea AI Framework Act: watermark + fingerprintupload, watermark, fingerprint, sign, verifykr_ai_framework_act
India synthetic informationupload, fingerprint, AI mark, sign, verifyin_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.