curl -X POST https://api.bizmori.com/api/v2/orders/wtr-extract \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"idempotencyKey": "8b3f1d6e-e7a5-424b-b6c9-1e4d5a8c0f26",
"file": {
"fileName": "watermarked.jpg"
}
}'const response = await fetch('https://api.bizmori.com/api/v2/orders/wtr-extract', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
idempotencyKey: '8b3f1d6e-e7a5-424b-b6c9-1e4d5a8c0f26',
file: {
fileName: 'watermarked.jpg'
}
})
});
const data = await response.json();import requests
response = requests.post(
'https://api.bizmori.com/api/v2/orders/wtr-extract',
headers={'Authorization': 'Bearer YOUR_API_TOKEN'},
json={
'idempotencyKey': '8b3f1d6e-e7a5-424b-b6c9-1e4d5a8c0f26',
'file': {
'fileName': 'watermarked.jpg'
}
}
)
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bizmori.com/api/v2/orders/wtr-extract",
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' => '8b3f1d6e-e7a5-424b-b6c9-1e4d5a8c0f26',
'file' => [
'fileName' => 'watermarked.jpg'
]
]),
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-extract"
payload := strings.NewReader("{\n \"idempotencyKey\": \"8b3f1d6e-e7a5-424b-b6c9-1e4d5a8c0f26\",\n \"file\": {\n \"fileName\": \"watermarked.jpg\"\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-extract")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotencyKey\": \"8b3f1d6e-e7a5-424b-b6c9-1e4d5a8c0f26\",\n \"file\": {\n \"fileName\": \"watermarked.jpg\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bizmori.com/api/v2/orders/wtr-extract")
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\": \"8b3f1d6e-e7a5-424b-b6c9-1e4d5a8c0f26\",\n \"file\": {\n \"fileName\": \"watermarked.jpg\"\n }\n}"
response = http.request(request)
puts response.read_body워터마크 추출 주문 생성
지원 종료 예정. 이 엔드포인트는 2026년 10월 9일 09:00 KST(00:00 UTC)에 지원 종료 예정입니다. POST /api/v3/orders/wtr-extract를 사용하세요.
이 엔드포인트의 모든 응답(인증 오류와 410 응답 포함)에는 Deprecation: true, Sunset: Fri, 09 Oct 2026 00:00:00 GMT, Link: </api/v3/orders/wtr-extract>; rel="successor-version" 헤더가 포함됩니다.
2026년 10월 9일 09:00 KST(00:00 UTC)부터:
- 인증·권한 검사는 지금처럼 먼저 수행하므로
401,403오류는 기존과 같습니다. - 인증을 통과한 v2 워터마크 삽입·검출 요청은 live 키와
sk_test_키 모두410 Gone과{ "code": "WATERMARK_V2_API_SUNSET" }을 받습니다.Link헤더가 v3 엔드포인트를 가리키니 v3로 새로 요청하세요. - 그때까지 처리를 시작하지 않은 v2 주문은 처리되지 않고 실패로 확정됩니다. 주문 상세(
errors.errorCode)와 실패 웹훅에WATERMARK_V2_API_SUNSET과 v3 안내 메시지가 담기며, 과금되지 않고 크레딧은 복원됩니다. - 종료 시각에 이미 처리 중인 주문은 결과 기록까지 마칩니다. 이후 새로 다시 실행하지는 않습니다.
워터마크 추출 주문을 생성합니다.
- 주문당 파일 1개
- 이미지 (jpg, jpeg, png, webp, bmp, tiff) 또는 PDF 파일 지원
- 이미지의 경우
includeOriginal: true로 원본 파일도 함께 업로드 가능 - PDF는
includeOriginal미지원
curl -X POST https://api.bizmori.com/api/v2/orders/wtr-extract \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"idempotencyKey": "8b3f1d6e-e7a5-424b-b6c9-1e4d5a8c0f26",
"file": {
"fileName": "watermarked.jpg"
}
}'const response = await fetch('https://api.bizmori.com/api/v2/orders/wtr-extract', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
idempotencyKey: '8b3f1d6e-e7a5-424b-b6c9-1e4d5a8c0f26',
file: {
fileName: 'watermarked.jpg'
}
})
});
const data = await response.json();import requests
response = requests.post(
'https://api.bizmori.com/api/v2/orders/wtr-extract',
headers={'Authorization': 'Bearer YOUR_API_TOKEN'},
json={
'idempotencyKey': '8b3f1d6e-e7a5-424b-b6c9-1e4d5a8c0f26',
'file': {
'fileName': 'watermarked.jpg'
}
}
)
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bizmori.com/api/v2/orders/wtr-extract",
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' => '8b3f1d6e-e7a5-424b-b6c9-1e4d5a8c0f26',
'file' => [
'fileName' => 'watermarked.jpg'
]
]),
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-extract"
payload := strings.NewReader("{\n \"idempotencyKey\": \"8b3f1d6e-e7a5-424b-b6c9-1e4d5a8c0f26\",\n \"file\": {\n \"fileName\": \"watermarked.jpg\"\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-extract")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotencyKey\": \"8b3f1d6e-e7a5-424b-b6c9-1e4d5a8c0f26\",\n \"file\": {\n \"fileName\": \"watermarked.jpg\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bizmori.com/api/v2/orders/wtr-extract")
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\": \"8b3f1d6e-e7a5-424b-b6c9-1e4d5a8c0f26\",\n \"file\": {\n \"fileName\": \"watermarked.jpg\"\n }\n}"
response = http.request(request)
puts response.read_bodyPOST /api/v3/orders/wtr-extract를 사용하고, 마이그레이션 방법은 워터마크 검출 빠른 시작을 참고하세요.v2 지원 종료 후 동작 (2026년 10월 9일 09:00 KST, 00:00 UTC부터):- 인증·권한 검사는 지금처럼 먼저 수행하므로
401,403오류는 기존과 같습니다. - 인증을 통과한 v2 워터마크 삽입·검출 요청은 live 키와
sk_test_키 모두410 Gone과{ "code": "WATERMARK_V2_API_SUNSET" }을 받습니다.Link헤더가 v3 엔드포인트를 가리키니 v3로 새로 요청하세요. - 그때까지 처리를 시작하지 않은 v2 주문은 처리되지 않고 실패로 확정됩니다. 주문 상세(
errors.errorCode)와 실패 웹훅에WATERMARK_V2_API_SUNSET과 v3 안내 메시지가 담기며, 과금되지 않고 크레딧은 복원됩니다. - 종료 시각에 이미 처리 중인 주문은 결과 기록까지 마칩니다. 이후 새로 다시 실행하지는 않습니다.
- 기존 v2 주문 조회와 이미 생성된 결과·보고서 다운로드는 기존 보존 기간 안에서 계속 이용할 수 있습니다. v2 보고서를 새로 생성하거나 재생성할 수는 없습니다.
Deprecation: true, Sunset: Fri, 09 Oct 2026 00:00:00 GMT, Link 헤더만 추가됩니다.지원 종료 후 응답
2026년 10월 9일 09:00 KST(00:00 UTC)부터 이 엔드포인트에 인증을 통과한 요청을 보내면 다음과 같이 응답합니다.HTTP/1.1 410 Gone
Content-Type: application/json; charset=utf-8
Deprecation: true
Sunset: Fri, 09 Oct 2026 00:00:00 GMT
Link: </api/v3/orders/wtr-extract>; rel="successor-version"
{ "code": "WATERMARK_V2_API_SUNSET" }
Link 헤더의 v3 엔드포인트로 새로 요청하세요.인증
외부 클라이언트 접근을 위한 Bearer API 키. 일반 키는 sk_ 접두사를 사용하고, 테스트 키는 sk_test_ 접두사로 모의 응답을 사용해 실제 처리나 크레딧 사용 없이 주문 흐름을 검증합니다.
본문
멱등성 키
Hide child attributes
Hide child attributes
응답
주문 생성 성공
Hide child attributes
Hide child attributes
주문 이름 (자동 생성)
주문 ID
워터마크 추출 주문 파일 정보
Hide child attributes
Hide child attributes
파일 ID
파일 이름
업로드 URL. live 키는 S3 presigned URL을 받고, 테스트 키는 절대 https://api.bizmori.com/api/v2/test-uploads/{signedToken} URL을 받습니다. 두 URL은 1시간 후 만료되며 POST /api/v2/orders/{orderId}/refresh-urls로 재발급할 수 있습니다. signed token 자체가 테스트 업로드를 인가하므로 PUT에 Authorization 헤더가 필요 없습니다. 테스트 요청 본문은 스트림으로 소비되어 저장되지 않으며, 테스트 주문은 사용량 차감이나 실제 외부 처리 없이 모의 결과로 전이합니다.
파일 식별자: live 키에서는 S3 object key이고 테스트 키에서는 격리된 logical key입니다.
파일 형식
"JPG"
파일 타입 (이미지 또는 PDF)
IMG, DOCUMENT 파일 역할 (항상 "watermarked")
watermarked 파일 순서 (항상 1)
1
원본 파일 정보 (includeOriginal이 true일 때만 포함)
Hide child attributes
Hide child attributes
파일 ID
파일 이름
업로드 URL. live 키는 S3 presigned URL을 받고, 테스트 키는 절대 https://api.bizmori.com/api/v2/test-uploads/{signedToken} URL을 받습니다. 두 URL은 1시간 후 만료되며 POST /api/v2/orders/{orderId}/refresh-urls로 재발급할 수 있습니다. signed token 자체가 테스트 업로드를 인가하므로 PUT에 Authorization 헤더가 필요 없습니다. 테스트 요청 본문은 스트림으로 소비되어 저장되지 않으며, 테스트 주문은 사용량 차감이나 실제 외부 처리 없이 모의 결과로 전이합니다.
파일 식별자: live 키에서는 S3 object key이고 테스트 키에서는 격리된 logical key입니다.
파일 형식
파일 타입 (이미지만 해당)
IMG 파일 역할 (항상 "original")
original 파일 순서 (항상 1)
1