curl -X POST https://api.bizmori.com/api/v2/orders/anti-ai \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"idempotencyKey": "2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40",
"files": [
{"fileName": "image1.jpg"},
{"fileName": "image2.png"}
],
"options": {"strength": "high"}
}'const response = await fetch('https://api.bizmori.com/api/v2/orders/anti-ai', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
idempotencyKey: '2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40',
files: [
{ fileName: 'image1.jpg' },
{ fileName: 'image2.png' }
],
options: { strength: 'high' }
})
});
const data = await response.json();import requests
response = requests.post(
'https://api.bizmori.com/api/v2/orders/anti-ai',
headers={'Authorization': 'Bearer YOUR_API_TOKEN'},
json={
'idempotencyKey': '2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40',
'files': [
{'fileName': 'image1.jpg'},
{'fileName': 'image2.png'}
],
'options': {'strength': 'high'}
}
)
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bizmori.com/api/v2/orders/anti-ai",
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([
'idempotencyKey' => '2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40',
'files' => [
[
'fileName' => 'image1.jpg'
],
[
'fileName' => 'image2.png'
]
],
'options' => [
'strength' => 'high'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.bizmori.com/api/v2/orders/anti-ai"
payload := strings.NewReader("{\n \"idempotencyKey\": \"2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40\",\n \"files\": [\n {\n \"fileName\": \"image1.jpg\"\n },\n {\n \"fileName\": \"image2.png\"\n }\n ],\n \"options\": {\n \"strength\": \"high\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.bizmori.com/api/v2/orders/anti-ai")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotencyKey\": \"2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40\",\n \"files\": [\n {\n \"fileName\": \"image1.jpg\"\n },\n {\n \"fileName\": \"image2.png\"\n }\n ],\n \"options\": {\n \"strength\": \"high\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bizmori.com/api/v2/orders/anti-ai")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"idempotencyKey\": \"2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40\",\n \"files\": [\n {\n \"fileName\": \"image1.jpg\"\n },\n {\n \"fileName\": \"image2.png\"\n }\n ],\n \"options\": {\n \"strength\": \"high\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"orderName": "anti_ai_2026-02-09",
"orderId": "123456789",
"status": "pending",
"files": [
{
"fileId": "1",
"fileName": "image1.jpg",
"uploadUrl": "https://s3.amazonaws.com/...",
"fileKey": "temp/123456789/0/image1.jpg"
}
]
}
}Create Anti-AI order
Create an order for AI detection protection processing.
Input Modes (Upload / URL / Mixed)
The input mode is determined by the presence of originalFileUrl in each file object:
- Upload mode (no
originalFileUrl): Presigned URL issued → Client uploads to S3 → Call/confirm - URL mode (
originalFileUrlprovided): Image downloaded from the URL and processed immediately - Mixed mode: Some files in Upload mode, others in URL mode simultaneously
Behavior
| Condition | Order Status | Confirm Required |
|---|---|---|
All files have originalFileUrl | inProgress | No (immediate processing) |
Any file without originalFileUrl | pending | Yes (upload then confirm) |
Zero Copy Mode
When mode.zeroCopy: true, processed results are uploaded directly to customer-provided presigned URLs.
In this case, outputTargets array is required and must match the length of files array.
curl -X POST https://api.bizmori.com/api/v2/orders/anti-ai \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"idempotencyKey": "2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40",
"files": [
{"fileName": "image1.jpg"},
{"fileName": "image2.png"}
],
"options": {"strength": "high"}
}'const response = await fetch('https://api.bizmori.com/api/v2/orders/anti-ai', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
idempotencyKey: '2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40',
files: [
{ fileName: 'image1.jpg' },
{ fileName: 'image2.png' }
],
options: { strength: 'high' }
})
});
const data = await response.json();import requests
response = requests.post(
'https://api.bizmori.com/api/v2/orders/anti-ai',
headers={'Authorization': 'Bearer YOUR_API_TOKEN'},
json={
'idempotencyKey': '2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40',
'files': [
{'fileName': 'image1.jpg'},
{'fileName': 'image2.png'}
],
'options': {'strength': 'high'}
}
)
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bizmori.com/api/v2/orders/anti-ai",
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([
'idempotencyKey' => '2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40',
'files' => [
[
'fileName' => 'image1.jpg'
],
[
'fileName' => 'image2.png'
]
],
'options' => [
'strength' => 'high'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.bizmori.com/api/v2/orders/anti-ai"
payload := strings.NewReader("{\n \"idempotencyKey\": \"2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40\",\n \"files\": [\n {\n \"fileName\": \"image1.jpg\"\n },\n {\n \"fileName\": \"image2.png\"\n }\n ],\n \"options\": {\n \"strength\": \"high\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.bizmori.com/api/v2/orders/anti-ai")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotencyKey\": \"2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40\",\n \"files\": [\n {\n \"fileName\": \"image1.jpg\"\n },\n {\n \"fileName\": \"image2.png\"\n }\n ],\n \"options\": {\n \"strength\": \"high\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bizmori.com/api/v2/orders/anti-ai")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"idempotencyKey\": \"2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40\",\n \"files\": [\n {\n \"fileName\": \"image1.jpg\"\n },\n {\n \"fileName\": \"image2.png\"\n }\n ],\n \"options\": {\n \"strength\": \"high\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"orderName": "anti_ai_2026-02-09",
"orderId": "123456789",
"status": "pending",
"files": [
{
"fileId": "1",
"fileName": "image1.jpg",
"uploadUrl": "https://s3.amazonaws.com/...",
"fileKey": "temp/123456789/0/image1.jpg"
}
]
}
}sk_test_ key, the order follows the test lifecycle described in Test API keys. Test uploads use the returned BIZ MORI upload URL, and no result file is created.Download order results
Once your order reachescomplete status, call Get order result download URLs. One call returns a URL for each output file in files[] and a ZIP archive of all results in archiveUrl:
curl -X GET https://api.bizmori.com/api/v3/orders/{orderId}/download \
-H "Authorization: Bearer YOUR_API_KEY"
expiresAt; after that, the endpoint returns 400 ORDER_EXPIRED. For an sk_test_ order, the URLs point to fixed sample files instead of your results.Authorizations
Bearer API key for external client access. Live keys use the sk_ prefix; test keys use the sk_test_ prefix and support order-lifecycle testing with mock responses without processing or credit usage.
Body
Idempotency key to prevent duplicate requests
1 - 100 elementsHide child attributes
Hide child attributes
File name (with extension)
"image.jpg"
Original image URL (optional)
- Provided: URL mode (no presigned URL issued, immediate processing)
- Not provided: Upload mode (presigned URL issued, confirm required)
"https://example.com/image.jpg"
Order name (optional, auto-generated if not provided)
64Output upload targets for Zero Copy mode (required when mode.zeroCopy is true)
Response
Order created successfully
Hide child attributes
Hide child attributes
Order status
pending: Contains upload files (confirm required)inProgress: All files in URL mode (immediate processing)
pending, inProgress Hide child attributes
Hide child attributes
File ID
File name
Upload URL — upload mode files only. Live keys receive an S3 presigned URL; test keys receive an absolute https://api.bizmori.com/api/v2/test-uploads/{signedToken} URL. Both expire after one hour and can be renewed with POST /api/v2/orders/{orderId}/refresh-urls. PUT needs no Authorization header because the signed token authorizes the test upload. Test request bodies are streamed, not stored; test orders move to simulated results without usage consumption or actual external processing.
File identifier — upload mode files only: an S3 object key for live keys or an isolated logical key for test keys.
Original image URL — URL mode files only