curl --request POST \
--url https://api.valuechecker.net/forensics/analyze \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"image": "https://img.valuechecker.net/attachments/receipt_front.jpg"
}
'import requests
url = "https://api.valuechecker.net/forensics/analyze"
payload = { "image": "https://img.valuechecker.net/attachments/receipt_front.jpg" }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({image: 'https://img.valuechecker.net/attachments/receipt_front.jpg'})
};
fetch('https://api.valuechecker.net/forensics/analyze', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.valuechecker.net/forensics/analyze",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'image' => 'https://img.valuechecker.net/attachments/receipt_front.jpg'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.valuechecker.net/forensics/analyze"
payload := strings.NewReader("{\n \"image\": \"https://img.valuechecker.net/attachments/receipt_front.jpg\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.valuechecker.net/forensics/analyze")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"image\": \"https://img.valuechecker.net/attachments/receipt_front.jpg\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.valuechecker.net/forensics/analyze")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"image\": \"https://img.valuechecker.net/attachments/receipt_front.jpg\"\n}"
response = http.request(request)
puts response.read_body{
"is_ai_generated": false,
"is_digitally_manipulated": true,
"ai_generated_confidence": 0.08,
"manipulation_confidence": 0.91,
"confidence": 0.91,
"analysis": "The price region shows resampling artefacts inconsistent with the surrounding pixels.",
"detect_edits": {
"regions": [
{
"x_min": 0.31,
"y_min": 0.44,
"x_max": 0.52,
"y_max": 0.55
}
]
}
}{
"title": "Invalid analyze payload.",
"description": "image: Field required"
}{
"error": "Invalid Authorization header",
"event_code": "ERIT00",
"event_dict": {
"event_severity": "ERROR",
"title": "Invalid Authorization header",
"description": "Please provide the right authorization token"
}
}{
"error": "Forbidden",
"event_code": "ERIT02",
"event_dict": {
"event_severity": "ERROR",
"title": "Forbidden",
"description": "Access denied"
}
}Analyze Image (Forensics)
Statelessly analyze a single image for AI generation and digital manipulation. Requires the Fraud Detection feature. Returns both independent verdicts with their own confidence scores, and — when the image is judged manipulated — the regions of the detected edits (normalized to [0, 1]).
curl --request POST \
--url https://api.valuechecker.net/forensics/analyze \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"image": "https://img.valuechecker.net/attachments/receipt_front.jpg"
}
'import requests
url = "https://api.valuechecker.net/forensics/analyze"
payload = { "image": "https://img.valuechecker.net/attachments/receipt_front.jpg" }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({image: 'https://img.valuechecker.net/attachments/receipt_front.jpg'})
};
fetch('https://api.valuechecker.net/forensics/analyze', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.valuechecker.net/forensics/analyze",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'image' => 'https://img.valuechecker.net/attachments/receipt_front.jpg'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.valuechecker.net/forensics/analyze"
payload := strings.NewReader("{\n \"image\": \"https://img.valuechecker.net/attachments/receipt_front.jpg\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.valuechecker.net/forensics/analyze")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"image\": \"https://img.valuechecker.net/attachments/receipt_front.jpg\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.valuechecker.net/forensics/analyze")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"image\": \"https://img.valuechecker.net/attachments/receipt_front.jpg\"\n}"
response = http.request(request)
puts response.read_body{
"is_ai_generated": false,
"is_digitally_manipulated": true,
"ai_generated_confidence": 0.08,
"manipulation_confidence": 0.91,
"confidence": 0.91,
"analysis": "The price region shows resampling artefacts inconsistent with the surrounding pixels.",
"detect_edits": {
"regions": [
{
"x_min": 0.31,
"y_min": 0.44,
"x_max": 0.52,
"y_max": 0.55
}
]
}
}{
"title": "Invalid analyze payload.",
"description": "image: Field required"
}{
"error": "Invalid Authorization header",
"event_code": "ERIT00",
"event_dict": {
"event_severity": "ERROR",
"title": "Invalid Authorization header",
"description": "Please provide the right authorization token"
}
}{
"error": "Forbidden",
"event_code": "ERIT02",
"event_dict": {
"event_severity": "ERROR",
"title": "Forbidden",
"description": "Access denied"
}
}Authorizations
Note! Prefix your with apiKey. Note the space after "apiKey ".
Query Parameters
The client ID for the request. It's required if you have access to multiple clients with your API key. Otherwise, it's optional.
Optional session identifier of the user.
Body
The image to analyze: a publicly reachable URL or a base64-encoded image string.
1Response
OK - Returns the forensics verdicts for the image. All fields are null when the analysis could not be produced.
Whether the image was judged AI-generated.
Whether the image was judged digitally manipulated.
Confidence (0-1) of the AI-generated verdict.
Confidence (0-1) of the manipulation verdict.
The higher of the two confidences, for consumers that expect one overall score.
Free-text explanation of the verdicts.
Present only when the image is manipulated and the edit-detection call succeeded. regions may be empty when the manipulation is not localized. Box coordinates are normalized to [0, 1].
Show child attributes
Show child attributes