This guide walks you through detecting whether an image is AI-generated — from uploading an image to reading the detection result.
Prerequisites
A BIZ MORI API key (get one here )
An image file to analyze (jpeg, jpg, png, webp, bmp, or tiff)
Step 1: Create an order
Create an AI Detection order with your image file name.
curl -X POST https://api.bizmori.com/api/v2/orders/ai-detection \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"idempotencyKey": "my-detection-001",
"fileName": "photo.jpg"
}'
const response = await fetch ( 'https://api.bizmori.com/api/v2/orders/ai-detection' , {
method: 'POST' ,
headers: {
'Authorization' : 'Bearer YOUR_API_TOKEN' ,
'Content-Type' : 'application/json' ,
},
body: JSON . stringify ({
idempotencyKey: 'my-detection-001' ,
fileName: 'photo.jpg' ,
}),
});
const { data } = await response . json ();
import requests
res = requests.post(
'https://api.bizmori.com/api/v2/orders/ai-detection' ,
headers = { 'Authorization' : 'Bearer YOUR_API_TOKEN' },
json = {
'idempotencyKey' : 'my-detection-001' ,
'fileName' : 'photo.jpg' ,
},
)
data = res.json()[ 'data' ]
Response:
{
"data" : {
"orderId" : "123456789" ,
"orderName" : "ai_detection_2026-03-18" ,
"status" : "pending" ,
"file" : {
"fileId" : 1 ,
"fileName" : "photo.jpg" ,
"uploadUrl" : "https://s3.amazonaws.com/..." ,
"fileKey" : "ai-detection/123456789/1/photo.jpg"
}
}
}
You can optionally request heatmap and overlay images by adding "options": { "generateHeatmap": true, "generateOverlay": true } to the request body. These will be available in the order detail once processing completes.
Step 2: Upload the file
PUT your file to the presigned uploadUrl from Step 1. This is a direct S3 upload — no Authorization header needed .
curl -X PUT "https://s3.amazonaws.com/..." \
-H "Content-Type: image/jpeg" \
--data-binary @photo.jpg
The presigned upload URL expires after 1 hour . Upload your image before it expires.
Step 3: Confirm the order
After uploading, call confirm to start detection processing:
curl -X POST https://api.bizmori.com/api/v2/orders/ai-detection/confirm \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"idempotencyKey": "YOUR_IDEMPOTENCY_KEY", "orderId": "123456789"}'
await fetch ( 'https://api.bizmori.com/api/v2/orders/ai-detection/confirm' , {
method: 'POST' ,
headers: {
'Authorization' : 'Bearer YOUR_API_TOKEN' ,
'Content-Type' : 'application/json' ,
},
body: JSON . stringify ({
idempotencyKey: 'YOUR_IDEMPOTENCY_KEY' ,
orderId: '123456789' ,
}),
});
requests.post(
'https://api.bizmori.com/api/v2/orders/ai-detection/confirm' ,
headers = { 'Authorization' : 'Bearer YOUR_API_TOKEN' },
json = { 'idempotencyKey' : 'YOUR_IDEMPOTENCY_KEY' , 'orderId' : '123456789' },
)
Step 4: Check the result
Poll the order or use webhooks to receive a push notification when detection completes. The detection result is included directly in the order detail — there is no separate download step.
curl https://api.bizmori.com/api/v2/orders/123456789 \
-H "Authorization: Bearer YOUR_API_TOKEN"
const res = await fetch ( 'https://api.bizmori.com/api/v2/orders/123456789' , {
headers: { 'Authorization' : 'Bearer YOUR_API_TOKEN' },
});
const { data } = await res . json ();
// data.probability: 0-1
// data.statusCode: 'likely_ai' | 'uncertain_ai' | 'uncertain_real' | 'likely_real'
res = requests.get(
'https://api.bizmori.com/api/v2/orders/123456789' ,
headers = { 'Authorization' : 'Bearer YOUR_API_TOKEN' },
)
data = res.json()[ 'data' ]
probability = data[ 'probability' ]
status_code = data[ 'statusCode' ]
Response:
{
"data" : {
"type" : "aiDetection" ,
"orderId" : "123456789" ,
"status" : "complete" ,
"probability" : 0.92 ,
"statusCode" : "likely_ai" ,
"heatmapUrl" : "https://s3.amazonaws.com/..." ,
"overlayUrl" : "https://s3.amazonaws.com/..."
}
}
Reading the result
The probability field (0–1) indicates how likely the image is AI-generated. The statusCode provides a human-readable interpretation:
statusCodeProbability range Meaning likely_real< 0.25 Highly likely human-created uncertain_real0.25 – 0.5 Likely human-created uncertain_ai0.5 – 0.75 Likely AI-generated likely_ai≥ 0.75 Highly likely AI-generated
heatmapUrl and overlayUrl are only present if you requested them via options.generateHeatmap and options.generateOverlay in Step 1.
Error handling
HTTP Status Meaning Action 400Invalid request Check parameters and file format 401Authentication failed Verify your API key 429Rate limit exceeded Reduce request frequency or upgrade plan
For the complete error code reference, see Error Codes .
Next steps
Anti-AI Protect images from AI training and generation.
Watermark Embed Embed invisible watermarks into images.
Watermark Extract Detect and extract watermarks from images.
Webhooks Set up webhooks to get notified when processing completes.