Skip to main content

chronoverify

Python client for the ChronoVerify image capture-time and provenance verification API. Send any image, get one plain verdict (provenance_confirmed, consistent, inconclusive, metadata_anomaly, or manipulation_indicated) with a 0 to 100 confidence and the signals behind it. It reads C2PA Content Credentials when present and falls back to EXIF, XMP, and pixel forensics when they are not, so it works on any image, signed or not.

Get an API key (a flat $0.003 per image from prepaid credit, no per-operation multipliers, plus 100 free verifications a month that stay as a fallback when the credit runs out): https://chronoverify.com/pricing

ChronoVerify is provenance-first and deliberately not a deepfake detector. Verdicts are investigative triage to support human review, not proof.

ChronoVerify is a C2PA Conformant Validator, listed on the C2PA Conforming Products List (record 019f8a20-6452-7a43-b11b-59d0b0e4a84a; validation of JPEG, PNG, WebP, and AVIF). Details: https://chronoverify.com/compliance#conformance

Install

pip install chronoverify

Use

from chronoverify import Client

client = Client("cv_live_...")          # or omit the key to use the free, rate-limited public path
result = client.verify(file="photo.jpg")

print(result["verdict"], result["confidence"])
print(result["capture_time"])           # {"value": "...", "source": "exif", ...}

Verify a remote image by URL (the server fetches it):

result = client.verify(url="https://example.com/photo.jpg")

You can pass a path, raw bytes, or an open binary file:

with open("photo.jpg", "rb") as fh:
    result = client.verify(file=fh)

The key can also come from the CHRONOVERIFY_API_KEY environment variable.

Signed audit report

Get a shareable, independently verifiable PDF audit record for one image (an Ed25519 signature over the canonical verdict, with an optional RFC 3161 timestamp). A report requires an API key. It is the premium artifact: $2.00 from your prepaid balance from the first report (the free 100 a month covers verifications only), or included in a monthly subscription's quota.

client.report(file="photo.jpg", out="report.pdf")   # writes the PDF, returns the path

pdf_bytes = client.report(file="photo.jpg")          # or get the raw bytes

Verify a report's signature against the public key at https://chronoverify.com/v1/key .

Command line

chronoverify verify photo.jpg
chronoverify verify --url https://example.com/photo.jpg
chronoverify verify photo.jpg --json
chronoverify report photo.jpg -o report.pdf

Set CHRONOVERIFY_API_KEY (or pass --key) to use a metered key; omit it for the free public path.

Response

The verdict object is documented in full, with field reference and examples, at https://chronoverify.com/method#api . A clean result means a file's saved data is internally consistent, not that the scene it shows is real.

License

MIT

Metadata

Release files for chronoverify 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for chronoverify 0.1.3
File Size Uploaded
chronoverify-0.1.3.tar.gz 6.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for chronoverify 0.1.3
File Interpreter ABI Platform
chronoverify-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 13.6 kB

Release files / chronoverify-0.1.3.tar.gz

Download URL chronoverify-0.1.3.tar.gz
Size 6.3 kB
Tags Source
SHA-256 checksum
How to use checksums
5c5938a82a92763c15e7b7ffd1f7abaca09cb02e7e30b85d39fe97f91524229d
BLAKE2b-256 checksum
How to use checksums
56f9dee8ac681fe078cf082a1a19a5d46517910c3d09d9e7c5e04d2cb8cc8b45
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / chronoverify-0.1.3-py3-none-any.whl

Download URL chronoverify-0.1.3-py3-none-any.whl
Size 7.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
afd68714bc0e65b1760b2fbb1012ac039c99d14cfbbe852165deddd8796ecd24
BLAKE2b-256 checksum
How to use checksums
90f9adb802e6252b1dcb8b03d6304e3ebdb4230d1181773ccec1cad9c22da77c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page