curl -X POST https://api.bizmori.com/api/v3/orders/wtr-embed \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"idempotencyKey": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"files": [
{
"fileName": "campaign.png",
"watermarks": [
{
"text": "MORI-2026-001"
}
]
},
{
"fileName": "contract.pdf",
"originalFileUrl": "https://example.com/contract.pdf",
"watermarks": [
{
"text": "PARTNER-A"
},
{
"text": "PARTNER-B"
}
]
}
]
}'const response = await fetch(`https://api.bizmori.com/api/v3/orders/wtr-embed`, {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"idempotencyKey": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"files": [
{
"fileName": "campaign.png",
"watermarks": [
{
"text": "MORI-2026-001"
}
]
},
{
"fileName": "contract.pdf",
"originalFileUrl": "https://example.com/contract.pdf",
"watermarks": [
{
"text": "PARTNER-A"
},
{
"text": "PARTNER-B"
}
]
}
]
})
});
const { data } = await response.json();
// 各ファイルを presigned URL へ PUT でアップロードします (files[] はリクエスト順)
// await fetch(data.files[0].uploadUrl, { method: 'PUT', body: file });
import requests
response = requests.post(
f'https://api.bizmori.com/api/v3/orders/wtr-embed',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
"idempotencyKey": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"files": [
{
"fileName": "campaign.png",
"watermarks": [
{
"text": "MORI-2026-001"
}
]
},
{
"fileName": "contract.pdf",
"originalFileUrl": "https://example.com/contract.pdf",
"watermarks": [
{
"text": "PARTNER-A"
},
{
"text": "PARTNER-B"
}
]
}
]
}
)
data = response.json()['data']
# 各ファイルを presigned URL へ PUT でアップロードします (files[] はリクエスト順)
# requests.put(data['files'][0]['uploadUrl'], data=open('campaign.png', 'rb'))
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bizmori.com/api/v3/orders/wtr-embed",
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' => 'f47ac10b-58cc-4372-a567-0e02b2c3d479',
'files' => [
[
'fileName' => 'campaign.png',
'watermarks' => [
[
'text' => 'MORI-2026-001'
]
]
],
[
'fileName' => 'contract.pdf',
'originalFileUrl' => 'https://example.com/contract.pdf',
'watermarks' => [
[
'text' => 'PARTNER-A'
],
[
'text' => 'PARTNER-B'
]
]
]
]
]),
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/wtr-embed"
payload := strings.NewReader("{\n \"idempotencyKey\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n \"files\": [\n {\n \"fileName\": \"campaign.png\",\n \"watermarks\": [\n {\n \"text\": \"MORI-2026-001\"\n }\n ]\n },\n {\n \"fileName\": \"contract.pdf\",\n \"originalFileUrl\": \"https://example.com/contract.pdf\",\n \"watermarks\": [\n {\n \"text\": \"PARTNER-A\"\n },\n {\n \"text\": \"PARTNER-B\"\n }\n ]\n }\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/v3/orders/wtr-embed")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotencyKey\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n \"files\": [\n {\n \"fileName\": \"campaign.png\",\n \"watermarks\": [\n {\n \"text\": \"MORI-2026-001\"\n }\n ]\n },\n {\n \"fileName\": \"contract.pdf\",\n \"originalFileUrl\": \"https://example.com/contract.pdf\",\n \"watermarks\": [\n {\n \"text\": \"PARTNER-A\"\n },\n {\n \"text\": \"PARTNER-B\"\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bizmori.com/api/v3/orders/wtr-embed")
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\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n \"files\": [\n {\n \"fileName\": \"campaign.png\",\n \"watermarks\": [\n {\n \"text\": \"MORI-2026-001\"\n }\n ]\n },\n {\n \"fileName\": \"contract.pdf\",\n \"originalFileUrl\": \"https://example.com/contract.pdf\",\n \"watermarks\": [\n {\n \"text\": \"PARTNER-A\"\n },\n {\n \"text\": \"PARTNER-B\"\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"orderId": "1234567890",
"status": "pending",
"processingDelayed": false,
"expiresAt": "2026-10-08T03:00:00.000Z",
"files": [
{
"fileId": "501",
"uploadUrl": "https://s3.ap-northeast-2.amazonaws.com/..."
},
{
"fileId": "502",
"uploadUrl": null
}
],
"outputs": [
{
"fileId": "501-1",
"inputFileId": "501",
"outputIndex": 0,
"watermarkText": "MORI-2026-001",
"status": "pending",
"mediaKind": "image"
},
{
"fileId": "502-1",
"inputFileId": "502",
"outputIndex": 0,
"watermarkText": "PARTNER-A",
"status": "pending",
"mediaKind": "pdf"
},
{
"fileId": "502-2",
"inputFileId": "502",
"outputIndex": 1,
"watermarkText": "PARTNER-B",
"status": "pending",
"mediaKind": "pdf"
}
],
"result": null,
"reports": []
}
}{
"code": "VALIDATION_FAILED"
}{
"code": "AUTH_NOT_AUTHENTICATED"
}{
"code": "WATERMARK_V2_CONFLICT"
}{
"code": "RATE_LIMIT_EXCEEDED"
}{
"code": "SERVER_INTERNAL_ERROR"
}{
"code": "WATERMARK_V2_UNAVAILABLE"
}watermark 埋め込み注文を作成
画像と PDF に不可視 watermark を埋め込む注文を作成します。
- 注文あたりファイル最大 100 件、ファイルあたりテキスト 1〜10 件、テキストあたり 1〜1,000 文字
- テキストごとに
outputs[]に別の結果ファイルが作成され、1 クレジットを使用します - 対応拡張子:
jpg,jpeg,png,webp,bmp,tif,tiff,pdf。BMP は無圧縮 24 ビット RGB または 1・8 ビットのグレースケール、TIFF は単一ページの 8 ビット RGB または 1・8 ビットのグレースケール(アルファなし)のみ処理できます - この範囲外の BMP・TIFF(複数ページ、16 ビット、パレット、アルファ、CMYK など)は、公開
errorCodeとともに注文がfailedになり、クレジットは戻ります originalFileUrlのないファイルはfiles[].uploadUrl(900 秒有効)へPUTでアップロードします- すべてのファイルのアップロードが終わると処理が自動で始まります。confirm の呼び出しはありません
- 12 時間以内にアップロードされない注文は
failedになります GET /api/v3/orders/{orderId}でstatusがcompleteになるまで照会してから、ダウンロード API を呼び出してください
curl -X POST https://api.bizmori.com/api/v3/orders/wtr-embed \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"idempotencyKey": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"files": [
{
"fileName": "campaign.png",
"watermarks": [
{
"text": "MORI-2026-001"
}
]
},
{
"fileName": "contract.pdf",
"originalFileUrl": "https://example.com/contract.pdf",
"watermarks": [
{
"text": "PARTNER-A"
},
{
"text": "PARTNER-B"
}
]
}
]
}'const response = await fetch(`https://api.bizmori.com/api/v3/orders/wtr-embed`, {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"idempotencyKey": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"files": [
{
"fileName": "campaign.png",
"watermarks": [
{
"text": "MORI-2026-001"
}
]
},
{
"fileName": "contract.pdf",
"originalFileUrl": "https://example.com/contract.pdf",
"watermarks": [
{
"text": "PARTNER-A"
},
{
"text": "PARTNER-B"
}
]
}
]
})
});
const { data } = await response.json();
// 各ファイルを presigned URL へ PUT でアップロードします (files[] はリクエスト順)
// await fetch(data.files[0].uploadUrl, { method: 'PUT', body: file });
import requests
response = requests.post(
f'https://api.bizmori.com/api/v3/orders/wtr-embed',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
"idempotencyKey": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"files": [
{
"fileName": "campaign.png",
"watermarks": [
{
"text": "MORI-2026-001"
}
]
},
{
"fileName": "contract.pdf",
"originalFileUrl": "https://example.com/contract.pdf",
"watermarks": [
{
"text": "PARTNER-A"
},
{
"text": "PARTNER-B"
}
]
}
]
}
)
data = response.json()['data']
# 各ファイルを presigned URL へ PUT でアップロードします (files[] はリクエスト順)
# requests.put(data['files'][0]['uploadUrl'], data=open('campaign.png', 'rb'))
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bizmori.com/api/v3/orders/wtr-embed",
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' => 'f47ac10b-58cc-4372-a567-0e02b2c3d479',
'files' => [
[
'fileName' => 'campaign.png',
'watermarks' => [
[
'text' => 'MORI-2026-001'
]
]
],
[
'fileName' => 'contract.pdf',
'originalFileUrl' => 'https://example.com/contract.pdf',
'watermarks' => [
[
'text' => 'PARTNER-A'
],
[
'text' => 'PARTNER-B'
]
]
]
]
]),
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/wtr-embed"
payload := strings.NewReader("{\n \"idempotencyKey\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n \"files\": [\n {\n \"fileName\": \"campaign.png\",\n \"watermarks\": [\n {\n \"text\": \"MORI-2026-001\"\n }\n ]\n },\n {\n \"fileName\": \"contract.pdf\",\n \"originalFileUrl\": \"https://example.com/contract.pdf\",\n \"watermarks\": [\n {\n \"text\": \"PARTNER-A\"\n },\n {\n \"text\": \"PARTNER-B\"\n }\n ]\n }\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/v3/orders/wtr-embed")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotencyKey\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n \"files\": [\n {\n \"fileName\": \"campaign.png\",\n \"watermarks\": [\n {\n \"text\": \"MORI-2026-001\"\n }\n ]\n },\n {\n \"fileName\": \"contract.pdf\",\n \"originalFileUrl\": \"https://example.com/contract.pdf\",\n \"watermarks\": [\n {\n \"text\": \"PARTNER-A\"\n },\n {\n \"text\": \"PARTNER-B\"\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bizmori.com/api/v3/orders/wtr-embed")
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\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n \"files\": [\n {\n \"fileName\": \"campaign.png\",\n \"watermarks\": [\n {\n \"text\": \"MORI-2026-001\"\n }\n ]\n },\n {\n \"fileName\": \"contract.pdf\",\n \"originalFileUrl\": \"https://example.com/contract.pdf\",\n \"watermarks\": [\n {\n \"text\": \"PARTNER-A\"\n },\n {\n \"text\": \"PARTNER-B\"\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"orderId": "1234567890",
"status": "pending",
"processingDelayed": false,
"expiresAt": "2026-10-08T03:00:00.000Z",
"files": [
{
"fileId": "501",
"uploadUrl": "https://s3.ap-northeast-2.amazonaws.com/..."
},
{
"fileId": "502",
"uploadUrl": null
}
],
"outputs": [
{
"fileId": "501-1",
"inputFileId": "501",
"outputIndex": 0,
"watermarkText": "MORI-2026-001",
"status": "pending",
"mediaKind": "image"
},
{
"fileId": "502-1",
"inputFileId": "502",
"outputIndex": 0,
"watermarkText": "PARTNER-A",
"status": "pending",
"mediaKind": "pdf"
},
{
"fileId": "502-2",
"inputFileId": "502",
"outputIndex": 1,
"watermarkText": "PARTNER-B",
"status": "pending",
"mediaKind": "pdf"
}
],
"result": null,
"reports": []
}
}{
"code": "VALIDATION_FAILED"
}{
"code": "AUTH_NOT_AUTHENTICATED"
}{
"code": "WATERMARK_V2_CONFLICT"
}{
"code": "RATE_LIMIT_EXCEEDED"
}{
"code": "SERVER_INTERNAL_ERROR"
}{
"code": "WATERMARK_V2_UNAVAILABLE"
}承認
外部クライアントアクセス用のBearer APIキー。本番キーは sk_ プレフィックスを使用し、テストキーは sk_test_ プレフィックスを使用して、処理やクレジット消費なしに注文ライフサイクルを検証します。
ボディ
冪等性キー。新しい注文ごとに新しい UUIDv4 を使い、同じリクエストを再試行するときだけ再利用します。同じキーは既存の注文を返し、同じキーで異なるリクエストボディを送ると 409 WATERMARK_V2_CONFLICT を返します。
2551 つの注文に画像と PDF を混在できます。
1 - 100 elementsHide child attributes
Hide child attributes
拡張子を含むファイル名。対応形式: jpg, jpeg, png, webp, bmp, tif, tiff, pdf
255元ファイルの公開 HTTPS URL(任意)。指定すると BIZ MORI がファイルをダウンロードし(最大 32 MiB、リダイレクト非対応)、そのファイルの uploadUrl は発行しません。
レスポンス
注文を作成、または同じ idempotencyKey の既存注文を返却
v3 API で作成した不可視 watermark 注文
Hide child attributes
Hide child attributes
注文 ID
注文の処理ステータス
pending- ファイルのアップロード待ちinProgress- 処理中complete- 処理完了。抽出注文はresultで結果を確認しますfailed- 処理失敗、または 12 時間以内にアップロードされなかったexpired- 保管期限を過ぎ、ファイルが削除された
pending, inProgress, complete, failed, expired 自動再試行をすべて使い切り、手動復旧を待っている場合は true。注文は inProgress のままです
リクエスト順の入力ファイル。抽出注文は元ファイル、検査ファイルの順です
埋め込み結果。watermark テキストごとに 1 件で、抽出注文では空の配列です
Hide child attributes
Hide child attributes
{inputFileId}-{連番} 形式の結果ファイル ID(outputs[].fileId)
この結果を作成した入力ファイル ID
入力ファイルの watermarks 内でのテキストの位置
x >= 0埋め込んだ watermark テキスト
この結果ファイルの処理ステータス
pending, queued, processing, completed, failed, retry_required image, pdf 抽出結果の概要。埋め込み注文と、結果が出る前は null で、以下のフィールドだけを含みます
Hide child attributes
Hide child attributes
detected- watermark を検出not_detected- 最後まで検査したが watermark なしinconclusive- 候補はあるが確信度の基準に満たず判定不可unsupported- 処理できない入力 (クレジット返金)error- 検出処理の失敗。watermark なしとは異なる (クレジット返金)
detected, not_detected, inconclusive, unsupported, error この結果からレポートを作成できるかどうか。PDF からキャプチャした画像は false
検出された watermark の埋め込みテキスト。detectionStatus が detected で、呼び出し元のアカウントが埋め込み、発行記録がちょうど 1 件のときだけ返します。
別のアカウントが埋め込んだ watermark など、それ以外は null です。
注文ファイルが削除される日時。以降のダウンロードとレポートは ORDER_EXPIRED を返します