Know which customer images were made or changed.
Send any image a customer submits: a shop or product photo, a claim photo, an invoice, a bill, a receipt or a document. TrueSecurix answers real, AI generated, AI edited or digitally edited, tells your team whether to pass, review or flag it, and shows the evidence and the edited areas behind the answer.
In our held-out test of 31,966 images, 0 of 2,526 genuine business photos (shops, markets, receipts, documents) were flagged and 87.8% of manipulated images were caught. Read how we measured
One request: a generated kirana store photo from our test set
curl https://truesecurix.com/v1/image/authenticity \ -H "X-API-Key: $TRUESECURIX_API_KEY" \ -H "Idempotency-Key: loan-48211-shop-1" \ -F "image=@kirana_front.jpg" \ -F "reference=loan-48211"
{
"object": "image_authenticity",
"reference": "loan-48211",
"decision": "flag",
"classification": "ai_generated",
"label": "AI Generated",
"confidence": 0.9905,
"review_recommended": false,
"suspected": null,
"scores": { "real": 0.0028, "ai_generated": 0.9905,
"ai_edited": 0.0045, "digitally_edited": 0.0022 },
"indicators": [
{ "code": "generator_fingerprint", "strength": "strong",
"detail": "Generative-model traces in 6 of 6 areas of the image, a level genuine camera photos in our reference set do not reach." },
{ "code": "metadata_absent", "strength": "neutral",
"detail": "No metadata in the file. Common for images sent through messaging apps; not counted as evidence." }
],
"regions": [],
"model_version": "ia-2026.10.15",
...
}
A real result from model ia-2026.10.15 on a held-out test image, trimmed for length. The full field list is below and in the API reference.
Each answer is a class the model was trained and measured on.
Four answers, in the terms of your own files
Every image comes back as exactly one of four classes, with a score for each, so your team knows not only that something is wrong but what kind of wrong it is.
| Answer | What it means | What it looks like in practice |
|---|---|---|
| Real | A camera photo with no sign of generation or editing. | A seller's own shopfront, a car photographed after a real accident, a delivery partner's licence, a receipt photographed on the counter. |
| AI generated | The whole image was made by an image model. Nothing in it was photographed. | A kirana store that does not exist, a dented car that was never in an accident, a product listing with no product behind it, a made-up invoice. |
| AI edited | A real photo with part of it redrawn by an AI editor. | A signboard renamed to match the application, damage added to a car or a parcel, empty shelves filled with stock, a crack added to a phone screen for a refund. |
| Digitally edited | A real photo changed by hand in an image editor: pasted, cloned or retouched. | An amount changed on an invoice or a repair estimate, a figure changed on a medical bill or a payslip, a stamp copied onto a certificate. |
Real results from model ia-2026.10.15 on held-out test images. The marked boxes are the regions the API returned.
Three images, as the API examined them
A genuine tea stall passes. A generated kirana store is flagged. A street photo with a pasted price display is flagged, with the pasted areas located.

No generative traces, no noise or compression inconsistency and no duplicated regions were found.

Generative-model traces in 6 of 6 areas of the image, a level genuine camera photos in our reference set do not reach.
area 1, 1.005 areas (about 6% of the image, lower left) show noise and compression traces that differ from the rest of the photo, the signature of pasted, cloned or retouched content.
Nobody is rejected on a guess. When the evidence is not strong enough to accuse a genuine customer, a person decides.
Three outcomes your team can act on
The decision field turns the answer into an action. Route on it directly in your onboarding, claims or case system.
Accept the image
The answer is Real and no evidence points to a manipulation. The file continues through your normal checks.
A person decides
Some evidence points to a manipulation, but not strongly enough to accuse a genuine customer. The suspected field names the class it leans toward.
Treat as manipulated
Strong evidence of generation or editing, with the indicators that support it and, for edits, the regions where the change was found.
What a review looks like
An image sent to review is answered Real with review_recommended set to true, because the evidence did not clear the bar for an accusation. It is never reported as a pass. The suspected field tells your reviewer what to look for: the manipulation class the evidence leans toward, and its score.
Test keys return this exact shape when you send reference=review, so you can build your review queue before you spend a credit.
{
"decision": "review",
"classification": "real",
"review_recommended": true,
"suspected": {
"classification": "ai_edited",
"label": "AI Edited",
"score": 0.62
},
...
}
The contract is versioned. Fields are added, never renamed or removed.
What every response contains
Enough for an automated rule and enough for a reviewer in your team to understand the call without asking us.
| Field | What it holds |
|---|---|
| decision | The outcome to act on: pass, review or flag. |
| classification | One of real, ai_generated, ai_edited, digitally_edited, with a readable label beside it. |
| confidence | The calibrated probability of the answer, from 0 to 1. |
| scores | A probability for each of the four classes. They add up to 1. |
| suspected | For a review only: the manipulation class the evidence leans toward and its score. Null otherwise. |
| indicators | The evidence behind the answer. Each has a stable code you can build rules on, the class it supports, a strength (strong, moderate, weak or neutral) and a plain-English detail for a reviewer. |
| regions | Located edited areas, each with x, y, width and height as fractions of the image's width and height from the top-left corner, a score, and the class it supports. A box at x 0.2281 starts 22.81% of the way across, at any display size. |
| provenance | What the file declares about its own origin: C2PA content credentials and whether they verify, the IPTC digital source type, the editing software, and the camera make and model. Only present evidence counts: a file with no metadata is not treated as suspicious. |
| image | Width, height, format and the SHA-256 fingerprint of the file you sent. |
| model_version | The model that made the call, for example ia-2026.10.15. It is also written to your history with every check. |
| reference | Your own identifier, such as an application, claim or order number, echoed back for matching. |
Indicator codes you will see
| Code | Points to | What was found |
|---|---|---|
| generator_fingerprint | AI generated | Traces left by image generation models across areas of the image. |
| localized_generative_region | AI edited | Generation traces confined to part of an otherwise camera-made photo. |
| tamper_localized | Digitally edited | Areas whose noise and compression traces differ from the rest of the photo. |
| duplicated_region | Digitally edited | Part of the image copied to another place in the same image. |
| generator_parameters | AI generated | Generation settings written into the file by an image generation tool. |
| editing_software | Digitally edited | The file was saved by an image editor. Weak on its own: re-saving is not tampering. |
| no_manipulation_found | Real | No generative traces, no noise or compression inconsistency and no duplicated regions. |
| metadata_absent | Context only | No metadata in the file, which is normal after a messaging app. Not counted as evidence. |
The full list of codes is in the API reference.
Measured on images it never saw
Every figure comes from a test set of 31,966 images kept apart from training, threshold setting and model choice. Four generator families were kept out of training entirely, to show how the model does on tools it has never seen.
Training used 49,941 images and validation 24,908. Every image is licensed for commercial use, recorded per image. About half of every class was passed through messaging-app recompression and screenshots, the way customer images actually arrive.
The image tools fraudsters reach for
Share of each tool's held-out test images that the model answered as not real. "Held out" means no image from that tool was used in training.
| Tool | Kind | Test images | Flagged as not real |
|---|---|---|---|
| Ideogram | Generator | 1,265 | 96.0% |
| Grok Imagine (xAI) | Generator | 1,033 | 95.7% |
| GPT Image (OpenAI) | Generator | 826 | 95.3% |
| Nano Banana (Google Gemini) | Generator | 839 | 93.9% |
| Seedream (ByteDance) held out | Generator | 4,488 | 93.7% |
| Imagen (Google) | Generator | 826 | 92.6% |
| FLUX (Black Forest Labs) | Generator | 1,217 | 92.6% |
| GPT-4o image edits | AI editor | 862 | 84.1% |
| FLUX Kontext edits | AI editor | 828 | 76.4% |
Model ia-2026.10.15. The measured results page has every tool, every photo source and every operating point.
What a security or compliance review asks first.
How your images are handled
Analysed in memory, never stored
The image is examined in memory and discarded. We keep its SHA-256 fingerprint and the result, so you can prove which file produced which answer without us holding the file.
Hosted in India
The service runs on Azure in Central India. Data handling is aligned with the DPDP Act, 2023, and a data processing agreement is available on request.
Charged once, only on success
One credit per image. A check that fails is not charged, and a repeated Idempotency-Key returns the original result without a second charge.
Every answer on record
Each check is written to your history with its outcome and model version. Filter it, export it as CSV, or receive it at your endpoint through signed webhooks.
Formats and limits
One image per request, sent as a multipart upload in the image field.
iPhone photos saved as HEIC are not accepted. Convert them to JPEG first; most phones and gallery apps can export JPEG directly. The batch script lists HEIC files as not sent rather than skipping them silently.
A whole folder of images in one command
For a portfolio review or a proof of concept, the batch script sends every image in a folder and writes one CSV with the outcome, class, scores, top indicators and regions for each file.
- Safe to stop and run again: images already in the CSV are skipped.
- Each request uses the image's SHA-256 as its idempotency key, so no image is charged twice, even if a run is interrupted.
- Nothing is skipped silently: unsupported files and images the API refuses are listed separately from failures worth retrying.
- With your own labels, it prints accuracy per class, the confusion matrix, genuine images wrongly flagged and the share sent to review.
Download the batch script or read the batch instructions in the developer docs.
# Needs Python 3 and httpx pip install httpx export TRUESECURIX_API_KEY=tsx_live_xxx python batch_image_authenticity.py ./images results.csv # With your own labels, for a POC python batch_image_authenticity.py ./images results.csv \ --workers 4 --labels labels.csv
Run your own images today
Try a photo in the live demo now, or create an account for 100 free checks. No card is needed, and test keys are free while you build.