Skip to content

Fingerprints

llms.txtAsk agent

A fingerprint is a compact description of what a published file looks or sounds like. Every recipe that decodes the asset computes fingerprints of the bytes it publishes and keeps them on our servers, scoped to your account. When a copy arrives at verification without a usable manifest, recovery compares the copy’s fingerprints with yours to find the original; see Lookup and recovery. A recovered match is reported as recovery, never as cryptographic validity.

Only one fingerprint ever enters a manifest: ISCC Image-Code, which is the image soft binding the C2PA manifest carries. Every other fingerprint is a server-side recovery signal. It is not written into the manifest, not returned by any public response and not shared between accounts.

POST /v1/sign takes an optional fingerprint_algorithms list; the rules are in Sign. In short:

  • Omit it for the default set of the asset’s media type.
  • A list replaces that set. ISCC Image-Code is always added for images, and at least one fingerprint is required, so recovery is never switched off.
  • Only a set that differs from the default is priced, as one fingerprint line; see Retention and pricing.
  • A job keeps the set it was admitted with. A later change of default never reaches it.

GET /v1/capabilities lists, per media type, the ids your deployment offers, which are in the default set and which are locked on, with a one-line note on each. Structural and sidecar containers are not decoded, so they list none and refuse the field.

The notes come from our 2026 fingerprint benchmark, which transformed a fixed corpus (re-encoding, resizing, cropping, overlays, rotation, pitch and tempo changes) and measured how often each fingerprint still found the original while keeping false matches rare.

Id Media Good at Weak at
iscc-image image JPEG, resizing, colour changes, added borders crops, rotation, overlays
dinov2 image crops and overlays; the most robust image descriptor we run nothing measured stands out
dinov2-lsh256 image the same edits as dinov2, as a compact keyed 256-bit hash slightly weaker than dinov2
pdq image flips and 90-degree rotations; widely used for hash sharing crops
chromaprint audio codecs, noise, re-recording pitch or tempo change
audfprint audio loud background speech or music; re-recording the first 10 minutes only
iscc-audio audio whole recordings, as a compact open-standard code excerpts
tmk-pdqf video re-encoding of the whole clip a border crop of about 10%
vpdq video partial clips, frame by frame a border crop of about 10%

The image default is iscc-image with dinov2. Audio and video keep chromaprint and tmk-pdqf as their defaults; audfprint, iscc-audio and vpdq are computed only when named. ISCC Audio-Code is kept as a recovery signal only; it is not written into the manifest.

dinov2-lsh256 projects the DINOv2 descriptor through a random matrix derived from a key held for your account alone, so its bits are meaningless under another account’s key. Changing that key would be a new calibration, recorded as such; bindings made under the old one are never compared with the new.

The tables below are generated from the capability snapshot the API is built with. A deployment can enable fewer, so GET /v1/capabilities stays the authority at run time.

Modality Default (field omitted) Always added Selectable
audio chromaprint none chromaprint, audfprint, iscc-audio
image iscc-image, dinov2 iscc-image iscc-image, dinov2, pdq, dinov2-lsh256
video tmk-pdqf none tmk-pdqf, vpdq
Media type Modality Default Selectable
audio/mp4 audio chromaprint chromaprint, audfprint, iscc-audio
audio/mpeg audio chromaprint chromaprint, audfprint, iscc-audio
audio/wav audio chromaprint chromaprint, audfprint, iscc-audio
image/avif image iscc-image, dinov2 iscc-image, dinov2, pdq, dinov2-lsh256
image/jpeg image iscc-image, dinov2 iscc-image, dinov2, pdq, dinov2-lsh256
image/png image iscc-image, dinov2 iscc-image, dinov2, pdq, dinov2-lsh256
image/tiff image iscc-image, dinov2 iscc-image, dinov2, pdq, dinov2-lsh256
image/webp image iscc-image, dinov2 iscc-image, dinov2, pdq, dinov2-lsh256
video/mp4 video tmk-pdqf tmk-pdqf, vpdq
Fingerprint Name Modality In the manifest
audfprint audfprint landmarks audio No (server-side recovery signal)
chromaprint Chromaprint audio No (server-side recovery signal)
dinov2 DINOv2-S descriptor image No (server-side recovery signal)
dinov2-lsh256 DINOv2-S keyed LSH (256 bit) image No (server-side recovery signal)
iscc-audio ISCC Audio-Code (256 bit) audio No (server-side recovery signal)
iscc-image ISCC Image-Code image Yes (C2PA soft binding)
pdq PDQ image No (server-side recovery signal)
tmk-pdqf TMK+PDQF video No (server-side recovery signal)
vpdq vPDQ video No (server-side recovery signal)

The fingerprints added to the choice are under permissive licences: DINOv2 code and weights (Apache-2.0), PDQ and vPDQ (BSD, from Meta’s ThreatExchange), audfprint (MIT) and ISCC Audio-Code (Apache-2.0). The ones every job already computed keep theirs: ISCC (Apache-2.0), TMK+PDQF (BSD) and Chromaprint (MIT core; the fpcalc binary we run is LGPL-2.1). ISCC Video-Code is not offered: the FFmpeg filter it depends on is GPL-licensed. ISCC’s bitarray dependency is under the Python Software Foundation licence (PSF-2.0).

Jobs admitted before the image default changed

Section titled “Jobs admitted before the image default changed”

Image jobs admitted before DINOv2 replaced SSCD in the image default computed SSCD. SSCD has since been stopped entirely (licence decision, 2026-09-28): nothing computes it, recovery never searches it, and its model is no longer part of the service. Those jobs stay recoverable by the exact SHA-256, their watermark and their ISCC Image-Code. Their stored SSCD bindings are kept only until they expire with their outputs.