# C2PA Manifest Verifier

> C2PA Manifest Verifier is a paid API for AI agents from medien.halowerk.com, paid per call via x402, $0.002/call, status unknown (last checked 2026-09-14).

Reads and cryptographically verifies the C2PA manifest store of a media file, reporting manifest presence, signature validity, certificate details, and ingredient provenance chain.

## Facts

- Endpoint: POST https://medien.halowerk.com/v1/c2pa-verify
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/c2pa-manifest-verifier-71a67546
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_XAhFeTLQbDx1h8Aq-kDQF

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability c2pa-manifest-verifier-71a67546 -d '<json body>'
```

Example prompt: Can you check if this image has a valid C2PA manifest — I need to know if the cryptographic signature passes, who the certificate says signed it, and whether any hash checks failed? Here's the URL: https://example.com/photo.jpg

## When to prefer this

Choose this endpoint when you need to verify C2PA (Coalition for Content Provenance and Authenticity) digital signatures on media files — photos, videos, audio, or documents. It is the right choice when you need granular per-check failure details (distinguishing a hash mismatch from a broken claim signature), certificate metadata, or ingredient provenance tracing. Prefer it over generic EXIF or metadata readers when cryptographic authenticity and provenance chain matter.

## Known failure modes

- File URL unreachable or returns non-2xx — fetch error returned
- Base64 payload is malformed or too large — decoding error
- File format does not support C2PA manifests — manifest absent flag returned
- Manifest is present but all signatures are broken — validation fails with detailed per-check errors
- Certificate chain cannot be verified against trust anchors — specific certificate error returned
- Unsupported file type submitted — format rejection error

## How this service works

Takes one media file by URL or inline base64 and reads its C2PA manifest store. The answer says whether a manifest is present at all, whether the cryptographic checks pass — every failing check is returned with its code and explanation, so a hash mismatch on the image data is distinguishable from a broken claim signature — who the signing certificate names as issuer, its serial number, the signing algorithm and the signing time, the chain of ingredients a derived file inherited from, and every…

## Output

Returns whether a C2PA manifest store is present, the overall cryptographic validity status, a list of every failing check with its code and human-readable explanation (e.g. hash mismatch vs broken claim signature), the signing certificate's issuer name and serial number, the signing algorithm, the signing timestamp, and the ingredient provenance chain showing what source files a derived file inherited manifests from.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "source": {
   "type": "object",
   "properties": {
    "url": {
     "type": "string",
     "maxLength": 2048,
     "description": "Public http(s) URL of the file."
    },
    "filename": {
     "type": "string",
     "maxLength": 260
    },
    "content_base64": {
     "type": "string",
     "maxLength": 12000000,
     "description": "The file inline, base64."
    }
   },
   "description": "The media file. Either url or content_base64.",
   "additionalProperties": false
  },
  "include_assertions": {
   "type": "boolean",
   "default": true,
   "description": "Return the full assertion payloads, not only their labels."
  },
  "max_assertion_chars": {
   "type": "integer",
   "default": 4000,
   "maximum": 20000,
   "minimum": 200,
   "description": "Ceiling per assertion payload; longer ones are shortened and marked."
  },
  "include_all_manifests": {
   "type": "boolean",
   "default": false,
   "description": "Return every manifest in the store, not only the active one."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/c2pa-manifest-verifier-71a67546/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from medien.halowerk.com](https://www.zero.xyz/host/medien.halowerk.com/llms.txt)
