Oprindo

Article 50 for developers

A technical implementation walkthrough — C2PA manifests, the AI-generated assertion, watermarking options, detection, and evidence.

What this guide is. A technical implementation reference for developers, based on the C2PA Content Credentials specification, the EU Transparency Code of Practice (Section 1), and the Commission's Article 50 guidance. It is not legal advice, and following it is not a compliance determination — compliance depends on your complete implementation and circumstances. Dates are stated with their exact legal status.

1. Scope — who this is for

Article 50(2) of the EU AI Act places a transparency obligation on providers of AI systems that generate synthetic image, audio, video, or text content: outputs must be marked in a machine-readable format and detectable as artificially generated or manipulated. Under the AI Act as currently applicable, the obligation applies from 2 August 2026 to all in-scope systems, regardless of when they were first placed on the EU market. If the agreed Omnibus grandfathering provision is formally adopted, qualifying systems already on the market before that date would have until 2 December 2026 to meet the Article 50(2) marking and detection requirements — that provision is pending final publication in the Official Journal and is not yet law.

Three things developers most often get wrong about scope:

Whether the obligations apply to your system depends on your answers, not ours — run the scope screener for an orientation. The Code-measure mapping shows which measures a platform can implement for you and which remain yours.

See also: Scope screener and Code-measure mapping.

2. Machine-readable marking with C2PA manifests

The de-facto standard for machine-readable provenance marking is C2PA Content Credentials — an open specification with an open-source reference implementation (c2pa-rs, with Node and Python bindings) and an ecosystem of validators, including Adobe's public verify page. A C2PA manifest is embedded in the asset itself (in a JUMBF container) and consists of:

Trust state matters as much as the signature. Validators distinguish between a structurally valid signature and one whose certificate chains to the C2PA Trust List. A self-managed certificate produces manifests that validate but display as an unrecognised issuer; a trust-listed certificate requires completing the C2PA Conformance Program and obtaining a claim-signing certificate from a CA on the trust list. Whatever state you sign in, disclose it — presenting a pre-conformance signature as trusted is the fastest way to lose the credibility the mark exists to create.

Key management is the part validators can't see but assessors will ask about: the claim signing key should live in a managed key service (e.g. AWS KMS or an equivalent HSM-backed store) where the private key is non-exportable and signing is an audited API call — not a PEM file on a server.

2.1 The AI-generated assertion

AI provenance is expressed with a c2pa.actions assertion whose action carries an IPTC digitalSourceType:

{
  "label": "c2pa.actions",
  "data": {
    "actions": [{
      "action": "c2pa.created",
      "digitalSourceType":
        "http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia",
      "softwareAgent": "YourProduct/1.0"
    }]
  }
}

trainedAlgorithmicMedia declares fully AI-generated content; compositeWithTrainedAlgorithmicMedia covers AI-manipulated composites (with c2pa.edited). Set softwareAgent — verify pages display it as the "AI tool used".

One discipline worth adopting whatever tooling you use: a marking service should be able to state that content is AI-generated — and nothing more. Assertions about authenticity, human authorship, or a third party's identity are different trust claims with different stakes; keeping them out of an automated signing path by construction (an assertion allow-list) is cheap insurance against your own infrastructure being used to sign something it shouldn't.

3. Watermarking options

Metadata-based marking and imperceptible watermarking answer different failure modes. A C2PA manifest is standard, verifiable, and attributable — but it lives in metadata, and metadata can be stripped by re-encoding, screenshots, or platform processing pipelines. An imperceptible watermark survives (some of) those transformations but is proprietary to its detector. The Code of Practice's Section 1 describes both signed metadata and imperceptible watermarking as marking measures; robust implementations combine them.

The current landscape, honestly summarised:

Whatever you choose, two rules keep you honest: state exactly which measures you implement — "signed metadata only" is a legitimate, documentable position, and it is better than an unverified watermark claim — and keep your implementation records specific about the method used per asset, so an information request can be answered with data rather than assertions. Oprindo follows the same rules: watermarking connects through an adapter (your provider or a platform-offered backend), and where no watermark is applied the evidence records say adapter: none explicitly.

4. Detection and verification

Marking is only half of Section 1 — the marks must also be detectable. For C2PA manifests, detection is standard and already public: anyone can validate your marked assets with c2patool, the c2pa libraries, or Adobe's verify page. A validator reports four things worth understanding before you ship:

Offering your users a verification surface — a link to a public verify page, or a hosted endpoint that returns a plain-language report — is the practical way to make detection available rather than merely possible. Watermark detection, by contrast, is provider-specific: it requires the detector and parameters of whichever watermarking system was used, which is why per-provider detection endpoints exist.

On interoperability: the Code of Practice includes a 2 February 2027 commitment on watermark-detection interoperability — a common API method, embedded signpost, or consortium solution. That date is a Code signatory commitment: it binds signatories, not automatically all providers. The design consequence for everyone else is simple — build detection so it can join whatever common solution emerges, rather than betting on owning it.

5. Implementation evidence

The least glamorous measure is the one that decides how an information request goes: records that show what your implementation actually did. If a regulator, platform, or customer asks "how is this content marked?", the difference between a good and a bad week is whether you can answer per-asset from data.

A useful evidence record for each marking event captures at minimum: a timestamp, the asset's content hash, the manifest identifier, the signing certificate's serial and trust state, and which marking method was applied (including, explicitly, when a watermark was not applied). Two properties turn a log into evidence:

Map each record to the Section 1 measure it evidences (signed metadata, watermark, detection availability, robustness, records) so an export reads as an implementation account rather than a database dump. Be clear about what such a report is: there is no officially prescribed evidence format — an export demonstrates your implementation; it does not by itself settle your obligations. Alongside the technical records, keep the items that remain yours regardless of tooling: your policies, terms-of-service anti-removal clauses, testing records, and legal assessment (see the responsibility split).

6. Key dates and their legal status

DateEventStatus
27 Jul 2026, 18:00 CESTDeadline for inclusion in the initial Code signatory list (signing stays open after)Confirmed (Commission FAQ)
2 Aug 2026Article 50 applies to all in-scope systems, regardless of when they were placed on the marketConfirmed — current law
2 Dec 2026If the agreed Omnibus provision is formally adopted, systems already on the market before 2 Aug would have until this date for Art. 50(2) marking and detectionAgreed in Omnibus; pending final publication in the Official Journal — not yet law
2 Feb 2027Watermark-detection interoperability commitment (common API method, embedded signpost, or consortium solution)A Code signatory commitment — applies to signatories, not automatically to all providers