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

# Get order details

> Get the details of an order you own in **one shape for every order type and watermark engine**: Anti-AI, AI Detection, watermark embed, and watermark extract orders, whether you created them with v2 or v3. You can call this endpoint whatever the order status.

**Common top-level fields**: `type`, `orderId`, `orderName`, `channel`, `status`, `createdAt`, `updatedAt`, `expiresAt`, `retentionDays`, `thumbnailImageUrl`, `processingDelayed`, `errors`, `inputFiles`, and `result`. Every order returns the same set of keys; only `result` differs by order type.
- `type` is `antiAi`, `aiDetection`, `watermarkEmbed`, or `watermarkExtract`. Watermark orders created with v3 use the same values, without an engine suffix
- `status` is one of `pending`, `inProgress`, `complete`, `failed`, and `expired`. v2 watermark extract orders stored as `detected` or `undetected` return `complete`, with the outcome in `result.detectionStatus`
- `processingDelayed` is calculated only for watermark orders created with v3. It is always `false` for other orders
- `errors` is `{ errorCode, errorMessage }` for a failed order, otherwise `null`

**`inputFiles[]`**: `{ fileId, fileName }` for each input file, in request order. Use `inputFiles.length` for the file count.
- `role` (`original` or `query`) appears only on `watermarkExtract` orders. The `watermarked` role of v2 orders is returned as `query`
- `uploadUrl` (presigned `PUT` URL) appears only while `status` is `pending` and the file is waiting for upload. Otherwise the key is omitted, not set to `null`

**`result`**: the key is always present. It is an object only when `status` is `complete`, and `null` for `pending`, `inProgress`, `failed`, and `expired`.
- `antiAi`: `{ outputFiles: [{ fileId, fileName, inputFileId }] }`
- `watermarkEmbed`: `{ outputFiles: [{ fileId, fileName, inputFileId, watermarkText }] }`. A v3 order that embeds several watermark texts in one input file returns one output file per text
- `watermarkExtract`: `{ detectionStatus, watermarkText, reportSupported, reports }`. `detectionStatus` is `detected`, `undetected`, `inconclusive`, `unsupported`, or `error`. `watermarkText` is `null` unless `detectionStatus` is `detected`. v2 orders return `reportSupported: false` and `reports: []`
- `aiDetection`: `{ verdict, probability, options, originalImageUrl, heatmapUrl, overlayUrl }`. `verdict` is `likely_real`, `uncertain_real`, `uncertain_ai`, or `likely_ai`, and is `null` when `probability` is `null`. `options` is `null` when no options were stored

**`fileId`**: every `fileId` and `inputFileId` is a numeric string with no separator such as `-`. `result.outputFiles[].fileId` is unique within the order and matches `files[].fileId` from [`GET /api/v3/orders/{orderId}/download`](/api-reference/orders/download-order-v3) in value and order.

**Expired orders**: you can still get an `expired` order, but `result` is `null` and no URLs are issued.

**Changes from the previous v3 response (breaking change, 2026-10-08)**
- For watermark orders created with v3, `files[]`, `outputs[]`, and the top-level `reports[]` moved to `inputFiles[]`, `result.outputFiles[]`, and `result.reports[]`. Output `fileId` values changed from `{inputFileId}-{n}` to numeric strings
- The `detectionStatus` value `not_detected` is now `undetected`
- For other orders, which used the v2 detail format, the top-level `fileCount`, `statusCode`, `watermarks`, `watermarkText`, `probability`, `options`, `originalImageUrl`, `heatmapUrl`, and `overlayUrl` fields moved to `inputFiles` and `result`. The AI Detection `statusCode` is now `result.verdict`
- The response of the deprecated [`GET /api/v2/orders/{orderId}`](/api-reference/orders/get-order) is unchanged

**Test keys (`sk_test_`)**: returns only test orders created with the same key. Live orders and other accounts' orders return `404 ORDER_NOT_FOUND`, as do test orders requested with a live key. Every test order, created with v2 or v3, uses this shape. An `inProgress` test order becomes `complete` or `failed` when you get it more than five seconds after the uploads finish. The `uploadUrl` of a pending test order is `https://api.bizmori.com/api/v2/test-uploads/{signedToken}`. `result.reports` of a test extract order is always empty, and `reportSupported` is `true` only for a v3 test extract order whose `detectionStatus` is `detected`. `expiresAt` is seven days after the order was created.


Use this endpoint to check an order's status and read its result. It works for every order type (Anti-AI, AI Detection, watermark embed, and watermark extract), whether you created the order with v2 or v3. Every order returns the same top-level fields; only `result` changes with `type`.

> [!WARNING]
>
> The response shape changed on October 8, 2026. If your code reads `files`, `outputs`, the top-level `reports`, `fileCount`, or `statusCode` from this endpoint, see [Changes from the previous response](#changes-from-the-previous-response).

## Common fields

| Field | Type | Description |
| - | - | - |
| `type` | string | `antiAi`, `aiDetection`, `watermarkEmbed`, or `watermarkExtract` |
| `orderId` | string | Order ID |
| `orderName` | string \| null | Order name |
| `channel` | string | `api` or `web` |
| `status` | string | One of the five values in [Status](#status) |
| `createdAt`, `updatedAt` | string | ISO 8601 timestamps |
| `expiresAt` | string \| null | When the order files are deleted |
| `retentionDays` | integer \| null | File retention period in days (7 or 30) |
| `thumbnailImageUrl` | string \| null | Thumbnail image URL |
| `processingDelayed` | boolean | `true` when a watermark order created with v3 is waiting for manual recovery. Always `false` for other orders |
| `errors` | object \| null | `{ errorCode, errorMessage }` for a failed order, otherwise `null` |
| `inputFiles` | array | Input files. See [Input files](#input-files) |
| `result` | object \| null | Result for the order type. See [Result by order type](#result-by-order-type) |

## Status

| `status` | Meaning | `result` |
| - | - | - |
| `pending` | Waiting for file uploads. `inputFiles[].uploadUrl` is present | `null` |
| `inProgress` | Processing | `null` |
| `complete` | Finished | Object |
| `failed` | Processing failed. Read the reason from `errors` | `null` |
| `expired` | The retention period ended and the files were deleted. No URLs are issued | `null` |

Watermark extract orders created with v2 that are stored as `detected` or `undetected` return `complete`. Read the outcome from `result.detectionStatus`.

## Input files

Each `inputFiles[]` item has `fileId` and `fileName`, in the order of your create request. Two more keys appear only when they apply. When they do not apply, the key is omitted rather than set to `null`.

* `role` appears only on `watermarkExtract` orders. `original` is the file the watermark was embedded in, and `query` is the file to check.
* `uploadUrl` appears only while `status` is `pending` and the file is still waiting for upload. PUT the file to this URL. If an upload URL expires, call this endpoint again for a fresh one.

Every `fileId` in this response and in the [download response](https://docs.contentcare.ai/api-reference/orders/download-order-v3.md) is a numeric string such as `"11"`. It never contains a separator such as `-`.

## Result by order type

`result` is an object only when `status` is `complete`. The key is always present and is `null` in every other status.

**Anti-AI**

`result.outputFiles[]` has one output file for each input file.

| Field | Type | Description |
| - | - | - |
| `fileId` | string | Output file ID. Matches `files[].fileId` in the [download response](https://docs.contentcare.ai/api-reference/orders/download-order-v3.md), in the same order |
| `fileName` | string \| null | Output file name |
| `inputFileId` | string | `inputFiles[].fileId` of the source file |

**Watermark embed**

`result.outputFiles[]` has one output file for each embedded watermark text. If a v3 order embeds several texts in one input file, those output files share the same `inputFileId`.

| Field | Type | Description |
| - | - | - |
| `fileId` | string | Output file ID. Matches `files[].fileId` in the [download response](https://docs.contentcare.ai/api-reference/orders/download-order-v3.md), in the same order |
| `fileName` | string \| null | Output file name |
| `inputFileId` | string | `inputFiles[].fileId` of the source file |
| `watermarkText` | string | The text embedded in this output file |

**Watermark extract**

| Field | Type | Description |
| - | - | - |
| `detectionStatus` | string | Outcome. See the table below |
| `watermarkText` | string \| null | Embedded text of the detected watermark. `null` unless `detectionStatus` is `detected`. For v3 orders, it is returned only when your account embedded the watermark and exactly one issuance record matches |
| `reportSupported` | boolean | Whether you can [create a report](https://docs.contentcare.ai/api-reference/reports/create-report.md) from this result. `false` for v2 orders and for images captured from a PDF |
| `reports` | array | `{ locale, status }` for each report requested for this order. Always empty for v2 orders |

| `detectionStatus` | Meaning |
| - | - |
| `detected` | A watermark was found |
| `undetected` | The file was fully checked and no watermark was found |
| `inconclusive` | A candidate was found, but it did not meet the confidence threshold |
| `unsupported` | The input cannot be processed. The credit is refunded |
| `error` | Detection failed. This is not the same as no watermark |

**AI Detection**

| Field | Type | Description |
| - | - | - |
| `verdict` | string \| null | Verdict based on `probability`. See the table below. `null` when `probability` is `null` |
| `probability` | number \| null | Probability that the image is AI-generated, from 0 to 1 |
| `options` | object \| null | `generateHeatmap`, `generateOverlay`, and `generateThumbnail` as set when the order was created |
| `originalImageUrl` | string \| null | Original image URL, valid for 1 hour |
| `heatmapUrl` | string \| null | Heatmap image URL, valid for 1 hour. `null` unless the order used `generateHeatmap` |
| `overlayUrl` | string \| null | Heatmap overlay URL, valid for 1 hour. `null` unless the order used `generateOverlay` |

| `verdict` | Probability range | Meaning |
| - | - | - |
| `likely_real` | \< 0.25 | Likely not AI-generated |
| `uncertain_real` | 0.25 – 0.5 | Possibly not AI-generated |
| `uncertain_ai` | 0.5 – 0.75 | Possibly AI-generated |
| `likely_ai` | ≥ 0.75 | Likely AI-generated |

## Examples

Completed orders of each type:

```json Anti-AI theme={null}
{
  "data": {
    "type": "antiAi",
    "orderId": "1001",
    "orderName": "cat.png",
    "channel": "api",
    "status": "complete",
    "createdAt": "2026-10-08T01:00:00.000Z",
    "updatedAt": "2026-10-08T01:00:40.000Z",
    "expiresAt": "2026-11-07T01:00:00.000Z",
    "retentionDays": 30,
    "thumbnailImageUrl": "https://cdn.bizmori.com/thumb/ex.webp",
    "processingDelayed": false,
    "errors": null,
    "inputFiles": [
      { "fileId": "11", "fileName": "cat.png" },
      { "fileId": "12", "fileName": "dog.png" }
    ],
    "result": {
      "outputFiles": [
        { "fileId": "21", "fileName": "cat.png", "inputFileId": "11" },
        { "fileId": "22", "fileName": "dog.png", "inputFileId": "12" }
      ]
    }
  }
}
```

```json AI Detection theme={null}
{
  "data": {
    "type": "aiDetection",
    "orderId": "4001",
    "orderName": "photo.jpg",
    "channel": "api",
    "status": "complete",
    "createdAt": "2026-10-08T01:00:00.000Z",
    "updatedAt": "2026-10-08T01:00:40.000Z",
    "expiresAt": "2026-11-07T01:00:00.000Z",
    "retentionDays": 30,
    "thumbnailImageUrl": "https://cdn.bizmori.com/ai/photo.jpg",
    "processingDelayed": false,
    "errors": null,
    "inputFiles": [
      { "fileId": "71", "fileName": "photo.jpg" }
    ],
    "result": {
      "verdict": "uncertain_real",
      "probability": 0.31,
      "options": {
        "generateHeatmap": true,
        "generateOverlay": true,
        "generateThumbnail": true
      },
      "originalImageUrl": "https://cdn.bizmori.com/ai/photo.jpg",
      "heatmapUrl": "https://cdn.bizmori.com/ai/heatmap.png",
      "overlayUrl": "https://cdn.bizmori.com/ai/overlay.png"
    }
  }
}
```

```json Watermark embed theme={null}
{
  "data": {
    "type": "watermarkEmbed",
    "orderId": "2001",
    "orderName": "logo.png",
    "channel": "api",
    "status": "complete",
    "createdAt": "2026-10-08T01:00:00.000Z",
    "updatedAt": "2026-10-08T01:00:40.000Z",
    "expiresAt": "2026-11-07T01:00:00.000Z",
    "retentionDays": 30,
    "thumbnailImageUrl": "https://cdn.bizmori.com/thumb/ex.webp",
    "processingDelayed": false,
    "errors": null,
    "inputFiles": [
      { "fileId": "31", "fileName": "logo.png" }
    ],
    "result": {
      "outputFiles": [
        { "fileId": "201", "fileName": "logo.png", "inputFileId": "31", "watermarkText": "MORI" },
        { "fileId": "202", "fileName": "logo.png", "inputFileId": "31", "watermarkText": "MORI-2" }
      ]
    }
  }
}
```

```json Watermark extract theme={null}
{
  "data": {
    "type": "watermarkExtract",
    "orderId": "3001",
    "orderName": "suspect.png",
    "channel": "api",
    "status": "complete",
    "createdAt": "2026-10-08T01:00:00.000Z",
    "updatedAt": "2026-10-08T01:00:40.000Z",
    "expiresAt": "2026-11-07T01:00:00.000Z",
    "retentionDays": 30,
    "thumbnailImageUrl": "https://cdn.bizmori.com/thumb/ex.webp",
    "processingDelayed": false,
    "errors": null,
    "inputFiles": [
      { "fileId": "51", "fileName": "original.png", "role": "original" },
      { "fileId": "52", "fileName": "suspect.png", "role": "query" }
    ],
    "result": {
      "detectionStatus": "detected",
      "watermarkText": "MORI",
      "reportSupported": true,
      "reports": [
        { "locale": "ko-KR", "status": "completed" }
      ]
    }
  }
}
```

Orders that are not complete return `result: null`:

```json Pending theme={null}
{
  "data": {
    "type": "watermarkExtract",
    "orderId": "3201",
    "orderName": "suspect.png",
    "channel": "api",
    "status": "pending",
    "createdAt": "2026-10-08T01:00:00.000Z",
    "updatedAt": "2026-10-08T01:00:40.000Z",
    "expiresAt": "2026-11-07T01:00:00.000Z",
    "retentionDays": 30,
    "thumbnailImageUrl": null,
    "processingDelayed": false,
    "errors": null,
    "inputFiles": [
      {
        "fileId": "81",
        "fileName": "original.png",
        "role": "original",
        "uploadUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/inputs/81?X-Amz-..."
      },
      {
        "fileId": "82",
        "fileName": "suspect.png",
        "role": "query",
        "uploadUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/inputs/82?X-Amz-..."
      }
    ],
    "result": null
  }
}
```

```json Failed theme={null}
{
  "data": {
    "type": "watermarkEmbed",
    "orderId": "2002",
    "orderName": "logo.png",
    "channel": "api",
    "status": "failed",
    "createdAt": "2026-10-08T01:00:00.000Z",
    "updatedAt": "2026-10-08T01:00:40.000Z",
    "expiresAt": "2026-11-07T01:00:00.000Z",
    "retentionDays": 30,
    "thumbnailImageUrl": "https://cdn.bizmori.com/thumb/ex.webp",
    "processingDelayed": false,
    "errors": {
      "errorCode": "WATERMARK_FILE_CORRUPTED",
      "errorMessage": "파일이 손상되어 처리할 수 없습니다."
    },
    "inputFiles": [
      { "fileId": "33", "fileName": "logo.png" }
    ],
    "result": null
  }
}
```

```json Expired theme={null}
{
  "data": {
    "type": "antiAi",
    "orderId": "1003",
    "orderName": "cat.png",
    "channel": "api",
    "status": "expired",
    "createdAt": "2026-10-08T01:00:00.000Z",
    "updatedAt": "2026-10-08T01:00:40.000Z",
    "expiresAt": "2026-10-01T00:00:00.000Z",
    "retentionDays": 30,
    "thumbnailImageUrl": "https://cdn.bizmori.com/thumb/ex.webp",
    "processingDelayed": false,
    "errors": null,
    "inputFiles": [
      { "fileId": "14", "fileName": "cat.png" }
    ],
    "result": null
  }
}
```

* **Pending**: only files that are still waiting for upload have `uploadUrl`. Watermark embed, Anti-AI, and AI Detection orders have no `role`.
* **Failed**: `errors` has the reason, and `result` is `null`. `errorMessage` is a fixed Korean message for the error code.
* **Expired**: you can still get the order after the retention period ends, but `result` is `null` and no URLs are issued. [Downloads](https://docs.contentcare.ai/api-reference/orders/download-order-v3.md) return `400 ORDER_EXPIRED`.

## Changes from the previous response

On October 8, 2026, this endpoint switched to the shape above. This is a breaking change.

| Previous response | Now |
| - | - |
| `files[]` (v3 watermark orders) | `inputFiles[]`. `uploadUrl` is omitted unless the order is `pending` |
| `outputs[]` (v3 watermark orders) | `result.outputFiles[]`. `outputIndex`, `status`, and `mediaKind` are no longer returned |
| Output `fileId` such as `"601-1"` | Numeric string such as `"201"` |
| Top-level `reports[]` | `result.reports[]` |
| `detectionStatus: "not_detected"` | `"undetected"` |
| `fileCount` | `inputFiles.length` |
| `statusCode` (AI Detection) | `result.verdict` |
| `statusCode` and `status: "detected"` / `"undetected"` (v2 watermark extract) | `status: "complete"` and `result.detectionStatus` |
| `watermarks[]` (v2 watermark embed) | `result.outputFiles[].watermarkText` |
| Top-level `watermarkText`, `probability`, `options`, `originalImageUrl`, `heatmapUrl`, `overlayUrl` | Inside `result` |

The deprecated [`GET /api/v2/orders/{orderId}`](https://docs.contentcare.ai/api-reference/orders/get-order) still returns its previous response, unchanged.

## Test keys

With an `sk_test_` key, this endpoint returns only test orders created with the same key, in the shape above. See [Test API keys](https://docs.contentcare.ai/test-api-keys.md) for how test orders move through each status.


## OpenAPI

````yaml api-reference/openapi.yaml GET /api/v3/orders/{orderId}
openapi: 3.0.0
info:
  title: BIZ MORI API
  version: 2.0.0
  description: >
    BIZ MORI API provides four core services for digital content protection:

    - **Anti-AI**: Protect images from AI training

    - **Watermark Embed**: Embed invisible digital watermarks into images

    - **Watermark Extract**: Extract and verify watermarks from images

    - **AI Detection**: Detect whether an image is AI-generated

    - **Test API keys**: Keys with the `sk_test_` prefix use the same Bearer
    authentication and support order-lifecycle testing with mock responses
    without running processing services or consuming credits; test uploads
    discard file contents and do not create result files
  contact:
    name: BIZ MORI Support
    email: support@contentcare.ai
  license:
    name: Proprietary
    url: https://docs.contentcare.ai/legal/terms
servers:
  - url: https://api.bizmori.com
    description: Production
security: []
tags:
  - name: Anti-AI
    description: Anti-AI image protection orders
  - name: Watermark Embed
    description: Watermark embedding orders
  - name: Watermark Extract
    description: Watermark extraction orders
  - name: AI Detection
    description: AI-generated image detection orders
  - name: Orders
    description: Order query and management
  - name: Webhooks
    description: Webhook configuration and events
  - name: Reports
    description: PDF analysis reports for watermark extract and AI Detection orders
paths:
  /api/v3/orders/{orderId}:
    get:
      tags:
        - Orders
      summary: Get order details
      description: >
        Get the details of an order you own in **one shape for every order type
        and watermark engine**: Anti-AI, AI Detection, watermark embed, and
        watermark extract orders, whether you created them with v2 or v3. You
        can call this endpoint whatever the order status.


        **Common top-level fields**: `type`, `orderId`, `orderName`, `channel`,
        `status`, `createdAt`, `updatedAt`, `expiresAt`, `retentionDays`,
        `thumbnailImageUrl`, `processingDelayed`, `errors`, `inputFiles`, and
        `result`. Every order returns the same set of keys; only `result`
        differs by order type.

        - `type` is `antiAi`, `aiDetection`, `watermarkEmbed`, or
        `watermarkExtract`. Watermark orders created with v3 use the same
        values, without an engine suffix

        - `status` is one of `pending`, `inProgress`, `complete`, `failed`, and
        `expired`. v2 watermark extract orders stored as `detected` or
        `undetected` return `complete`, with the outcome in
        `result.detectionStatus`

        - `processingDelayed` is calculated only for watermark orders created
        with v3. It is always `false` for other orders

        - `errors` is `{ errorCode, errorMessage }` for a failed order,
        otherwise `null`


        **`inputFiles[]`**: `{ fileId, fileName }` for each input file, in
        request order. Use `inputFiles.length` for the file count.

        - `role` (`original` or `query`) appears only on `watermarkExtract`
        orders. The `watermarked` role of v2 orders is returned as `query`

        - `uploadUrl` (presigned `PUT` URL) appears only while `status` is
        `pending` and the file is waiting for upload. Otherwise the key is
        omitted, not set to `null`


        **`result`**: the key is always present. It is an object only when
        `status` is `complete`, and `null` for `pending`, `inProgress`,
        `failed`, and `expired`.

        - `antiAi`: `{ outputFiles: [{ fileId, fileName, inputFileId }] }`

        - `watermarkEmbed`: `{ outputFiles: [{ fileId, fileName, inputFileId,
        watermarkText }] }`. A v3 order that embeds several watermark texts in
        one input file returns one output file per text

        - `watermarkExtract`: `{ detectionStatus, watermarkText,
        reportSupported, reports }`. `detectionStatus` is `detected`,
        `undetected`, `inconclusive`, `unsupported`, or `error`. `watermarkText`
        is `null` unless `detectionStatus` is `detected`. v2 orders return
        `reportSupported: false` and `reports: []`

        - `aiDetection`: `{ verdict, probability, options, originalImageUrl,
        heatmapUrl, overlayUrl }`. `verdict` is `likely_real`, `uncertain_real`,
        `uncertain_ai`, or `likely_ai`, and is `null` when `probability` is
        `null`. `options` is `null` when no options were stored


        **`fileId`**: every `fileId` and `inputFileId` is a numeric string with
        no separator such as `-`. `result.outputFiles[].fileId` is unique within
        the order and matches `files[].fileId` from [`GET
        /api/v3/orders/{orderId}/download`](/api-reference/orders/download-order-v3)
        in value and order.


        **Expired orders**: you can still get an `expired` order, but `result`
        is `null` and no URLs are issued.


        **Changes from the previous v3 response (breaking change, 2026-10-08)**

        - For watermark orders created with v3, `files[]`, `outputs[]`, and the
        top-level `reports[]` moved to `inputFiles[]`, `result.outputFiles[]`,
        and `result.reports[]`. Output `fileId` values changed from
        `{inputFileId}-{n}` to numeric strings

        - The `detectionStatus` value `not_detected` is now `undetected`

        - For other orders, which used the v2 detail format, the top-level
        `fileCount`, `statusCode`, `watermarks`, `watermarkText`, `probability`,
        `options`, `originalImageUrl`, `heatmapUrl`, and `overlayUrl` fields
        moved to `inputFiles` and `result`. The AI Detection `statusCode` is now
        `result.verdict`

        - The response of the deprecated [`GET
        /api/v2/orders/{orderId}`](/api-reference/orders/get-order) is unchanged


        **Test keys (`sk_test_`)**: returns only test orders created with the
        same key. Live orders and other accounts' orders return `404
        ORDER_NOT_FOUND`, as do test orders requested with a live key. Every
        test order, created with v2 or v3, uses this shape. An `inProgress` test
        order becomes `complete` or `failed` when you get it more than five
        seconds after the uploads finish. The `uploadUrl` of a pending test
        order is `https://api.bizmori.com/api/v2/test-uploads/{signedToken}`.
        `result.reports` of a test extract order is always empty, and
        `reportSupported` is `true` only for a v3 test extract order whose
        `detectionStatus` is `detected`. `expiresAt` is seven days after the
        order was created.
      operationId: getOrderV3
      parameters:
        - in: path
          name: orderId
          required: true
          schema:
            type: string
            pattern: ^[0-9]{1,20}$
          description: Order ID
      responses:
        '200':
          description: >-
            Order details. The top-level fields are the same for every order
            type; only `result` depends on `type`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicOrderV3DetailResponse'
              examples:
                antiAiComplete:
                  summary: Anti-AI · complete (2 input files)
                  value:
                    data:
                      type: antiAi
                      orderId: '1001'
                      orderName: cat.png
                      channel: api
                      status: complete
                      createdAt: '2026-10-08T01:00:00.000Z'
                      updatedAt: '2026-10-08T01:00:40.000Z'
                      expiresAt: '2026-11-07T01:00:00.000Z'
                      retentionDays: 30
                      thumbnailImageUrl: https://cdn.bizmori.com/thumb/ex.webp
                      processingDelayed: false
                      errors: null
                      inputFiles:
                        - fileId: '11'
                          fileName: cat.png
                        - fileId: '12'
                          fileName: dog.png
                      result:
                        outputFiles:
                          - fileId: '21'
                            fileName: cat.png
                            inputFileId: '11'
                          - fileId: '22'
                            fileName: dog.png
                            inputFileId: '12'
                watermarkEmbedV3:
                  summary: >-
                    Watermark embed (v3) · complete (2 watermark texts in 1
                    input file, 2 outputs)
                  value:
                    data:
                      type: watermarkEmbed
                      orderId: '2001'
                      orderName: logo.png
                      channel: api
                      status: complete
                      createdAt: '2026-10-08T01:00:00.000Z'
                      updatedAt: '2026-10-08T01:00:40.000Z'
                      expiresAt: '2026-11-07T01:00:00.000Z'
                      retentionDays: 30
                      thumbnailImageUrl: https://cdn.bizmori.com/thumb/ex.webp
                      processingDelayed: false
                      errors: null
                      inputFiles:
                        - fileId: '31'
                          fileName: logo.png
                      result:
                        outputFiles:
                          - fileId: '201'
                            fileName: logo.png
                            inputFileId: '31'
                            watermarkText: MORI
                          - fileId: '202'
                            fileName: logo.png
                            inputFileId: '31'
                            watermarkText: MORI-2
                watermarkEmbedV2:
                  summary: Watermark embed (v2) · complete (2 input files)
                  value:
                    data:
                      type: watermarkEmbed
                      orderId: '2101'
                      orderName: a.png
                      channel: api
                      status: complete
                      createdAt: '2026-10-08T01:00:00.000Z'
                      updatedAt: '2026-10-08T01:00:40.000Z'
                      expiresAt: '2026-11-07T01:00:00.000Z'
                      retentionDays: 30
                      thumbnailImageUrl: https://cdn.bizmori.com/thumb/ex.webp
                      processingDelayed: false
                      errors: null
                      inputFiles:
                        - fileId: '31'
                          fileName: a.png
                        - fileId: '32'
                          fileName: b.png
                      result:
                        outputFiles:
                          - fileId: '41'
                            fileName: a.png
                            inputFileId: '31'
                            watermarkText: MORI-A
                          - fileId: '42'
                            fileName: b.png
                            inputFileId: '32'
                            watermarkText: MORI-B
                watermarkExtractV3Detected:
                  summary: Watermark extract (v3) · complete (detected)
                  value:
                    data:
                      type: watermarkExtract
                      orderId: '3001'
                      orderName: suspect.png
                      channel: api
                      status: complete
                      createdAt: '2026-10-08T01:00:00.000Z'
                      updatedAt: '2026-10-08T01:00:40.000Z'
                      expiresAt: '2026-11-07T01:00:00.000Z'
                      retentionDays: 30
                      thumbnailImageUrl: https://cdn.bizmori.com/thumb/ex.webp
                      processingDelayed: false
                      errors: null
                      inputFiles:
                        - fileId: '51'
                          fileName: original.png
                          role: original
                        - fileId: '52'
                          fileName: suspect.png
                          role: query
                      result:
                        detectionStatus: detected
                        watermarkText: MORI
                        reportSupported: true
                        reports:
                          - locale: ko-KR
                            status: completed
                watermarkExtractV2Undetected:
                  summary: >-
                    Watermark extract (v2) · complete (undetected; stored status
                    `undetected` is returned as `complete`)
                  value:
                    data:
                      type: watermarkExtract
                      orderId: '3101'
                      orderName: suspect.png
                      channel: api
                      status: complete
                      createdAt: '2026-10-08T01:00:00.000Z'
                      updatedAt: '2026-10-08T01:00:40.000Z'
                      expiresAt: '2026-11-07T01:00:00.000Z'
                      retentionDays: 30
                      thumbnailImageUrl: https://cdn.bizmori.com/thumb/ex.webp
                      processingDelayed: false
                      errors: null
                      inputFiles:
                        - fileId: '61'
                          fileName: original.png
                          role: original
                        - fileId: '62'
                          fileName: suspect.png
                          role: query
                      result:
                        detectionStatus: undetected
                        watermarkText: null
                        reportSupported: false
                        reports: []
                aiDetectionComplete:
                  summary: AI Detection · complete
                  value:
                    data:
                      type: aiDetection
                      orderId: '4001'
                      orderName: photo.jpg
                      channel: api
                      status: complete
                      createdAt: '2026-10-08T01:00:00.000Z'
                      updatedAt: '2026-10-08T01:00:40.000Z'
                      expiresAt: '2026-11-07T01:00:00.000Z'
                      retentionDays: 30
                      thumbnailImageUrl: https://cdn.bizmori.com/ai/photo.jpg
                      processingDelayed: false
                      errors: null
                      inputFiles:
                        - fileId: '71'
                          fileName: photo.jpg
                      result:
                        verdict: uncertain_real
                        probability: 0.31
                        options:
                          generateHeatmap: true
                          generateOverlay: true
                          generateThumbnail: true
                        originalImageUrl: https://cdn.bizmori.com/ai/photo.jpg
                        heatmapUrl: https://cdn.bizmori.com/ai/heatmap.png
                        overlayUrl: https://cdn.bizmori.com/ai/overlay.png
                watermarkExtractPending:
                  summary: >-
                    Watermark extract (v3) · pending (`uploadUrl` only on files
                    waiting for upload)
                  value:
                    data:
                      type: watermarkExtract
                      orderId: '3201'
                      orderName: suspect.png
                      channel: api
                      status: pending
                      createdAt: '2026-10-08T01:00:00.000Z'
                      updatedAt: '2026-10-08T01:00:40.000Z'
                      expiresAt: '2026-11-07T01:00:00.000Z'
                      retentionDays: 30
                      thumbnailImageUrl: null
                      processingDelayed: false
                      errors: null
                      inputFiles:
                        - fileId: '81'
                          fileName: original.png
                          role: original
                          uploadUrl: >-
                            https://bucket.s3.ap-northeast-2.amazonaws.com/inputs/81?X-Amz-...
                        - fileId: '82'
                          fileName: suspect.png
                          role: query
                          uploadUrl: >-
                            https://bucket.s3.ap-northeast-2.amazonaws.com/inputs/82?X-Amz-...
                      result: null
                watermarkEmbedPending:
                  summary: Watermark embed · pending (no `role`, `uploadUrl` only)
                  value:
                    data:
                      type: watermarkEmbed
                      orderId: '2003'
                      orderName: logo.png
                      channel: api
                      status: pending
                      createdAt: '2026-10-08T01:00:00.000Z'
                      updatedAt: '2026-10-08T01:00:40.000Z'
                      expiresAt: '2026-11-07T01:00:00.000Z'
                      retentionDays: 30
                      thumbnailImageUrl: null
                      processingDelayed: false
                      errors: null
                      inputFiles:
                        - fileId: '34'
                          fileName: logo.png
                          uploadUrl: >-
                            https://bucket.s3.ap-northeast-2.amazonaws.com/inputs/34?X-Amz-...
                        - fileId: '35'
                          fileName: banner.png
                          uploadUrl: >-
                            https://bucket.s3.ap-northeast-2.amazonaws.com/inputs/35?X-Amz-...
                      result: null
                antiAiInProgress:
                  summary: Anti-AI · inProgress
                  value:
                    data:
                      type: antiAi
                      orderId: '1002'
                      orderName: cat.png
                      channel: api
                      status: inProgress
                      createdAt: '2026-10-08T01:00:00.000Z'
                      updatedAt: '2026-10-08T01:00:40.000Z'
                      expiresAt: '2026-11-07T01:00:00.000Z'
                      retentionDays: 30
                      thumbnailImageUrl: https://cdn.bizmori.com/thumb/ex.webp
                      processingDelayed: false
                      errors: null
                      inputFiles:
                        - fileId: '13'
                          fileName: cat.png
                      result: null
                watermarkEmbedFailed:
                  summary: >-
                    Watermark embed (v3) · failed (`errors` has the reason,
                    `result` is `null`)
                  value:
                    data:
                      type: watermarkEmbed
                      orderId: '2002'
                      orderName: logo.png
                      channel: api
                      status: failed
                      createdAt: '2026-10-08T01:00:00.000Z'
                      updatedAt: '2026-10-08T01:00:40.000Z'
                      expiresAt: '2026-11-07T01:00:00.000Z'
                      retentionDays: 30
                      thumbnailImageUrl: https://cdn.bizmori.com/thumb/ex.webp
                      processingDelayed: false
                      errors:
                        errorCode: WATERMARK_FILE_CORRUPTED
                        errorMessage: 파일이 손상되어 처리할 수 없습니다.
                      inputFiles:
                        - fileId: '33'
                          fileName: logo.png
                      result: null
                antiAiExpired:
                  summary: >-
                    Anti-AI · expired (same for every order type; `result` is
                    `null`)
                  value:
                    data:
                      type: antiAi
                      orderId: '1003'
                      orderName: cat.png
                      channel: api
                      status: expired
                      createdAt: '2026-10-08T01:00:00.000Z'
                      updatedAt: '2026-10-08T01:00:40.000Z'
                      expiresAt: '2026-10-01T00:00:00.000Z'
                      retentionDays: 30
                      thumbnailImageUrl: https://cdn.bizmori.com/thumb/ex.webp
                      processingDelayed: false
                      errors: null
                      inputFiles:
                        - fileId: '14'
                          fileName: cat.png
                      result: null
        '400':
          description: Invalid request, such as an invalid `orderId` format
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                code: VALIDATION_FAILED
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: The order does not exist or belongs to another account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                code: ORDER_NOT_FOUND
        '500':
          $ref: '#/components/responses/InternalError'
      security:
        - BearerAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |
            curl -X GET https://api.bizmori.com/api/v3/orders/ORDER_ID \
              -H "Authorization: Bearer YOUR_API_KEY"
        - lang: javascript
          label: JavaScript
          source: >
            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();
        - lang: python
          label: Python
          source: |
            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']
components:
  schemas:
    PublicOrderV3DetailResponse:
      type: object
      required:
        - data
      additionalProperties: false
      properties:
        data:
          $ref: '#/components/schemas/PublicOrderV3Detail'
    ErrorResponse:
      type: object
      properties:
        code:
          type: string
          description: Error code
    PublicOrderV3Detail:
      description: >-
        v3 order detail. The top-level fields are the same for every order type
        (`PublicOrderV3DetailCommon`); only `result`, and `inputFiles[].role` on
        extract orders, differ by `type`
      oneOf:
        - $ref: '#/components/schemas/PublicAntiAiOrderV3Detail'
        - $ref: '#/components/schemas/PublicWatermarkEmbedOrderV3Detail'
        - $ref: '#/components/schemas/PublicWatermarkExtractOrderV3Detail'
        - $ref: '#/components/schemas/PublicAiDetectionOrderV3Detail'
      discriminator:
        propertyName: type
        mapping:
          antiAi: '#/components/schemas/PublicAntiAiOrderV3Detail'
          watermarkEmbed: '#/components/schemas/PublicWatermarkEmbedOrderV3Detail'
          watermarkExtract: '#/components/schemas/PublicWatermarkExtractOrderV3Detail'
          aiDetection: '#/components/schemas/PublicAiDetectionOrderV3Detail'
    PublicAntiAiOrderV3Detail:
      title: Anti-AI
      description: Anti-AI order detail
      allOf:
        - $ref: '#/components/schemas/PublicOrderV3DetailCommon'
        - type: object
          properties:
            type:
              type: string
              enum:
                - antiAi
            inputFiles:
              type: array
              items:
                $ref: '#/components/schemas/PublicInputFile'
            result:
              $ref: '#/components/schemas/PublicAntiAiResult'
    PublicWatermarkEmbedOrderV3Detail:
      title: Watermark embed
      description: Watermark embed order detail (created with v2 or v3)
      allOf:
        - $ref: '#/components/schemas/PublicOrderV3DetailCommon'
        - type: object
          properties:
            type:
              type: string
              enum:
                - watermarkEmbed
            inputFiles:
              type: array
              items:
                $ref: '#/components/schemas/PublicInputFile'
            result:
              $ref: '#/components/schemas/PublicWatermarkEmbedResult'
    PublicWatermarkExtractOrderV3Detail:
      title: Watermark extract
      description: >-
        Watermark extract order detail (created with v2 or v3). Only this order
        type has `inputFiles[].role`
      allOf:
        - $ref: '#/components/schemas/PublicOrderV3DetailCommon'
        - type: object
          properties:
            type:
              type: string
              enum:
                - watermarkExtract
            inputFiles:
              type: array
              items:
                $ref: '#/components/schemas/PublicExtractInputFile'
            result:
              $ref: '#/components/schemas/PublicWatermarkExtractResult'
    PublicAiDetectionOrderV3Detail:
      title: AI Detection
      description: AI Detection order detail
      allOf:
        - $ref: '#/components/schemas/PublicOrderV3DetailCommon'
        - type: object
          properties:
            type:
              type: string
              enum:
                - aiDetection
            inputFiles:
              type: array
              items:
                $ref: '#/components/schemas/PublicInputFile'
            result:
              $ref: '#/components/schemas/PublicAiDetectionResult'
    PublicOrderV3DetailCommon:
      type: object
      description: >-
        Common fields of the v3 order detail. Every order type and watermark
        engine returns the same set of top-level keys; only `result` differs by
        type. The top-level `fileCount`, `statusCode`, `files`, `outputs`,
        `reports`, and `watermarks` fields of earlier responses are not returned
      required:
        - type
        - orderId
        - orderName
        - channel
        - status
        - createdAt
        - updatedAt
        - expiresAt
        - retentionDays
        - thumbnailImageUrl
        - processingDelayed
        - errors
        - inputFiles
        - result
      additionalProperties: false
      properties:
        type:
          type: string
          enum:
            - antiAi
            - watermarkEmbed
            - watermarkExtract
            - aiDetection
          description: >-
            Order type. Watermark orders return `watermarkEmbed` or
            `watermarkExtract` whether they were created with v2 or v3
        orderId:
          type: string
          description: Order ID
          example: '1001'
        orderName:
          type: string
          nullable: true
          description: >-
            Order name. For watermark orders created with v3, the display file
            name, or the stored name if there is none
        channel:
          type: string
          enum:
            - api
            - web
          description: Order channel
        status:
          type: string
          enum:
            - pending
            - inProgress
            - complete
            - failed
            - expired
          description: >-
            * `pending` - Waiting for file uploads

            * `inProgress` - Processing

            * `complete` - Finished. Only then is `result` an object

            * `failed` - Failed. See `errors` for the reason

            * `expired` - The retention period has ended. You can still get the
            order, but `result` and all URLs are `null`


            v2 watermark extract orders stored as `detected` or `undetected`
            return `complete`, with the outcome in `result.detectionStatus`
        createdAt:
          type: string
          format: date-time
          description: Created at
        updatedAt:
          type: string
          format: date-time
          description: Updated at
        expiresAt:
          type: string
          format: date-time
          nullable: true
          description: >-
            When the order files are deleted (UTC, ISO 8601). `null` only in
            data integrity exceptions
        retentionDays:
          type: integer
          nullable: true
          description: >-
            File retention period fixed at order creation, in days (7 or 30).
            `null` only in data integrity exceptions
          example: 30
        thumbnailImageUrl:
          type: string
          format: uri
          nullable: true
          description: >-
            Thumbnail image URL. The source depends on the order type: Anti-AI
            orders and v2 watermark orders return a fixed status image while
            incomplete or failed, AI Detection orders return the detail
            thumbnail or the original image, and v3 watermark orders return the
            detail thumbnail, which can be `null` before processing
        processingDelayed:
          type: boolean
          description: >-
            `true` when a watermark order created with v3 has exhausted
            automatic retries and is waiting for manual recovery. The order
            stays `inProgress`. Always `false` for other orders
        errors:
          type: object
          nullable: true
          description: >-
            Failure details of a failed order; otherwise `null`. Watermark
            orders created with v3 return a public `errorCode` and a fixed
            `errorMessage`. Other orders return the stored error information as
            is, which may omit `errorCode`
          properties:
            errorCode:
              type: string
              description: >-
                Error code, for example `WATERMARK_FILE_CORRUPTED`,
                `ORDER_TIMEOUT`, or `PROCESSING_ERROR`
              example: WATERMARK_FILE_CORRUPTED
            errorMessage:
              type: string
              description: >-
                Fixed guidance message for the error code (Korean). It never
                contains raw processor output
        inputFiles:
          type: array
          description: >-
            Input files in request order. Use `inputFiles.length` for the file
            count. `watermarkExtract` orders use `PublicExtractInputFile` (with
            `role`); other orders use `PublicInputFile`
          items:
            anyOf:
              - $ref: '#/components/schemas/PublicInputFile'
              - $ref: '#/components/schemas/PublicExtractInputFile'
        result:
          type: object
          nullable: true
          description: >-
            Result by order type. The key is always present. An object only when
            `status` is `complete`; otherwise `null`
    PublicInputFile:
      type: object
      description: >-
        Input file of an order other than `watermarkExtract`, in request order.
        There is no `role` key. The `uploadUrl` key appears only while the order
        `status` is `pending` and the file is waiting for upload; otherwise the
        key is omitted, not set to `null`
      required:
        - fileId
        - fileName
      additionalProperties: false
      properties:
        fileId:
          type: string
          pattern: ^[0-9]+$
          description: Input file ID. A numeric string
          example: '11'
        fileName:
          type: string
          nullable: true
          description: Input file name, including the extension. `null` if unknown
          example: cat.png
        uploadUrl:
          type: string
          format: uri
          description: >-
            Presigned `PUT` URL for uploading the file. Present only while the
            order `status` is `pending`, the retention period has not ended, and
            the file is waiting for upload. Omitted for files already uploaded,
            files given by `originalFileUrl`, and orders that are not `pending`
    PublicAntiAiResult:
      type: object
      nullable: true
      description: >-
        Anti-AI order result. An object only when `status` is `complete`;
        otherwise `null`
      required:
        - outputFiles
      additionalProperties: false
      properties:
        outputFiles:
          type: array
          description: Output files. One output file per input file
          items:
            $ref: '#/components/schemas/PublicOutputFile'
    PublicWatermarkEmbedResult:
      type: object
      nullable: true
      description: >-
        Watermark embed order result. An object only when `status` is
        `complete`; otherwise `null`. Replaces `outputs[]` of the previous v3
        response and `watermarks[]` of the v2 detail
      required:
        - outputFiles
      additionalProperties: false
      properties:
        outputFiles:
          type: array
          description: >-
            Output files, ordered by input file and then by output within the
            same input file
          items:
            $ref: '#/components/schemas/PublicWatermarkEmbedOutputFile'
    PublicExtractInputFile:
      type: object
      description: >-
        Input file of a `watermarkExtract` order. Adds `role`, which tells the
        original apart from the file to inspect. `uploadUrl` follows the same
        rules as `PublicInputFile`
      required:
        - fileId
        - fileName
        - role
      additionalProperties: false
      properties:
        fileId:
          type: string
          pattern: ^[0-9]+$
          description: Input file ID. A numeric string
          example: '51'
        fileName:
          type: string
          nullable: true
          description: Input file name, including the extension. `null` if unknown
          example: suspect.png
        role:
          type: string
          enum:
            - original
            - query
          description: >-
            * `original` - The original file the watermark was embedded in

            * `query` - The file to check for a watermark. The `watermarked`
            role of v2 orders is also returned as `query`
        uploadUrl:
          type: string
          format: uri
          description: >-
            Presigned `PUT` URL for uploading the file. Present only while
            `status` is `pending` and the file is waiting for upload
    PublicWatermarkExtractResult:
      type: object
      nullable: true
      description: >-
        Watermark extract order result. An object only when `status` is
        `complete`; otherwise `null`. Internal values such as the watermark ID
        and engine reason codes are not included
      required:
        - detectionStatus
        - watermarkText
        - reportSupported
        - reports
      additionalProperties: false
      properties:
        detectionStatus:
          type: string
          nullable: true
          enum:
            - detected
            - undetected
            - inconclusive
            - unsupported
            - error
            - null
          description: >-
            Outcome. `null` only for a v2 order that has no detection record (a
            data anomaly).

            * `detected` - A watermark was found

            * `undetected` - The file was fully checked and no watermark was
            found. Includes `not_detected` from the v3 engine and v2 orders
            stored as `undetected`

            * `inconclusive` - A candidate was found but did not meet the
            confidence threshold

            * `unsupported` - The input cannot be processed (credit refunded)

            * `error` - Detection failed. This is not the same as no watermark.
            Includes v2 orders whose detection failed
        watermarkText:
          type: string
          nullable: true
          description: >-
            Embedded text of the detected watermark. `null` unless
            `detectionStatus` is `detected`. For v3 orders, returned only when
            your account embedded the watermark and exactly one issuance record
            matches; otherwise `null`
        reportSupported:
          type: boolean
          description: >-
            Whether you can create an analysis report from this result. `false`
            for v2 orders and for images captured from a PDF
        reports:
          type: array
          description: Report status per locale for this order. Always empty for v2 orders
          items:
            type: object
            required:
              - locale
              - status
            additionalProperties: false
            properties:
              locale:
                type: string
                enum:
                  - ko-KR
                  - en-US
                  - ja-JP
              status:
                type: string
                enum:
                  - queued
                  - processing
                  - completed
                  - failed
    PublicAiDetectionResult:
      type: object
      nullable: true
      description: >-
        AI Detection order result. An object only when `status` is `complete`;
        otherwise `null`. `verdict` replaces `statusCode` of earlier responses
      required:
        - verdict
        - probability
        - options
        - originalImageUrl
        - heatmapUrl
        - overlayUrl
      additionalProperties: false
      properties:
        verdict:
          type: string
          nullable: true
          enum:
            - likely_real
            - uncertain_real
            - uncertain_ai
            - likely_ai
            - null
          description: >-
            Verdict based on `probability`. `null` when `probability` is `null`.

            * `likely_real` - Likely not AI-generated, probability < 0.25

            * `uncertain_real` - Possibly not AI-generated, 0.25 <= probability
            < 0.5

            * `uncertain_ai` - Possibly AI-generated, 0.5 <= probability < 0.75

            * `likely_ai` - Likely AI-generated, probability >= 0.75
        probability:
          type: number
          format: float
          nullable: true
          minimum: 0
          maximum: 1
          description: >-
            Probability that the image is AI-generated (0 to 1). `null` if
            unavailable
          example: 0.31
        options:
          type: object
          nullable: true
          description: >-
            Options set when the order was created. `null` if no options were
            stored
          properties:
            generateHeatmap:
              type: boolean
            generateOverlay:
              type: boolean
            generateThumbnail:
              type: boolean
        originalImageUrl:
          type: string
          format: uri
          nullable: true
          description: >-
            Original input image URL (presigned, valid for 1 hour). When all
            resized images are ready, it is a WebP image whose longer side is at
            most 1600 px
        heatmapUrl:
          type: string
          format: uri
          nullable: true
          description: >-
            Heatmap image URL (presigned, valid for 1 hour). Returned only for
            orders created with `generateHeatmap`; otherwise `null`
        overlayUrl:
          type: string
          format: uri
          nullable: true
          description: >-
            URL of the heatmap overlaid on the original image (presigned, valid
            for 1 hour). Returned only for orders created with
            `generateOverlay`; otherwise `null`
    PublicOutputFile:
      type: object
      description: >-
        One output file of an Anti-AI order. `fileId` matches `files[].fileId`
        of the download response in value and order
      required:
        - fileId
        - fileName
        - inputFileId
      additionalProperties: false
      properties:
        fileId:
          type: string
          pattern: ^[0-9]+$
          description: Output file ID. A numeric string, unique within the order
          example: '21'
        fileName:
          type: string
          nullable: true
          description: Output file name, including the extension. `null` if unknown
          example: cat.png
        inputFileId:
          type: string
          pattern: ^[0-9]+$
          description: '`inputFiles[].fileId` of the input file this output was created from'
          example: '11'
    PublicWatermarkEmbedOutputFile:
      type: object
      description: >-
        One output file of a watermark embed order. Adds the embedded text
        `watermarkText` to `PublicOutputFile`. A v3 order that embeds several
        texts in one input file returns several output files with the same
        `inputFileId`
      required:
        - fileId
        - fileName
        - inputFileId
        - watermarkText
      additionalProperties: false
      properties:
        fileId:
          type: string
          pattern: ^[0-9]+$
          description: Output file ID. A numeric string, unique within the order
          example: '201'
        fileName:
          type: string
          nullable: true
          description: Output file name, including the extension. `null` if unknown
          example: logo.png
        inputFileId:
          type: string
          pattern: ^[0-9]+$
          description: '`inputFiles[].fileId` of the input file this output was created from'
          example: '31'
        watermarkText:
          type: string
          description: Watermark text embedded in this output file
          example: MORI
  responses:
    Unauthorized:
      description: Authentication failed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            code: AUTH_NOT_AUTHENTICATED
    InternalError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            code: SERVER_INTERNAL_ERROR
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        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.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.