curl -X POST https://api.bizmori.com/api/v3/orders/ORDER_ID/reports \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"locale": "en-US"
}'
const orderId = 'ORDER_ID';
const response = await fetch(`https://api.bizmori.com/api/v3/orders/${orderId}/reports`, {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"locale": "en-US"
})
});
const { data } = await response.json();
import requests
order_id = 'ORDER_ID'
response = requests.post(
f'https://api.bizmori.com/api/v3/orders/{order_id}/reports',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
"locale": "en-US"
}
)
data = response.json()['data']
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bizmori.com/api/v3/orders/{orderId}/reports",
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([
'locale' => 'en-US'
]),
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/v3/orders/{orderId}/reports"
payload := strings.NewReader("{\n \"locale\": \"en-US\"\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/v3/orders/{orderId}/reports")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"locale\": \"en-US\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bizmori.com/api/v3/orders/{orderId}/reports")
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 \"locale\": \"en-US\"\n}"
response = http.request(request)
puts response.read_bodyCreate order report
Create a PDF analysis report for an order. BIZ MORI picks the report type from the order type, so you don’t send it:
- Watermark extract orders created with the v3 API →
watermarkDetection - AI Detection orders →
aiDetection
Image watermark reports support ko-KR, en-US, and ja-JP. PDF watermark reports support ko-KR only. Requesting the same order and locale again returns the existing report.
Responses
202withqueuedorprocessing: the report is being generated. PollGET /api/v3/orders/{orderId}/reports/{locale}200withcompleted: the report already exists and includesdownload200withfailed: generation failed and cannot be retried (failure.retryableisfalse)
Retries for watermark reports
If a watermark report is failed, calling this endpoint again for the same order and locale starts a new attempt (202). Each attempt reserves 1 credit; failed attempts are refunded and only a successful attempt is charged. After 3 failed attempts the report is not regenerated.
Returns 400 ORDER_EXPIRED after the order’s retention period ends, even if a report exists.
curl -X POST https://api.bizmori.com/api/v3/orders/ORDER_ID/reports \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"locale": "en-US"
}'
const orderId = 'ORDER_ID';
const response = await fetch(`https://api.bizmori.com/api/v3/orders/${orderId}/reports`, {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"locale": "en-US"
})
});
const { data } = await response.json();
import requests
order_id = 'ORDER_ID'
response = requests.post(
f'https://api.bizmori.com/api/v3/orders/{order_id}/reports',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
"locale": "en-US"
}
)
data = response.json()['data']
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bizmori.com/api/v3/orders/{orderId}/reports",
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([
'locale' => 'en-US'
]),
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/v3/orders/{orderId}/reports"
payload := strings.NewReader("{\n \"locale\": \"en-US\"\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/v3/orders/{orderId}/reports")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"locale\": \"en-US\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bizmori.com/api/v3/orders/{orderId}/reports")
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 \"locale\": \"en-US\"\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
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.
Path Parameters
Order ID
Body
Report language. Defaults to ko-KR.
ko-KR, en-US, ja-JP Response
The report is already complete, or it failed and cannot be retried
Hide child attributes
Hide child attributes
Order ID
Set by BIZ MORI from the order type
watermarkDetection, aiDetection ko-KR, en-US, ja-JP Report generation status
queued, processing, completed, failed Download information. Present only when status is completed
Hide child attributes
Hide child attributes
Presigned PDF URL, valid for 300 seconds. Watermark reports download as <order name>-report-<locale>.pdf (for example Spring campaign-report-en-US.pdf).
Call the report endpoint again for a new URL instead of storing this one.
300 Failure information. Present only when status is failed
Hide child attributes
Hide child attributes
REPORT_GENERATION_FAILED, REPORT_NOT_AVAILABLE true if calling POST /api/v3/orders/{orderId}/reports again for the same order and locale starts a new attempt.
Watermark reports become false after 3 failed attempts.