Metadata-Version: 2.4
Name: chronoverify
Version: 0.1.0
Summary: Client for the ChronoVerify image capture-time and provenance verification API.
Author: ChronoVerify
License: MIT
Project-URL: Homepage, https://chronoverify.com
Project-URL: Documentation, https://chronoverify.com/method#api
Keywords: image,provenance,c2pa,exif,forensics,verification,osint,metadata
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Multimedia :: Graphics
Classifier: Topic :: Security
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.25
Dynamic: license-file

# chronoverify

Python client for the [ChronoVerify](https://chronoverify.com) 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** (the first 100 verifications each month are included, then a flat $0.003 per image, no per-operation multipliers): https://chronoverify.com/pricing

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

## Install

```bash
pip install chronoverify
```

## Use

```python
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):

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

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

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

The key can also come from the `CHRONOVERIFY_API_KEY` environment variable.

## Command line

```bash
chronoverify verify photo.jpg
chronoverify verify --url https://example.com/photo.jpg
chronoverify verify photo.jpg --json
```

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
