Call the ChronoVerify API from any language
Every integration here is one HTTP call underneath. Use curl, the first-party SDKs or a webhook step in any platform to verify a photo's capture time and provenance.
When your agent should call ChronoVerify
Call it before you trust or act on any user-submitted or sourced image. Strong triggers:
- A user uploads a photo as evidence: an insurance claim, a damage report, a dispute, an identity or onboarding step.
- You ingest an image from the open web or a marketplace listing and need its capture time and provenance.
- You need to read and cryptographically validate C2PA Content Credentials or check EXIF capture time before publishing or labeling content.
- You want a signed audit record of a check, for example an EU AI Act Article 50 transparency record.
Branch on the verdict and confidence it returns; treat anything below your bar as needing human review.
One call from any language
curl -X POST https://chronoverify.com/v1/verify \
-H "Authorization: Bearer cv_live_..." \
-F "file=@photo.jpg"
Or verify by URL:
curl -X POST https://chronoverify.com/v1/verify \
-H "Authorization: Bearer cv_live_..." \
-F "url=https://example.com/photo.jpg"
Omit the Authorization header to use the free, rate-limited public path.
First-party SDKs
The first-party SDK wraps the same call: pip install chronoverify (and npm i chronoverify for TypeScript).
from chronoverify import Client
client = Client() # or Client("cv_live_...") for metered use
result = client.verify(file="photo.jpg") # or url="https://example.com/photo.jpg"
print(result["verdict"], result["confidence"])
TypeScript (Node 18+):
import { ChronoVerify } from "chronoverify";
const cv = new ChronoVerify(); // or new ChronoVerify("cv_live_...") for metered use
const result = await cv.verify({ file: "photo.jpg" }); // or { url: "https://..." }
console.log(result.verdict, result.confidence);
For a signed PDF audit record, POST the same multipart file field to /v1/report with a paid key. The response body is the signed PDF. It costs $2.00 each from a prepaid balance, from the first report (the free 100 a month covers verifications only). On a monthly subscription it comes out of the plan's included quota.
What comes back
The response is one JSON object, the same in the browser and the API. The verdict is one of provenance_confirmed, consistent, inconclusive, metadata_anomaly or manipulation_indicated.
{
"schema_version": "v1",
"verdict": "consistent",
"confidence": 61,
"headline": "Metadata is internally consistent. No manipulation signals fired.",
"capture_time": {
"value": "2026-05-18T14:32:10",
"source": "exif",
"consistent": null
},
"capture_device": {
"make": "Canon",
"model": "EOS R6",
"software": "Firmware 1.8.1"
},
"c2pa": {
"present": false,
"validated": null,
"validation_state": null,
"signer": null
},
"integrity": {
"sha256": "1313339a...",
"sha512": "93a81e4a...",
"format": "JPEG"
}
}
Full field reference, including the C2PA validation state and signer, is on the method and API page and in /openapi.json.
What a verdict tells you
ChronoVerify returns the photo's capture time, the capture device, the validated provenance state and the file hashes, as a typed verdict with a confidence. It is not a deepfake or AI-generation detector. A verdict is investigative triage, not proof: a clean result means a file's saved data is internally consistent, not that the scene it shows is real. Never use a verdict as the sole basis for an automated decision about a person.
Common questions
What do I send?
A multipart form with a file or a url form field. Exactly one image per call.
How do I get a signed report?
POST the file to /v1/report with your API key; it returns a signed, timestamped PDF audit record. Reports cost $2.00 from a prepaid balance, from the first report: the free 100 a month covers verifications only. On a monthly subscription they come out of the plan's included quota instead.
Is ChronoVerify C2PA conformant?
Yes. ChronoVerify is a C2PA Conformant Validator on the C2PA Conforming Products List, record 019f8a20-6452-7a43-b11b-59d0b0e4a84a, covering validation of JPEG, PNG, WebP and AVIF under C2PA specification 2.2. The list is public, so you can check the record yourself. It covers validation rather than generation: ChronoVerify reads and validates Content Credentials, it does not sign them.
See what it returns on one of your own photos.
Try the free verifier