> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bizmori.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 비가시성 워터마크 검출 빠른 시작

> 이미지에서 비가시성 워터마크를 검출하고 추출하기

이 가이드는 이미지에서 비가시성 워터마크를 검출하는 과정을 안내합니다 — 주문 생성부터 검출 결과 확인까지.

## 사전 준비

* BIZ MORI API 키 ([여기서 발급](https://app.bizmori.com/keys))
* 비가시성 워터마크가 삽입된 이미지 파일 (`jpeg`, `jpg`, `png`, `webp`, `bmp`, 또는 `tiff`) 또는 PDF

## 1단계: 주문 생성

비가시성 워터마크 검출 주문을 생성합니다.

<CodeGroup>
  ```bash cURL theme={null}
  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": "01960d3e-a4f2-7b3c-8a1d-4c7e2f9b0a3d",
      "file": {
        "fileName": "watermarked.jpg"
      }
    }'
  ```

  ```javascript Node.js theme={null}
  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: '01960d3e-a4f2-7b3c-8a1d-4c7e2f9b0a3d',
      file: {
        fileName: 'watermarked.jpg',
      },
    }),
  });
  const { data } = await response.json();
  ```

  ```python Python theme={null}
  import requests

  res = requests.post(
      'https://api.bizmori.com/api/v2/orders/wtr-extract',
      headers={'Authorization': 'Bearer YOUR_API_TOKEN'},
      json={
          'idempotencyKey': '01960d3e-a4f2-7b3c-8a1d-4c7e2f9b0a3d',
          'file': {
              'fileName': 'watermarked.jpg',
          },
      },
  )
  data = res.json()['data']
  ```
</CodeGroup>

**응답:**

```json theme={null}
{
  "data": {
    "orderName": "wtr_extract_2026-03-18",
    "orderId": "123456789",
    "file": {
      "fileId": 1,
      "fileName": "watermarked.jpg",
      "uploadUrl": "https://s3.amazonaws.com/...",
      "fileKey": "123/456/watermarked.jpg"
    }
  }
}
```

<Tip>
  보다 정확한 검출을 위해 원본(비가시성 워터마크 삽입 전) 이미지를 함께 제공할 수 있습니다. 자세한 사용 방법은 [API 레퍼런스](/api-reference/watermark-extract/create-order)를 참고하세요.
</Tip>

## 2단계: 파일 업로드

1단계 응답의 `uploadUrl`로 파일을 PUT 업로드합니다. **Authorization 헤더는 필요 없습니다** — S3 직접 업로드입니다.

```bash cURL theme={null}
curl -X PUT "https://s3.amazonaws.com/..." \
  -H "Content-Type: image/jpeg" \
  --data-binary @watermarked.jpg
```

<Info>
  **별도의 확인(confirm) 단계가 필요 없습니다.** 비가시성 워터마크 삽입과 마찬가지로, 파일 업로드가 완료되면 검출 처리가 자동으로 시작됩니다. 업로드 후 바로 결과를 확인하시면 됩니다.
</Info>

<Note>
  Presigned URL은 **1시간** 후 만료됩니다. 만료된 경우 [URL 갱신](/ko/api-reference/orders/refresh-urls) 엔드포인트를 사용하여 새 URL을 받으세요.
</Note>

## 3단계: 결과 확인

주문 상태를 폴링하거나 [웹훅](/ko/webhooks)을 설정하여 검출 완료 알림을 받습니다.

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.bizmori.com/api/v2/orders/123456789 \
    -H "Authorization: Bearer YOUR_API_TOKEN"
  ```

  ```javascript Node.js theme={null}
  const res = await fetch('https://api.bizmori.com/api/v2/orders/123456789', {
    headers: { 'Authorization': 'Bearer YOUR_API_TOKEN' },
  });
  const { data } = await res.json();
  ```

  ```python Python theme={null}
  res = requests.get(
      'https://api.bizmori.com/api/v2/orders/123456789',
      headers={'Authorization': 'Bearer YOUR_API_TOKEN'},
  )
  data = res.json()['data']
  ```
</CodeGroup>

**응답 (비가시성 워터마크 검출됨):**

```json theme={null}
{
  "data": {
    "type": "watermarkExtract",
    "orderId": "123456789",
    "channel": "api",
    "thumbnailImageUrl": "https://s3.amazonaws.com/...",
    "status": "complete",
    "orderName": "wtr_extract_2026-03-18",
    "fileCount": 1,
    "createdAt": "2026-03-18T12:00:00.000Z",
    "updatedAt": "2026-03-18T12:01:30.000Z",
    "errors": null,
    "statusCode": "detected",
    "watermarkText": "MORI_WATERMARK"
  }
}
```

**응답 (비가시성 워터마크 미검출):**

```json theme={null}
{
  "data": {
    "type": "watermarkExtract",
    "orderId": "123456789",
    "channel": "api",
    "thumbnailImageUrl": "https://s3.amazonaws.com/...",
    "status": "complete",
    "orderName": "wtr_extract_2026-03-18",
    "fileCount": 1,
    "createdAt": "2026-03-18T12:00:00.000Z",
    "updatedAt": "2026-03-18T12:01:30.000Z",
    "errors": null,
    "statusCode": "undetected",
    "watermarkText": null
  }
}
```

| `statusCode` | 의미                                               |
| ------------ | ------------------------------------------------ |
| `detected`   | 비가시성 워터마크 검출됨 — `watermarkText`에서 추출된 텍스트를 확인하세요 |
| `undetected` | 이미지에서 비가시성 워터마크가 검출되지 않음                         |

## 에러 처리

| HTTP 상태 코드 | 의미     | 조치                   |
| ---------- | ------ | -------------------- |
| `400`      | 잘못된 요청 | 파라미터 및 파일 형식 확인      |
| `401`      | 인증 실패  | API 키 확인             |
| `429`      | 사용량 초과 | 요청 빈도를 줄이거나 플랜 업그레이드 |

전체 에러 코드는 [에러 코드](/ko/errors) 페이지를 참고하세요.

## 다음 단계

<CardGroup cols={2}>
  <Card title="Anti-AI" icon="shield" href="/ko/quickstart/anti-ai">
    이미지를 AI 학습 및 생성으로부터 보호합니다.
  </Card>

  <Card title="워터마크 삽입" icon="stamp" href="/ko/quickstart/watermark-embed">
    이미지에 비가시성 워터마크를 삽입합니다.
  </Card>

  <Card title="AI Detection" icon="robot" href="/ko/quickstart/ai-detection">
    AI 생성 이미지를 확률 점수로 탐지합니다.
  </Card>

  <Card title="웹훅" icon="bell" href="/ko/webhooks">
    처리 완료 시 알림을 받기 위해 웹훅을 설정합니다.
  </Card>
</CardGroup>
