Detectors

A detector is one check for one kind of provenance marker. This page lists every detector, its status, and the media types it reads. The same list is served by GET /v1/detectors.

Supported checks

A detector with the status available runs today. A detector with the status planned is on the roadmap. A planned check returns unavailable with a reason, so a request that names it still succeeds.

  • Name
    c2pa
    Type
    available
    Description
    C2PA content credentials. Reads the C2PA manifest that tools such as ChatGPT, Adobe Photoshop, and Leica cameras embed in a file. The manifest names the tool that made the file and the party that signed it.
    Media types: image/jpeg, image/png, image/webp, image/tiff, image/heic, image/heif, image/avif, video/mp4, video/quicktime, audio/mp4
  • Name
    synthid
    Type
    planned
    Description
    Google SynthID. An invisible watermark that Google adds to images, audio, and video made by its models. Detection depends on access to Google tooling.
    Media types: image/jpeg, image/png, image/webp, audio/wav, video/mp4
  • Name
    gemini
    Type
    planned
    Description
    Google Gemini watermark. The marker that Gemini image output carries. It shares the SynthID detection path.
    Media types: image/jpeg, image/png, image/webp
  • Name
    meta_content_seal
    Type
    planned
    Description
    Meta content seal. The watermark family that Meta publishes as open source (Video Seal, Audio Seal, Watermark Anything). Detection needs a model runtime.
    Media types: image/jpeg, image/png, video/mp4, audio/wav
  • Name
    apple_reference
    Type
    available
    Description
    Apple reference image. Reads the EXIF data for an Apple camera make and the Apple maker note that iPhone and iPad cameras write. A match points to a camera capture. EXIF can be edited, so this is a hint, not a proof. This is an inverse signal. A found result points to a camera capture.
    Media types: image/jpeg, image/tiff

What the results mean

found means the marker is present. For C2PA, the API read the manifest and returns the tool that made the file and the party that signed it. In this version the API does not verify the signature, and the signature_verified field is false. Treat the signer name as a claim by the file, not as a proof.

not_found means the check ran and found nothing. A file with no marker is not proof of anything. Most cameras and most editing tools do not write provenance markers yet, and a marker can be removed by a screenshot or a re-encode.

unavailable means the check did not run. Read the reason field. The most common reasons are a media type the check does not support and a check that is not available yet.

Inverse signals

Most markers point to a generated or edited file. An inverse signal points the other way. The Apple reference image check reads the EXIF data for an Apple camera make and the maker note that iPhone and iPad cameras write. A found result here is evidence for a camera capture. EXIF data can be edited by anyone, so the confidence for this check is never 1.

Media types

The API reads the media type from the first bytes of the file, not from the file name or the Content-Type header. Supported types today are JPEG, PNG, WebP, TIFF and DNG, HEIC and HEIF, AVIF, MP4 and QuickTime video, and MP4 audio. Other types are accepted, but every check returns unavailable for them.


GET/v1/detectors

List the detectors

This endpoint is public and needs no API key. It returns the list on this page as JSON. Use it to show the available checks in your own interface, or to find out when a planned check becomes available.

Request

GET
/v1/detectors
curl https://api.provenance.pixellab.nz/v1/detectors

Response

{
  "detectors": [
    {
      "id": "c2pa",
      "name": "C2PA content credentials",
      "description": "Reads the C2PA manifest that tools such as ChatGPT, Adobe Photoshop, and Leica cameras embed in a file.",
      "media_types": ["image/jpeg", "image/png", "image/webp", "image/tiff", "image/heic", "image/heif", "image/avif", "video/mp4", "video/quicktime", "audio/mp4"],
      "status": "available",
      "inverse": false
    },
    {
      "id": "synthid",
      "name": "Google SynthID",
      "description": "An invisible watermark that Google adds to media made by its models.",
      "media_types": ["image/jpeg", "image/png", "image/webp", "audio/wav", "video/mp4"],
      "status": "planned",
      "inverse": false
    }
  ]
}

Was this page helpful?