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

# Video Watermark Remover

> Remove watermarks and logos from an existing video, including marks that move around the frame such as the Sora logo. Watermark regions are detected on every frame and filled in with matching background. The resolution and the original audio track are kept, and the result is an MP4.

**Pricing** — per second of the **source video** (USD at $0.02/token):

| tokens/s | USD/s |
|---|---|
| 1 | $0.02 |

⚠️ There is no `duration` parameter. The source video is measured server-side and the whole clip is processed; the measured length, rounded up to whole seconds, is what you are charged for. For example, a 10.2-second clip is billed as 11 seconds:
- 11 tokens
- = $0.22

**Limits** — requests outside these are rejected before any tokens are deducted:

| | limit |
|---|---|
| `video_url` | `https://` only, up to 100MB, av1 is not supported |
| Length | 1-60s |
| Resolution | up to 1080p (shorter side at most 1080 pixels) |

**Output:** same resolution as the source, original audio preserved. The frame rate is capped at 30fps: a faster source keeps an even subset of its frames (60fps becomes 30fps, 50fps becomes 25fps), so the duration and the audio stay in sync. Slower sources keep their own frame rate.

**Processing time:** slower than real time — expect roughly 3 minutes for a 10-second 30fps clip. Use `custom_callback_url` rather than tight polling for longer clips.

`detection_prompt` and `max_bbox_percent` work the same way as in the image Watermark Remover: name the mark (for example `Sora logo`) when the default `watermark` misses it, and keep `max_bbox_percent` low so a false positive cannot erase a large part of the frame.

Returns an `img_uuid`; poll GET /api/v1/jobs/detail (or use `custom_callback_url`) to get the result.



## OpenAPI

````yaml api-reference/video-generations/openapi-video-watermark-remover.json POST /api/v1/videos/generations
openapi: 3.1.0
info:
  title: GoEnhance API - Video Watermark Remover
  description: Video Watermark Remover
  version: 1.0.0
servers:
  - url: https://api.goenhance.ai
security: []
paths:
  /api/v1/videos/generations:
    post:
      tags:
        - VideoGenerations
      summary: Video Watermark Remover
      description: >-
        Remove watermarks and logos from an existing video, including marks that
        move around the frame such as the Sora logo. Watermark regions are
        detected on every frame and filled in with matching background. The
        resolution and the original audio track are kept, and the result is an
        MP4.


        **Pricing** — per second of the **source video** (USD at $0.02/token):


        | tokens/s | USD/s |

        |---|---|

        | 1 | $0.02 |


        ⚠️ There is no `duration` parameter. The source video is measured
        server-side and the whole clip is processed; the measured length,
        rounded up to whole seconds, is what you are charged for. For example, a
        10.2-second clip is billed as 11 seconds:

        - 11 tokens

        - = $0.22


        **Limits** — requests outside these are rejected before any tokens are
        deducted:


        | | limit |

        |---|---|

        | `video_url` | `https://` only, up to 100MB, av1 is not supported |

        | Length | 1-60s |

        | Resolution | up to 1080p (shorter side at most 1080 pixels) |


        **Output:** same resolution as the source, original audio preserved. The
        frame rate is capped at 30fps: a faster source keeps an even subset of
        its frames (60fps becomes 30fps, 50fps becomes 25fps), so the duration
        and the audio stay in sync. Slower sources keep their own frame rate.


        **Processing time:** slower than real time — expect roughly 3 minutes
        for a 10-second 30fps clip. Use `custom_callback_url` rather than tight
        polling for longer clips.


        `detection_prompt` and `max_bbox_percent` work the same way as in the
        image Watermark Remover: name the mark (for example `Sora logo`) when
        the default `watermark` misses it, and keep `max_bbox_percent` low so a
        false positive cannot erase a large part of the frame.


        Returns an `img_uuid`; poll GET /api/v1/jobs/detail (or use
        `custom_callback_url`) to get the result.
      parameters:
        - name: Authorization
          in: header
          description: ''
          required: false
          example: '{{Authorization}}'
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                model:
                  type: string
                  enum:
                    - video-watermark-remover
                  description: Model name. Must be `video-watermark-remover`.
                video_url:
                  type: string
                  format: uri
                  description: >-
                    Source video URL. Must be an `https://` link that is
                    publicly reachable. Up to 100MB, 1-60s long, at most 1080p
                    (shorter side 1080 pixels or less); av1 is not supported.
                    The whole clip is processed and its measured duration is the
                    billing basis.
                detection_prompt:
                  type: string
                  maxLength: 200
                  default: watermark
                  description: >-
                    What to detect and remove, in English. Defaults to
                    `watermark`. Naming the mark (for example `Sora logo`)
                    improves detection of small or low-contrast watermarks.
                max_bbox_percent:
                  type: number
                  exclusiveMinimum: 0
                  maximum: 100
                  default: 10
                  description: >-
                    Largest region to remove, as a percentage of the frame area.
                    Detected regions above this size are treated as false
                    positives and left untouched. Defaults to `10`.
                custom_callback_url:
                  type: string
                  format: uri
                  description: >-
                    Optional. A publicly accessible HTTPS URL. When the task
                    status changes (processing / success / failed), GoEnhance
                    sends a POST request to this URL. The request body is
                    identical to the response of GET /api/v1/jobs/detail. If
                    your server does not respond with HTTP 200, the notification
                    is retried up to 3 times, with a 3-second timeout per
                    attempt.
                  example: https://your-server.com/goenhance/callback
              required:
                - model
                - video_url
            example:
              model: video-watermark-remover
              video_url: https://your-cdn.com/clip.mp4
              detection_prompt: Sora logo
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                  msg:
                    type: string
                  data:
                    type: object
                    properties:
                      img_uuid:
                        type: string
                      cost:
                        type: number
                        description: >-
                          Tokens deducted for this request. This is the amount
                          actually charged, so it already reflects any discount
                          active on your account and can be lower than the
                          listed price. Tokens are deducted when the task is
                          accepted, and refunded automatically if the generation
                          ends in failure.
                        example: 11
                    required:
                      - img_uuid
                      - cost
                required:
                  - code
                  - msg
                  - data
              examples:
                '1':
                  summary: Success
                  value:
                    code: 0
                    msg: Success
                    data:
                      img_uuid: c12b656c-747a-44fd-9c80-add79b0c52d5
                      cost: 11
                '2':
                  summary: Video too long
                  value:
                    code: -1
                    msg: Max video duration is 60 seconds, got 75s.
                '3':
                  summary: Resolution above 1080p
                  value:
                    code: -1
                    msg: >-
                      Video resolution 3840x2160 is not supported. Max
                      supported: 1080p.
                '4':
                  summary: Insufficient tokens
                  value:
                    code: 100
                    msg: tokens is not enough
                quota:
                  summary: API key quota exceeded
                  value:
                    code: 101
                    msg: 'API key quota exceeded: 4990 of 5000 tokens used (monthly)'
          headers: {}
        '401':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                  msg:
                    type: string
                required:
                  - code
                  - msg
          headers: {}
      deprecated: false
      security: []

````