Cloudflare Images now preserves C2PA Content Credentials across the delivery pipeline
Cloudflare has integrated the Coalition for Content Provenance and Authenticity (C2PA) standard into Cloudflare Images. Publishers and creators can now keep the full provenance chain of an image—who created it, with what device, and what edits were applied—intact from origin storage through to end-user delivery on the Cloudflare network.
Digital content provenance is the modern equivalent of an artwork's history of ownership: it records how a piece of media was made and altered over time. That matters for two reasons. First, it protects creators by ensuring attribution survives when an image is shared or republished—a photographer whose viral shot is stripped of their name loses the career opportunities that exposure might otherwise generate. Second, it gives viewers context. Knowing when and where a newsworthy photo was actually taken, or whether a supposed UFO image is recent and local, changes how it should be interpreted.
The C2PA, a project of the non-profit Joint Development Foundation, publishes the technical specification for attaching cryptographically signed provenance manifests to media. Those manifests and signatures are known as Content Credentials. Adobe's Content Authenticity Initiative (CAI)—with thousands of member organizations, including major newsrooms—pushes for broad industry adoption of the standard.
Why provenance matters in an image pipeline
Until now, even organizations that shot with C2PA-compliant cameras and edited in C2PA-compliant software often lost the credentials at the CDN stage, where resizing or format conversion routinely stripped the embedded metadata. Cloudflare Images has closed that gap. If the Preserve Content Credentials setting is enabled, any credentials already embedded in an image survive Cloudflare's transformations. When Images resizes or re-encodes a file, Cloudflare appends its own cryptographically signed record of those actions to the existing manifest.
An end user viewing the image on a publisher's site can then use an open-source verifier such as contentcredentials.org/verify to audit the full chain—creation by the photographer's camera, edits in software, and CDN transformations—and confirm nothing has been tampered with.
How the signing chain is constructed
Content Credentials are stored in JUMBF (JPEG Universal Metadata Box Format), an ISO-standardized container that packages provenance assertions alongside the signatures that authenticate them. The assertions themselves, describing facts such as the camera model or aperture settings, are JSON objects.
In a typical journalism workflow, the process breaks down as follows:
- A photojournalist captures an image on a C2PA-compliant camera, such as a Nikon Z6III with the relevant firmware. The camera embeds a manifest with claims about the capture—camera model, resolution, lens settings—and signs it with a private key tied to the manufacturer.
- The image moves into Cloudflare Images for delivery.
- If the publisher applies a URL-based transformation—say, resizing to a specific width—Cloudflare appends an independent assertion to the same JUMBF container describing that non-destructive action (for example,
c2pa.action.resized). - Cloudflare signs its own assertion with its own end-entity certificate, creating a second
signature_infoentry in the manifest alongside the camera manufacturer's.
Each signature reference in the manifest points back to the signer's public certificate. To allow the full chain to be validated, Cloudflare joined the Content Authenticity Initiative's Trust List using an end-entity certificate issued by DigiCert. As the CAI explains, trust lists connect an end-entity certificate to its root CA by supplying the subordinate public X.509 certificates that form the trust chain.
Verification works because a unique hash is generated for each provenance assertion and signed. A verification tool recalculates the hash, checks it against the signature, and validates the certificate chain. If any hash or signature fails to check out, the content is tamper-evident: the metadata has been altered since it was signed.
A working example with DALL-E
OpenAI began including Content Credentials in DALL-E images earlier this year. To see the integration in practice, consider an image generated in DALL-E, uploaded to an R2 bucket, and delivered through a Cloudflare Images transformation URL.
Cloudflare Images transforms via simple URL changes using the syntax ZONE/cdn-cgi/image/OPTIONS/SOURCE-IMAGE. Breaking down those parameters:
ZONEis the publisher's domain.cdn-cgi/imageis a fixed prefix handled by a built-in Worker.OPTIONSdefines the transformations—width, quality, rotation, format conversion, and so on.SOURCE-IMAGEis the URL of the original hosted image.
A request changing the width to 1000 pixels and quality to 75, and converting to WebP, will append a signed assertion to the original DALL-E manifest. The result is verifiable end to end, and the provenance chain remains complete after the transformation.
For a deeper inspection, the open-source CAI C2PA Tool (c2patool) provides detailed manifest access from the command line. It can be installed from a pre-built binary or via Cargo Binstall. With a saved copy of the transformed image, the detailed flag outputs the full JSON manifest:
-d(or-detailed) displays all manifest details in the terminal.- Redirecting that output to a file allows review in an editor.
Enabling the integration
Preserving content credentials takes only a configuration change. In the Cloudflare dashboard, navigate to Images and then Transformations. Select a zone, and toggle the Preserve Content Credentials option on. If transformations are applied to images without credentials, nothing happens—but if credentials are present, they are retained and any transformations are signed.
That makes it possible for news organizations and content platforms to run a scalable image pipeline that keeps the provenance story intact: create with a C2PA-compliant camera, edit in C2PA-aware software, distribute through Cloudflare, and let any reader verify the full lifecycle with a public-key check.



