apyhub
Back
▣ FILE CONVERSION · FILE MANIPULATION

Generate Watermark For Videos API

Hosted on ApyHub

What it does

The video watermark API burns a text or image overlay into a video. Send the video as an upload or as a video_url, add either watermark_text or a watermark image, and get the result back as a streamed download or a signed link.

Placement is controlled by watermark_position, which takes nine values from top_left through center to bottom_right, defaulting to bottom_right. Text overlays accept watermark_font_size, watermark_font_color, watermark_text_padding and watermark_text_background_color. Image overlays accept watermark_image_size. Both honor watermark_opacity from 0 to 1, which defaults to 0.5. Uploads take .mp4, .mkv, .avi, .mov, .flv, .3gp and .webm.

Product teams use the video watermark API to stamp preview clips and review copies so an unreleased cut is recognizable if it travels. Commerce and media platforms brand user-generated uploads on the way in. Social teams mark exported videos before they go out to each channel.

These endpoints run synchronously and return the finished video in the response, which fits short clips. For long videos and batch work, the Video Watermark Job API does the same job asynchronously: submit, get a job_id, poll for the result.

It pairs with the Video Converter API when the source arrives in a format your player will not take, and with the Generate Thumbnail from Video API to produce a poster frame from the watermarked file. All of them are callable by AI agents through ApyHub MCP.

▣ ENDPOINT 01 / 04
POST
Apply watermark to remote video URL and stream download
https://api.eu.apyhub.com/apyhub/generate-watermark-for-videos/url/download

QUICKSTART

GUIDE

Quickstart

Send a video URL to generate a watermarked video.

curl -X POST "https://api.eu.apyhub.com/apyhub/generate-watermark-for-videos/url/download" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://assets.apyhub.com/samples/sample.mp4",
    "watermark_text": "ApyHub"

  }'

What you'll get back

Returns the generated video as binary data (string with format: binary), not JSON.

<binary video file>
TRY ITLIVE · 550 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
body*

About this endpoint

What it does

Applies a watermark to a video fetched from a remote URL, then streams the processed video back as a binary response. The request body includes the source video_url and optional watermark and layout settings.

Request Body

ParameterTypeDescription
video_urlStringRemote video URL to process. Must be a URI.
boxStringWatermark box setting. Default: 0.
sizeStringOutput video size, such as 1280x720.
gif_loopBooleanWhether to loop GIF output. Default: false.
watermark_textStringText to use as the watermark.
watermark_imageStringRemote watermark image URL. Must be a URI. Legacy alias watermark_image_url is also accepted.
watermark_image_urlStringRemote watermark image URL. Must be a URI.
watermark_opacityStringWatermark opacity. Default: 0.5.
watermark_positionENUMWatermark placement. Allowed values: top_right, top_left, bottom_right, bottom_left, center, bottom_center, top_center, center_left, center_right. Default: bottom_right.
watermark_font_sizeStringWatermark text font size. Default: 24.
watermark_font_colorStringWatermark text color.
watermark_image_sizeStringWatermark image size, such as 120x40.
watermark_text_paddingStringPadding around watermark text. Default: 10.
watermark_text_background_colorStringBackground color for the watermark text.

Response

Returns a binary file response containing the processed video stream. The output schema is a string with binary format, so the successful response body is the video content itself.

▣ ENDPOINT 02 / 04
POST
Apply watermark to remote video URL and return signed link
https://api.eu.apyhub.com/apyhub/generate-watermark-for-videos/url/link

QUICKSTART

GUIDE

Quickstart

Send a video URL and a watermark value to generate a watermarked video link.

curl -X POST "https://api.eu.apyhub.com/apyhub/generate-watermark-for-videos/url/link" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://assets.apyhub.com/samples/sample.mp4",
    "watermark_text": "ApyHub"
  }'

What you'll get back

Returns a JSON object with a data string field containing the URL of the generated watermarked video.

{
  "data": "https://storage.example.com/video-clips/watermarked.mp4?sig=abc"
}
TRY ITLIVE · 550 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
body*

About this endpoint

What it does

Applies a watermark to a remote video URL and returns a signed URL for the processed video. The request body must include the source video_url; other body fields control watermark text/image, placement, size, and styling.

Request Body

ParameterTypeDescription
video_urlStringRemote video URL to process. Must be a URI.
boxStringWatermark box setting. Default: 0.
sizeStringOutput video size. Example format: 1280x720.
gif_loopBooleanWhether to loop GIF output. Default: false.
watermark_textStringText to use as the watermark.
watermark_imageStringRemote watermark image URL. Must be a URI. Legacy alias watermark_image_url is also accepted.
watermark_image_urlStringRemote watermark image URL. Must be a URI.
watermark_opacityStringWatermark opacity. Default: 0.5.
watermark_positionENUMWatermark placement. Allowed values: top_right, top_left, bottom_right, bottom_left, center, bottom_center, top_center, center_left, center_right. Default: bottom_right.
watermark_font_sizeStringWatermark font size. Default: 24.
watermark_font_colorStringWatermark font color. Example format: #ffffff.
watermark_image_sizeStringWatermark image size. Example format: 120x40.
watermark_text_paddingStringPadding around the watermark text. Default: 10.
watermark_text_background_colorStringBackground color for watermark text. Example format: #000000.

Response

Returns a JSON object with a data string field containing a signed URI for the watermarked video. Success response shape: { "data": "..." }.

ParameterTypeDescription
dataStringSigned URL to the processed video. Must be a URI.
▣ ENDPOINT 03 / 04
POST
Apply watermark to uploaded video and stream download
https://api.eu.apyhub.com/apyhub/generate-watermark-for-videos/file/download

QUICKSTART

GUIDE

Quickstart

Upload a video and add a text watermark to get the processed file back.

curl -X POST "https://api.eu.apyhub.com/apyhub/generate-watermark-for-videos/file/download" \
  -H "apy-token: $APY_TOKEN" \
  -F "video=@/path/to/video.mp4" \
  -F "watermark_text=ApyHub"

What you'll get back

Returns a binary file (string with format: binary) as the downloaded watermarked video.

TRY ITLIVE · 550 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
Max 100MB total per request (all files combined). Larger? Use this API's URL-based endpoint instead, if it has one.
body*
Source video (.mp4 .mkv .avi .mov .flv .3gp .webm). Max 500 MiB.
Output video scale WxH (even dimensions).

About this endpoint

What it does

Applies a watermark to an uploaded video and returns the resulting video as a streamed binary download. The request sends the source video plus optional watermark configuration such as text/image watermark, placement, size, opacity, and output scaling.

Request Body

ParameterTypeDescription
videoBinarySource video file. Supported formats: .mp4, .mkv, .avi, .mov, .flv, .3gp, .webm. Max 500 MiB.
boxIntegerWhether to apply a box/background style setting. Allowed values: 0, 1. Default: 0.
sizeStringOutput video scale in WxH format. Dimensions must be even. Example: 1280x720.
gif_loopENUMControls GIF loop behavior. Allowed values: true, false, 0, 1.
watermark_textStringText watermark. Required unless watermark_image is provided. Example: ApyHub.
watermark_imageBinaryImage watermark file. Supported formats: .jpg, .jpeg, .png, .gif. Required unless watermark_text is provided.
watermark_opacityNumberWatermark opacity. Range: 0 to 1. Default: 0.5.
watermark_positionENUMWatermark placement. Allowed values: top_right, top_left, bottom_right, bottom_left, center, bottom_center, top_center, center_left, center_right. Default: bottom_right.
watermark_font_sizeIntegerFont size for text watermark. Minimum: 1. Default: 24.
watermark_font_colorStringText watermark font color. Example: #ffffff.
watermark_image_sizeStringSize for image watermark. Example: 120x40.
watermark_text_paddingStringPadding around text watermark. Default: 10.
watermark_text_background_colorStringBackground color for text watermark. Example: #000000.

Response

Returns a binary file stream as the success response. The response body is a single binary payload, not a JSON object.

ParameterTypeDescription
binary payloadStringDownloaded watermarked video file returned as binary content.

Notes

If you provide a text watermark, watermark_text is used; if you provide an image watermark, watermark_image is used. The schema marks each as required only in relation to the other, so send one of them to satisfy the watermark requirement.

Max 100MB total per request (all files combined). Larger? Use this API's URL-based endpoint instead, if it has one.

▣ ENDPOINT 04 / 04
POST
Apply watermark to uploaded video and return signed link
https://api.eu.apyhub.com/apyhub/generate-watermark-for-videos/file/link

QUICKSTART

GUIDE

Quickstart

Upload a video and add a simple text watermark.

curl -X POST "https://api.eu.apyhub.com/apyhub/generate-watermark-for-videos/file/link" \
  -H "apy-token: $APY_TOKEN" \
  -F "video=@/path/to/video.mp4" \
  -F "watermark_text=ApyHub"

What you'll get back

Returns a JSON object with a data string field containing the URL of the generated watermarked video.

{
  "data": "https://storage.example.com/video-clips/watermarked.mp4?sig=abc"
}
TRY ITLIVE · 550 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
Max 100MB total per request (all files combined). Larger? Use this API's URL-based endpoint instead, if it has one.
body*
Source video (.mp4 .mkv .avi .mov .flv .3gp .webm). Max 500 MiB.
Output video scale WxH (even dimensions).

About this endpoint

What it does

Applies a watermark to an uploaded video and returns a signed URI for the processed video. The request includes the source video plus watermark configuration, and the response returns the resulting file link.

Request Body

ParameterTypeDescription
videoBinarySource video file. Supported formats: .mp4, .mkv, .avi, .mov, .flv, .3gp, .webm. Max 500 MiB.
boxENUMBox mode flag. Allowed values: 0, 1. Default: 0.
sizeStringOutput video scale in WxH format with even dimensions.
gif_loopENUMLoop flag. Allowed values: true, false, 0, 1.
watermark_textStringText watermark. Required unless watermark_image is provided. Example: ApyHub.
watermark_imageBinaryImage watermark file. Supported formats: .jpg, .jpeg, .png, .gif. Required unless watermark_text is provided.
watermark_opacityNumberWatermark opacity. Minimum: 0; maximum: 1. Default: 0.5.
watermark_positionENUMWatermark position. Allowed values: top_right, top_left, bottom_right, bottom_left, center, bottom_center, top_center, center_left, center_right. Default: bottom_right.
watermark_font_sizeIntegerFont size for text watermark. Minimum: 1. Default: 24.
watermark_font_colorStringFont color for text watermark. Example: #ffffff.
watermark_image_sizeStringImage watermark size. Example format: 120x40.
watermark_text_paddingStringText padding. Default: 10.
watermark_text_background_colorStringBackground color for the text watermark. Example: #000000.

Response

Returns a JSON object with a data string field formatted as a URI. The data value is the signed link to the watermarked video.

ParameterTypeDescription
dataStringSigned URI for the processed video file.

Max 100MB total per request (all files combined). Larger? Use this API's URL-based endpoint instead, if it has one.

▣ COMMON ERRORS

Errors any endpoint can return

400bad_request

Required parameter missing or malformed body.

401unauthorized

API key missing, revoked, or not authorized for this service.

429rate_limited

Your plan's per-second rate exceeded. Retry with exponential backoff.

503upstream_busy

Backend temporarily unavailable. Try again in a few seconds.