Inside a C2PA manifest
A C2PA manifestC2PA manifest: The signed label itself: a small package inside a file that records who signed it, what they declared and how to check it. is the label stored in a file. It is a set of nested boxes: statements about the work, a hashHash: A short fingerprint of exact bytes. Any change, even one character, gives a completely different hash. of the file, and a signature that seals both.

- Box
- JUMBFJUMBF: JPEG Universal Metadata Box Format: the container that holds a C2PA label inside a media file., a standard way to nest data inside a file.
- Statements
- AssertionsAssertion: One statement inside a C2PA label, such as what was done to the content, whether AI was used, or the content's hash.: what the signer says happened, any creator details they supply, and any AI use they declare.
- Link to the file
- A hard bindingHard binding: A hash of the content's signed bytes stored in the label, so a change to those bytes makes the check fail., a hash of the file's bytes.
- Seal
- A COSE signatureCOSE: CBOR Object Signing and Encryption: the signature format C2PA uses to sign the claim inside a label. with the signer's X.509 certificateX.509 certificate: A digital ID card for a signing key: it names the holder and is itself signed by a certificate authority..
Boxes inside the file

Each format has a spot for extra data. A JPEG has one, an MP4 has one, a PDF has one. The manifest goes there, in a box called the manifest storeManifest store: The set of all manifests a file carries, one per signed version; the newest one is the active manifest..
A signer can add a new manifest when they sign an edit. They can keep the earlier labeled file as an ingredient. That keeps the history their tool chose to include. Labels can still be stripped along the way.
The claim ties it together
The claimClaim: The part of a C2PA manifest that lists every assertion by hash and is then signed, so no assertion can change unnoticed. is a short list. It names every assertion and gives a hash of each one. A hash is a short code that changes if a single byte changes.
The signature covers the claim. So if anyone edits an assertion, its hash no longer matches, and the check fails.
Assertions say what happened
- Actions
- Created, edited, published. AI use goes in the digital source typeDigital source type: A field in the label that says how content was made: captured by a camera, made by AI, or a mix..
- File hash
- The hard binding. It ties the label to the bytes the binding covers.
- Details
- MetadataMetadata: Data stored beside the content in a file, such as author, camera or date. Many tools strip it when they copy or upload a file. such as title, author and date.
- Rights
- Whether AI may train on the work.
Ingredients link earlier versions

A new file is often made from older ones. A cropped photo comes from a raw one. A page layout uses many photos.
A signer can list each source as an ingredientIngredient: A source file used to make new content, recorded in the new content's label with a link to its own label.. If the source had a label, it can be linked too. A checker can then look at the chain the signer kept. Steps no one recorded stay out of it.
The signature and the certificate

The signer seals the claim with a private keyPublic key cryptography: Signing with a secret private key that only the signer holds, checked by anyone with the matching public key.. The seal carries their certificate, which names them.
The certificate links up a certificate chainCertificate chain: The links from a signer's certificate up to a root authority a checker already trusts. to an issuer. Checkers trust issuers on the C2PA Trust ListC2PA Trust List: The list of signing authorities that conforming C2PA checkers trust by default.. A timestamp authorityTimestamp authority: An outside service that signs the time a record existed, so a signature stays checkable after its certificate expires. adds the time of signing.
What a checker does
Find the store.
It reads the manifest store from the file.
Test the seal.
It checks the signature over the claim.
Test the signer.
It follows the certificate to a trusted issuer.
Test the file.
It hashes the bytes and compares them to the hard binding.

The result shows who signed, what they declared, and if the file changed. It does not say the content is true. Try the free checker.
For engineers
Show the technical detail
The JUMBF tree
- Manifest store: a JUMBF superbox labeled c2pa (ISO/IEC 19566-5).
- Manifest: one superbox per signing, labeled with a urn:c2pa: identifier. The last one is the active manifest.
- Inside each manifest: the assertion store (c2pa.assertions), the claim (c2pa.claim.v2) and the claim signature (c2pa.signature).
The claim
A CBOR map. Key fields: claim_generator_info, instanceID, created_assertions and gathered_assertions (hashed URIs, one per assertion), signature (a URI to the c2pa.signature box) and alg. The signature covers the claim, and the claim covers each assertion by hash.
Assertion labels
- c2pa.actions.v2
- What happened: c2pa.created, c2pa.edited, c2pa.published. Each action can carry a digitalSourceType, such as the IPTC term trainedAlgorithmicMedia for AI output.
- c2pa.hash.data
- The hard binding for most files: a hash over the file's bytes, with the manifest's own byte range excluded. Video in ISO BMFF uses c2pa.hash.bmff.v3; box formats can use c2pa.hash.boxes.
- c2pa.ingredient.v3
- An earlier asset this one was made from, with its relationship (parentOf, componentOf or inputTo) and, if it had one, its own manifest.
- c2pa.metadata / cawg.metadata
- Descriptive metadata such as title and author, as JSON-LD.
- c2pa.training-mining.v1
- Machine-readable permissions for AI training, inference and data mining.
- c2pa.soft-binding
- A pointer to a watermark or fingerprint that can find the manifest again if it is stripped.
The signature
COSE_Sign1 (RFC 9052). The protected header carries the algorithm and the x5chain, the signer's X.509 chain. The unprotected header can carry an RFC 3161 timestamp (sigTst2) and stored revocation data. A checker builds the chain to a root it trusts, such as one on the C2PA Trust List, and checks the certificate was valid at the timestamp.
A verification result
{
"valid": true,
"signer": "Publisher Corp",
"signed_at": "2026-03-15T14:23:00Z",
"claim_generator": "Encypher",
"assertions": [
{ "label": "c2pa.actions.v2",
"data": { "actions": [ { "action": "c2pa.published" } ] } },
{ "label": "c2pa.hash.data", "match": true }
],
"trust": "signer certificate chains to a C2PA Trust List root"
}The field names above are a simplified example. The full schema is in the API reference.
Create. Mark. Endure.
Open the label on any signed file. It is free, with no account.