curl -X GET https://api.bizmori.com/api/v3/orders/ORDER_ID \
-H "Authorization: Bearer YOUR_API_KEY"const orderId = 'ORDER_ID';
const response = await fetch(`https://api.bizmori.com/api/v3/orders/${orderId}`, {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const { data } = await response.json();
import requests
order_id = 'ORDER_ID'
response = requests.get(
f'https://api.bizmori.com/api/v3/orders/{order_id}',
headers={'Authorization': 'Bearer YOUR_API_KEY'}
)
data = response.json()['data']
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bizmori.com/api/v3/orders/{orderId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.bizmori.com/api/v3/orders/{orderId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.bizmori.com/api/v3/orders/{orderId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bizmori.com/api/v3/orders/{orderId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"orderId": "1234567891",
"status": "complete",
"processingDelayed": false,
"expiresAt": "2026-10-08T03:00:00.000Z",
"files": [
{
"fileId": "601",
"uploadUrl": null
},
{
"fileId": "602",
"uploadUrl": null
}
],
"outputs": [],
"result": {
"detectionStatus": "detected",
"reportSupported": true,
"watermarkText": "MORI-2026-001"
},
"reports": [
{
"locale": "en-US",
"status": "completed"
}
]
}
}{
"code": "VALIDATION_FAILED"
}{
"code": "AUTH_NOT_AUTHENTICATED"
}{
"code": "ORDER_NOT_FOUND"
}{
"code": "SERVER_INTERNAL_ERROR"
}Get watermark order details
Get the status, upload URLs, embed outputs, extract result, and report status of a watermark order created with the v3 API. You can always call this endpoint, whatever the order status.
This endpoint returns only watermark orders created with POST /api/v3/orders/wtr-embed or wtr-extract. Other orders, including Anti-AI and AI Detection orders, return 404 ORDER_NOT_FOUND; use GET /api/v2/orders/{orderId} for them.
files[].uploadUrlis issued only while the orderstatusispending, the retention period has not ended, and the file is still waiting for upload. Otherwise it isnullresultcontains onlydetectionStatus,reportSupported, andwatermarkText. It isnullfor embed orders and before an extract result is readyresult.watermarkTextreturns the embedded text only when your account embedded the detected watermark and exactly one issuance record matches. Otherwise it isnull
curl -X GET https://api.bizmori.com/api/v3/orders/ORDER_ID \
-H "Authorization: Bearer YOUR_API_KEY"const orderId = 'ORDER_ID';
const response = await fetch(`https://api.bizmori.com/api/v3/orders/${orderId}`, {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const { data } = await response.json();
import requests
order_id = 'ORDER_ID'
response = requests.get(
f'https://api.bizmori.com/api/v3/orders/{order_id}',
headers={'Authorization': 'Bearer YOUR_API_KEY'}
)
data = response.json()['data']
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bizmori.com/api/v3/orders/{orderId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.bizmori.com/api/v3/orders/{orderId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.bizmori.com/api/v3/orders/{orderId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bizmori.com/api/v3/orders/{orderId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"orderId": "1234567891",
"status": "complete",
"processingDelayed": false,
"expiresAt": "2026-10-08T03:00:00.000Z",
"files": [
{
"fileId": "601",
"uploadUrl": null
},
{
"fileId": "602",
"uploadUrl": null
}
],
"outputs": [],
"result": {
"detectionStatus": "detected",
"reportSupported": true,
"watermarkText": "MORI-2026-001"
},
"reports": [
{
"locale": "en-US",
"status": "completed"
}
]
}
}{
"code": "VALIDATION_FAILED"
}{
"code": "AUTH_NOT_AUTHENTICATED"
}{
"code": "ORDER_NOT_FOUND"
}{
"code": "SERVER_INTERNAL_ERROR"
}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.
Path Parameters
Order ID
Response
Order details
Invisible watermark order created with the v3 API
Hide child attributes
Hide child attributes
Order ID
Order processing status
pending- Waiting for file uploadsinProgress- Processingcomplete- Processing finished. For extract orders, read the outcome fromresultfailed- Processing failed, or files were not uploaded within 12 hoursexpired- The retention period has ended and files were deleted
pending, inProgress, complete, failed, expired true when automatic retries are exhausted and the order is waiting for manual recovery. The order stays inProgress
Uploaded input files, in request order. Extract orders return the original first and the file to inspect second
Hide child attributes
Hide child attributes
Input file ID
Presigned PUT URL for uploading the file, valid for 900 seconds. Issued only while the order status is pending, the retention period has not ended, and the file is waiting for upload.
It is null for files given by originalFileUrl, files already uploaded, orders that became failed after the 12-hour upload window, and expired orders.
Embed outputs. One entry per watermark text. Empty for extract orders
Hide child attributes
Hide child attributes
Output file ID in {inputFileId}-{ordinal} format, from outputs[].fileId
ID of the input file this output was created from
Position of the watermark text within the input file's watermarks
x >= 0The embedded watermark text
Processing status of this output
pending, queued, processing, completed, failed, retry_required image, pdf Extract result summary. null for embed orders and until the result is ready. Contains only the fields below
Hide child attributes
Hide child attributes
detected- A watermark was foundnot_detected- The file was fully checked and no watermark was foundinconclusive- A candidate was found but did not meet the confidence thresholdunsupported- The input cannot be processed (credit refunded)error- Detection failed. This is not the same as no watermark (credit refunded)
detected, not_detected, inconclusive, unsupported, error Whether a report can be created from this result. false for images captured from a PDF
Embedded text of the detected watermark. Returned only when detectionStatus is detected, your account embedded the watermark, and exactly one issuance record matches.
Otherwise null, for example when another account embedded the watermark.
When the order files are deleted. Downloads and reports return ORDER_EXPIRED afterwards