Fraud Detection
The fraud check looks at a document for signs that it was altered, reused or generated, and gives it a risk level. It runs in two places: automatically while a document is extracted, and on demand through the fraud verification API. It never decides on its own. The result is a recommendation that a person reviews, and the extracted data stays available whatever the risk level.
- Opt-in. The check is off by default. It runs only for a tenant that allows it and a template that enables it (see Turn it on). Nobody is charged for it without asking for it.
- Price. 8 credits per analysis, the same whether it runs during an extraction or through the fraud verification API. With the check enabled, each extracted document costs 8 credits on top of the extraction. An analysis the API reuses for the same file is free; one that could not complete is not charged.
- Environments. The automatic check during extraction runs in the Cogneris development environment and is being enabled in staging and production, where it stays opt-in per tenant. Talk to your Cogneris contact before planning a rollout.
- No accuracy figure is published. Cogneris does not publish a detection or false-positive rate for this check yet. Treat its result as a reason to look closer, not as a verdict.
When To Use This
Use it in flows where a forged or reused document causes a financial or compliance loss: onboarding, credit, claims, supplier registration, proof of income or address.
How It Works
- A document is extracted with a template that has fraud detection enabled.
- A set of independent checks runs over the extracted fields and the file. A check that cannot run is reported as failed; it never counts as "passed".
- Each check may raise signals. The signals are combined into a risk score from 0 to 1 and a risk level.
- The result is stored under an analysis ID (
requestId) and shown in the Playground, in the workflow review screen and through the API.
Turn It On
You need the tenant administrator profile.
- Allow it for the tenant. In Tenant agent settings › Guards, select Allow fraud detection
in Playground (this adds
fraud-detectionto the tenant's allowed domain agents). Keep Fraud enforcement on Advisory (record only) — see Advisory and enforce. - Enable it on the template. In the template's agent configuration, tab Domain agents, enable Fraud detection in Playground and choose a Sensitivity.
- Extract a document with that template. The result shows the Trust & fraud check step.
Sensitivity
Sensitivity changes only where the levels start, not how the score is computed.
| Sensitivity | review from | suspect from |
|---|---|---|
| Low | 0.50 | 0.85 |
| Medium (default) | 0.35 | 0.70 |
| High | 0.20 | 0.55 |
A tenant administrator can also override the thresholds and the weights of the score for the whole tenant under Fraud scoring (advanced) on the same Guards page. Leave them unset unless you have reviewed enough results to know why you are moving them.
Risk Levels
| Level | Shown as | What to do |
|---|---|---|
trusted | Trusted | No signal reached the review threshold. Continue with the extracted data. |
review | Review recommended | Have a person look at the document before relying on it. |
suspect | Suspicious | Pause the decision and review. The extraction is still available. |
A broken or unverifiable PDF digital signature always produces at least review, whatever the
sensitivity.
Signals
Each signal has a code, a severity (low, medium, high), a score and a short piece of
evidence in plain text. Signals with score 0 are informational: they are shown so you know the
check ran, and they do not raise the risk.
| Check | Signal | What it means |
|---|---|---|
| Field consistency | invalid_tax_id | A CPF or CNPJ field fails its check digits. |
impossible_date | A date field is in the future. | |
value_inconsistency | An amount field does not contain a number. | |
| PDF structure | pdf_incremental_updates | The PDF was saved more than once after it was created. |
pdf_date_mismatch | The modification date is earlier than the creation date. | |
pdf_producer_anomaly | The program that created the PDF differs from the one that produced it. | |
pdf_missing_metadata | The PDF carries no creator or producer information. | |
| Image analysis | ela_inconsistency | Error-level analysis found compression that is uneven across the image or page, which can indicate an edit. |
| Reuse | duplicate_document | The exact same file was already submitted in your tenant. |
layout_reuse | A visually near-identical document was already submitted in your tenant. | |
repeat_reuse | The same layout keeps coming back; the score grows with each repetition. | |
| Volume | velocity_anomaly | Your tenant submitted more analyses today than the configured daily limit (20 by default). |
| Content Credentials (C2PA) | c2pa_present_invalid | The file carries a C2PA manifest that is broken or does not match the content. |
c2pa_present_valid, c2pa_present_untrusted, c2pa_absent, c2pa_unavailable | Informational. A valid manifest, a manifest from a signer outside the trust lists, no manifest, or not evaluated. Absence is not suspicion. | |
| PDF digital signature | pdf_signature_broken | A signature exists but the document changed after it was signed. Forces at least review. |
pdf_signature_unverifiable | A signature exists but could not be verified. Forces at least review. | |
pdf_signature_untrusted | The signature is intact but the signer is not trusted. | |
pdf_signature_valid, pdf_signature_absent, pdf_signature_unavailable | Informational. A valid signature does not lower the risk. | |
| Instructions in the document | prompt_injection_attempt | The text contains instructions aimed at an AI system. |
| AI-generated likelihood | (a number, not a signal) | An AI model's estimate, from 0 to 1, that the extracted text reads as generated. It does not look at the image. |
Every check that reads the file — PDF structure, image analysis, C2PA and PDF signatures — reads it exactly as you uploaded it, not the copy Cogneris normalizes for extraction. Re-saving or printing a document to PDF before sending it erases the edit history these checks look for, so send the file as you received it.
How the score is built
The score adds three weighted parts and is capped at 1:
- 0.6 × the strongest signal score (one strong signal counts; many weak ones do not add up);
- 0.3 × the AI-generated likelihood;
- 0.4 × the strength of any instructions found in the document.
"Generated by AI" is not the same as fraud: a legitimate system can generate a document. That is why the AI-generated likelihood is only one part of the score.
Advisory And Enforce
The tenant chooses how the result is used, under Fraud enforcement:
| Mode | Effect |
|---|---|
| Advisory (record only) (default) | The result is recorded and shown. Nothing is blocked. |
| Enforce | A result at or above the chosen level (Review or higher, or Suspect only) is marked Blocked; a flagged result below it is marked Flagged. |
In both modes the check runs and the result is recorded. In Enforce, a Blocked result is
reported to the caller (fraudBlocked: true on the extraction, policyAction: "block" on the
result) and the document goes to human review. Cogneris never rejects a document by itself: the
extracted data is still returned.
Review Flagged Documents
In Vision
Tenant agent settings › Review (the Fraud review queue) lists every review or suspect result that has no verdict yet,
newest first. Open one, read the signals and record a verdict:
- Confirmed fraud
- False positive
- Inconclusive
Only a tenant administrator can submit a verdict; submitting again replaces it. The verdicts are the only quality measure available today: they let you see, per risk level, how often the check was right.
In Workflow
When a workflow extraction phase runs with fraud detection on, a document whose level is review
or suspect (or is flagged or blocked) goes to the Fraud review queue of the Manual Review
phase, which takes precedence over every other queue, and the process cannot be approved
automatically. The reviewer sees the risk level, the score, the AI-generated likelihood and each
check with its signals. See Organize human review.
Verify A Document Through The API
POST /api/v1/fraud-verify takes one file and returns the verdict, the score, every signal with a
plain label and every check that ran. Call it with an API key holding the fraud-verify.write
scope (a * key holds it). It costs 8 credits per analysis. Sending the same file again at
the same sensitivity within 24 hours returns the earlier analysis, marked reused, at no charge.
Send the values you already extracted from the document in fields to add the field-consistency
checks (tax ids, dates, amounts). Without them, only the file is checked.
The tenant must have fraud detection allowed (step 1 of Turn it on); otherwise the
call is refused with fraud.not_enabled and nothing is charged. See
Fraud verification API.
Read The Result Through The API
With an API key, GET /api/v1/fraud-verify/{requestId} reads any analysis back, including one
made during an extraction (fraudRequestId). See Fraud verification API.
Inside the platform, GET /vision/agent-runs/{requestId}/fraud-assessment returns the same
result. Read available first: false means there is no result for that ID, which is not the
same as trusted. Then read riskLevel, signals and checks; any name in failedCoverage is
a check that did not complete. See Fraud assessment API and
Fraud review API.
What It Does Not Do Yet
These are on the roadmap, not available today:
- pointing to where on the page a sign was found (page and region);
- detecting character-level edits in native PDFs (fonts, glyphs, overlaid objects);
- looking at the image to judge whether a document was generated by AI;
- a published accuracy figure.