2D-DCT perceptual hashing
Resolution is keyed on a 64-bit pHash computed from the 2D discrete cosine transform of the input. The hash survives JPEG re-encoding, color shifts, mild crops, watermarks, and platform-side compression.
SOFT-BINDING LOOKUP
Perceptual-hash resolution keeps provenance reachable through platform transformations. Send a binary that has been re-encoded, cropped, or watermarked; receive the matching manifest. Endpoint: POST /v1/resolve.
Four properties of every resolve call. None of them require additional configuration; all of them are tunable when you need them to be.
Resolution is keyed on a 64-bit pHash computed from the 2D discrete cosine transform of the input. The hash survives JPEG re-encoding, color shifts, mild crops, watermarks, and platform-side compression.
Default match window is 10 bits of Hamming distance on the 64-bit hash. JSON and GET lookups accept a per-request threshold; multipart uploads use the default.
The API returns up to N candidates, ordered by similarity, each with a confidence score and the underlying manifest. Your client picks the threshold for what counts as a match.
For audio assets, Hashproof computes a 64-bit byte-level fingerprint, served under the chromaprint algorithm id, and matches by Hamming distance.
Four steps from upload to ranked matches, all in one synchronous request.
01
Send the asset (image or audio) to /v1/resolve. No assertions or signatures required; the resolver only needs the bytes.
02
For images, a 2D-DCT pHash. For audio, a 64-bit byte-level fingerprint served under the chromaprint algorithm id.
03
The pHash is matched against stored manifests. Lookups match by Hamming distance over stored fingerprints.
04
Response is a list of matches with similarity scores, manifest IDs, and the full manifests. Empty list means no match within the threshold.
cURL is enough. The TypeScript SDK wraps the same call with typed responses.
curl -X POST https://api.hashproof.ai/v1/resolve \
-H "x-api-key: $HASHPROOF_API_KEY" \
-F "file=@/path/to/transformed.jpg"
# => {
# "matches": [
# {
# "manifestId": "01JS7Z...",
# "similarity": 0.97,
# "distance": 2,
# "manifest": { ... }
# }
# ],
# "query": { "fingerprint": "...", "algorithm": "phash-dct-64" },
# "searchTimeMs": 12,
# "c2pa": { ... }
# }Resolution is the bridge between signing and verification. The full triple is what makes provenance load-bearing.
Resolution only finds what was signed. Issue signed C2PA manifests with managed keys, hybrid signatures, and Merkle batch proofs.
Once you have the manifest, verify it. One call returns validation detail and trust status.
EU AI Act Article 50 reports generated from your stored manifests. Per-manifest findings and summary counters as JSON.
Free tier includes 10,000 verifications per month, with resolution metered against the same quota.