cURL
curl -X POST https://api.bizmori.com/api/v2/orders/wtr-embed \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"idempotencyKey": "5e9c7a3b-b4d2-4f18-83e6-8b1a2d5f7c93",
"files": [
{
"fileName": "image.jpg",
"watermarks": [{"text": "MORI_WATERMARK"}]
}
]
}'const response = await fetch('https://api.bizmori.com/api/v2/orders/wtr-embed', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
idempotencyKey: '5e9c7a3b-b4d2-4f18-83e6-8b1a2d5f7c93',
files: [
{
fileName: 'image.jpg',
watermarks: [{ text: 'MORI_WATERMARK' }]
}
]
})
});
const data = await response.json();import requests
response = requests.post(
'https://api.bizmori.com/api/v2/orders/wtr-embed',
headers={'Authorization': 'Bearer YOUR_API_TOKEN'},
json={
'idempotencyKey': '5e9c7a3b-b4d2-4f18-83e6-8b1a2d5f7c93',
'files': [
{
'fileName': 'image.jpg',
'watermarks': [{'text': 'MORI_WATERMARK'}]
}
]
}
)
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bizmori.com/api/v2/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' => '5e9c7a3b-b4d2-4f18-83e6-8b1a2d5f7c93',
'files' => [
[
'fileName' => 'image1.jpg',
'watermarks' => [
[
'text' => 'MORI_WATERMARK'
]
]
],
[
'fileName' => 'image2.png',
'watermarks' => [
[
'text' => 'MORI_WATERMARK'
]
]
]
]
]),
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/wtr-embed"
payload := strings.NewReader("{\n \"idempotencyKey\": \"5e9c7a3b-b4d2-4f18-83e6-8b1a2d5f7c93\",\n \"files\": [\n {\n \"fileName\": \"image1.jpg\",\n \"watermarks\": [\n {\n \"text\": \"MORI_WATERMARK\"\n }\n ]\n },\n {\n \"fileName\": \"image2.png\",\n \"watermarks\": [\n {\n \"text\": \"MORI_WATERMARK\"\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/v2/orders/wtr-embed")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotencyKey\": \"5e9c7a3b-b4d2-4f18-83e6-8b1a2d5f7c93\",\n \"files\": [\n {\n \"fileName\": \"image1.jpg\",\n \"watermarks\": [\n {\n \"text\": \"MORI_WATERMARK\"\n }\n ]\n },\n {\n \"fileName\": \"image2.png\",\n \"watermarks\": [\n {\n \"text\": \"MORI_WATERMARK\"\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bizmori.com/api/v2/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\": \"5e9c7a3b-b4d2-4f18-83e6-8b1a2d5f7c93\",\n \"files\": [\n {\n \"fileName\": \"image1.jpg\",\n \"watermarks\": [\n {\n \"text\": \"MORI_WATERMARK\"\n }\n ]\n },\n {\n \"fileName\": \"image2.png\",\n \"watermarks\": [\n {\n \"text\": \"MORI_WATERMARK\"\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"orderName": "wtr_embed_20260318120000.000",
"orderId": "424706541233094656",
"status": "pending",
"files": [
{
"fileId": 2469,
"fileName": "image.jpg",
"uploadUrl": "https://s3.ap-northeast-2.amazonaws.com/...?X-Amz-Algorithm=AWS4-HMAC-SHA256&...",
"fileKey": "wtr-embed/424706541233094656/images/1/image.jpg",
"fileFormat": "JPG",
"fileType": "IMG"
},
{
"fileId": 2470,
"fileName": "document.pdf",
"uploadUrl": "https://s3.ap-northeast-2.amazonaws.com/...?X-Amz-Algorithm=AWS4-HMAC-SHA256&...",
"fileKey": "wtr-embed/424706541233094656/documents/2/document.pdf",
"fileFormat": "PDF",
"fileType": "DOCUMENT"
}
]
}
}Watermark-Embed
워터마크 삽입 주문 생성
워터마크 삽입 주문을 생성합니다.
- 이미지당 최대 10개의 워터마크 텍스트
- 주문당 최대 100개의 파일
- 지원 이미지 형식 (IMG): jpg, jpeg, png, webp, bmp, tiff
- 지원 문서 형식 (DOCUMENT): pdf
입력 모드 (업로드 / URL / 혼합)
입력 모드는 각 파일 객체의 originalFileUrl 존재 여부에 따라 결정됩니다:
- 업로드 모드 (
originalFileUrl없음): Presigned URL 발급 → 클라이언트가 S3에 업로드 → 처리 자동 시작 - URL 모드 (
originalFileUrl제공): 해당 URL에서 이미지를 다운로드하여 즉시 처리 - 혼합 모드: 일부 파일은 업로드 모드, 나머지는 URL 모드로 동시 처리
동작 방식
| 조건 | 주문 상태 | Confirm 필요 여부 |
|---|---|---|
모든 파일에 originalFileUrl 있음 | pending | 불필요 (서버 다운로드 후 자동 시작) |
originalFileUrl 없는 파일 존재 | pending | 불필요 (업로드 후 자동 시작) |
Anti-AI, AI Detection과 달리 Watermark Embed는 별도의 confirm 단계가 필요하지 않습니다. 파일 업로드가 완료되면 처리가 자동으로 시작됩니다.
POST
/
api
/
v2
/
orders
/
wtr-embed
cURL
curl -X POST https://api.bizmori.com/api/v2/orders/wtr-embed \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"idempotencyKey": "5e9c7a3b-b4d2-4f18-83e6-8b1a2d5f7c93",
"files": [
{
"fileName": "image.jpg",
"watermarks": [{"text": "MORI_WATERMARK"}]
}
]
}'const response = await fetch('https://api.bizmori.com/api/v2/orders/wtr-embed', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
idempotencyKey: '5e9c7a3b-b4d2-4f18-83e6-8b1a2d5f7c93',
files: [
{
fileName: 'image.jpg',
watermarks: [{ text: 'MORI_WATERMARK' }]
}
]
})
});
const data = await response.json();import requests
response = requests.post(
'https://api.bizmori.com/api/v2/orders/wtr-embed',
headers={'Authorization': 'Bearer YOUR_API_TOKEN'},
json={
'idempotencyKey': '5e9c7a3b-b4d2-4f18-83e6-8b1a2d5f7c93',
'files': [
{
'fileName': 'image.jpg',
'watermarks': [{'text': 'MORI_WATERMARK'}]
}
]
}
)
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bizmori.com/api/v2/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' => '5e9c7a3b-b4d2-4f18-83e6-8b1a2d5f7c93',
'files' => [
[
'fileName' => 'image1.jpg',
'watermarks' => [
[
'text' => 'MORI_WATERMARK'
]
]
],
[
'fileName' => 'image2.png',
'watermarks' => [
[
'text' => 'MORI_WATERMARK'
]
]
]
]
]),
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/wtr-embed"
payload := strings.NewReader("{\n \"idempotencyKey\": \"5e9c7a3b-b4d2-4f18-83e6-8b1a2d5f7c93\",\n \"files\": [\n {\n \"fileName\": \"image1.jpg\",\n \"watermarks\": [\n {\n \"text\": \"MORI_WATERMARK\"\n }\n ]\n },\n {\n \"fileName\": \"image2.png\",\n \"watermarks\": [\n {\n \"text\": \"MORI_WATERMARK\"\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/v2/orders/wtr-embed")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotencyKey\": \"5e9c7a3b-b4d2-4f18-83e6-8b1a2d5f7c93\",\n \"files\": [\n {\n \"fileName\": \"image1.jpg\",\n \"watermarks\": [\n {\n \"text\": \"MORI_WATERMARK\"\n }\n ]\n },\n {\n \"fileName\": \"image2.png\",\n \"watermarks\": [\n {\n \"text\": \"MORI_WATERMARK\"\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bizmori.com/api/v2/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\": \"5e9c7a3b-b4d2-4f18-83e6-8b1a2d5f7c93\",\n \"files\": [\n {\n \"fileName\": \"image1.jpg\",\n \"watermarks\": [\n {\n \"text\": \"MORI_WATERMARK\"\n }\n ]\n },\n {\n \"fileName\": \"image2.png\",\n \"watermarks\": [\n {\n \"text\": \"MORI_WATERMARK\"\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"orderName": "wtr_embed_20260318120000.000",
"orderId": "424706541233094656",
"status": "pending",
"files": [
{
"fileId": 2469,
"fileName": "image.jpg",
"uploadUrl": "https://s3.ap-northeast-2.amazonaws.com/...?X-Amz-Algorithm=AWS4-HMAC-SHA256&...",
"fileKey": "wtr-embed/424706541233094656/images/1/image.jpg",
"fileFormat": "JPG",
"fileType": "IMG"
},
{
"fileId": 2470,
"fileName": "document.pdf",
"uploadUrl": "https://s3.ap-northeast-2.amazonaws.com/...?X-Amz-Algorithm=AWS4-HMAC-SHA256&...",
"fileKey": "wtr-embed/424706541233094656/documents/2/document.pdf",
"fileFormat": "PDF",
"fileType": "DOCUMENT"
}
]
}
}sk_test_ 키를 사용하면 응답의 BIZ MORI 테스트 업로드 URL로 파일을 업로드합니다. 업로드가 끝나면 confirm 없이 처리가 시작되며 다운로드 가능한 결과 파일은 만들지 않습니다.주문 결과 다운로드
주문이complete 상태가 되면 다운로드 URL 발급 엔드포인트를 사용하여 처리된 파일을 다운로드할 수 있습니다:
curl -X GET https://api.bizmori.com/api/v2/orders/{orderId}/download \
-H "Authorization: Bearer YOUR_API_TOKEN"
일반 주문 파일은 주문 생성 후 최대 7일까지 다운로드할 수 있습니다.
sk_test_ 주문은 결과 파일을 만들지 않으므로 다운로드 요청이 404 PROCESSED_FILE_NOT_FOUND를 반환합니다.인증
외부 클라이언트 접근을 위한 Bearer API 키. 일반 키는 sk_ 접두사를 사용하고, 테스트 키는 sk_test_ 접두사로 모의 응답을 사용해 실제 처리나 크레딧 사용 없이 주문 흐름을 검증합니다.
본문
application/json
멱등성 키
Required array length:
1 - 100 elementsHide child attributes
Hide child attributes
파일 이름
예시:
"image.jpg"
원본 이미지 URL (선택)
- 제공 시: URL 모드 (presigned URL 미발급, 즉시 처리)
- 미제공 시: 업로드 모드 (presigned URL 발급)
예시:
"https://example.com/image.jpg"
응답
주문 생성 성공
Hide child attributes
Hide child attributes
주문 상태
pending: 입력 모드에 관계없이 항상 반환
사용 가능한 옵션:
pending Hide child attributes
Hide child attributes
업로드 URL이며 업로드 모드에서만 반환됩니다. live 키는 S3 presigned URL을 받고, 테스트 키는 절대 https://api.bizmori.com/api/v2/test-uploads/{signedToken} URL을 받습니다. 두 URL은 1시간 후 만료됩니다. signed token 자체가 테스트 업로드를 인가하므로 PUT에 Authorization 헤더가 필요 없습니다. 테스트 요청 본문은 스트림으로 소비되어 저장되지 않으며, 테스트 주문은 사용량 차감이나 실제 외부 처리 없이 모의 결과로 전이합니다.
요청에 전달된 공개 이미지 URL. URL 모드에서만 반환됩니다.
파일 식별자: live 키에서는 S3 object key이고 테스트 키에서는 격리된 logical key입니다.
파일 형식.
사용 가능한 옵션:
JPG, PNG, WEBP, BMP, TIFF, PDF 파일 유형 분류.
사용 가능한 옵션:
IMG, DOCUMENT ⌘I