Fraud Analysis
New to Finovox API? Start with the Getting Started guide to learn the basics before diving into fraud analysis.
Finovox fraud detection analyzes documents through multiple methods to identify manipulation, forgery, or tampering. Each document receives a global_risk score and detailed risk assessments.
Finovox uses five complementary detection methods to analyze documents:
| Method | Output Field | What It Detects |
|---|---|---|
| Software Analysis | software_risk | Image editing software (Photoshop, GIMP), screenshot tools, document manipulation software |
| Metadata Analysis | metadata_risk | Inconsistent dates, modified metadata, suspicious application names, timezone anomalies |
| Data Structure Analysis | datastructure_risk | Abnormal PDF structure, unusual compression, font anomalies, object manipulation |
| Vision Analysis | vision_risk | Visual cloning, image splicing, content removal, text overlays, resolution mismatches |
| Consistency Analysis | coherence_risk | Date inconsistencies, invalid business data (Company registration number, VAT), company status vs document date, amount discrepancies |
Each method produces a risk score: low, medium, or high.
API Usage​
The analysis types related to fraud detection are: risk, explanation, pdf_report, and pdf_summary_report. You can combine them in the analyse_type array.
Below is a summary of all available analysis types:
risk — Risk Scores​
Returns fraud risk scores across all detection methods.
Input format:
{
"analyse_type": ["risk"]
}
Output format:
{
"name": "sample.pdf",
"global_risk": "high",
"software_risk": "high",
"metadata_risk": "high",
"datastructure_risk": "low",
"vision_risk": "low",
"coherence_risk": "medium",
"document_quality": "acceptable",
"software": "photoshop"
}
explanation — Fraud Explanations​
Provides human-readable explanations for detected fraud indicators in both English and French.
Input format:
{
"analyse_type": ["explanation"]
}
Output format:
{
"name": "sample.pdf",
"explanation": [
{
"category": "metadata",
"data": {
"en": "This document presents a modification trace: created on 13/08/2018, it was modified on 02/09/2025",
"fr": "Ce document présente une trace de modification : créé le 13/08/2018, il a été retouché le 02/09/2025"
}
},
{
"category": "software",
"data": {
"en": "Document of category 'Invoice' edited with 'Photoshop'",
"fr": "Document de catégorie 'Facture' édité avec 'Photoshop'"
}
}
]
}
The category key matches the detection methods: software, metadata, datastructure, vision, coherence.
pdf_report — Full PDF Report​
Generates a comprehensive PDF report with visual evidence of fraud indicators.
Input format:
{
"analyse_type": ["risk", "pdf_report"]
}
Output format:
{
"name": "sample.pdf",
"global_risk": "high",
// ... other risk fields ...
"pdf_report": {
"en": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC...", // Base64 encoded PDF
"fr": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC..." // Base64 encoded PDF
}
}
The PDF report includes:
- Risk score summary
- Detailed findings for each detection method
- Visual annotations highlighting suspicious areas
pdf_summary_report — Summary PDF Report​
A condensed version of the PDF report focusing on key findings.
Input format:
{
"analyse_type": ["risk", "pdf_summary_report"]
}
Output format:
{
"name": "sample.pdf",
"global_risk": "high",
// ... other risk fields ...
"pdf_summary_report": {
"en": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC...", // Base64 encoded PDF
"fr": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC..." // Base64 encoded PDF
}
}
Complete Example​
Combining multiple analysis types:
- Python
- Javascript
import requests
import json
import base64
url = "https://api-v2.finovox.com/analyse"
headers = {"api-key": "YOUR_API_KEY"}
payload = {
"analyse_type": ["risk", "explanation", "pdf_report"]
}
with open("document.pdf", "rb") as f:
files = [("file", ("document.pdf", f.read()))]
data = {"payload": json.dumps(payload)}
response = requests.post(url, headers=headers, files=files, data=data, timeout=150)
result = response.json()
# Access fraud risk
print(f"Global Risk: {result['global_risk']}")
# Read explanations
for exp in result['explanation']:
print(f"{exp['category']}: {exp['data']['en']}")
# Save PDF report
if 'pdf_report' in result:
pdf_data = base64.b64decode(result['pdf_report']['en'])
with open("fraud_report.pdf", "wb") as f:
f.write(pdf_data)
// npm install axios form-data
const fs = require('fs')
const axios = require('axios')
const FormData = require('form-data')
const url = 'https://api-v2.finovox.com/analyse'
const headers = { 'api-key': 'YOUR_API_KEY' }
const payload = {
analyse_type: ['risk', 'explanation', 'pdf_report']
}
const form = new FormData()
form.append('file', fs.createReadStream('document.pdf'))
form.append('payload', JSON.stringify(payload))
axios.post(url, form, {
headers: {
...headers,
...form.getHeaders()
},
timeout: 150000
}).then(response => {
const result = response.data
// Access fraud risk
console.log(`Global Risk: ${result.global_risk}`)
// Read explanations
result.explanation.forEach(exp => {
console.log(`${exp.category}: ${exp.data.en}`)
})
// Save PDF report
if (result.pdf_report) {
const pdfData = Buffer.from(result.pdf_report.en, 'base64')
fs.writeFileSync('fraud_report.pdf', pdfData)
}
})