apyhub
FILE MANIPULATION · IMAGE PROCESSING

Apply Watermark on Images API

What it does

Watermark Images adds text or image watermarks to an input image and returns the processed file or a signed download link. Use it when you need to brand marketing assets, stamp drafts, or protect shared visuals before sending them downstream.

Send an image as multipart upload, by URL, or as Base64. Across those input modes, you can choose either a text watermark or an image watermark, then control placement and styling with fields such as watermark_position, watermark_opacity, watermark_angle, watermark_font_size, watermark_font_color, watermark_image_size, watermark_text_padding, watermark_text_alignment, watermark_text_line_spacing, and watermark_text_background_color.

The multipart and Base64 endpoints accept size plus the source image and watermark payload. The URL-based endpoints fetch the source image from image_url and let you reference the watermark with watermark_image_url or set watermark_text directly. For Base64 requests, image_base64 is required and the watermark can be passed as watermark_base64.

Use .../download when you want the watermarked image bytes back immediately, or .../link when your workflow needs a data URI in the response. preserve_format is available on the file-based endpoints when you need to keep the original output format.

▣ ENDPOINT 01 / 06
POST
Apply watermark (multipart, download)
https://api.eu.apyverse.com/apyhub/apply-watermark/multi-part/download

QUICKSTART

GUIDE

Quickstart

Upload an image with an optional watermark file or text, then download the generated result.

curl -X POST "https://api.eu.apyverse.com/apyhub/apply-watermark/multi-part/download?output=my-invite" \
  -H "apy-token: $APY_TOKEN" \
  -F "image=@/path/to/image.jpg"

What you'll get back

Returns a binary file containing the processed output image.

TRY ITLIVE · 60 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*

About this endpoint

What it does

Applies a watermark to an uploaded image and returns the processed file as binary output. The request sends the source image plus optional watermark configuration, and the response is a downloadable binary file.

Query Parameter(s)

AttributeTypeMandatoryDescription
outputStringNoOutput filename or identifier.
preserve_formatBooleanNoWhen true, preserves the original format.

Request Body

ParameterTypeMandatoryDescription
imageStringYesSource image file to watermark. Binary upload.
watermarkStringNoWatermark file to apply. Binary upload.
watermark_textStringNoWatermark text to overlay.
watermark_angleStringNoWatermark rotation angle.
watermark_imageStringNoWatermark image to overlay. Binary upload.
watermark_opacityStringNoWatermark opacity value.
watermark_positionStringNoWatermark placement.
watermark_font_sizeStringNoWatermark text font size.
watermark_font_colorStringNoWatermark text font color.
watermark_image_sizeStringNoWatermark image size.
watermark_text_paddingStringNoPadding around watermark text.
watermark_text_alignmentStringNoWatermark text alignment.
watermark_text_line_spacingStringNoWatermark text line spacing.
watermark_text_background_colorStringNoWatermark text background color.
sizeStringNoOutput size setting.

Response

Returns a binary file containing the watermarked image.

AttributeTypeMandatoryDescription
binaryStringYesThe processed output file.

Query parameters

Name
Type
Description
outputOPTIONAL
string
preserve_formatOPTIONAL
boolean

Body

Name
Type
Description
bodyREQUIRED
object

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

▣ ENDPOINT 02 / 06
POST
Apply watermark (multipart, signed URL)
https://api.eu.apyverse.com/apyhub/apply-watermark/multi-part/link

QUICKSTART

GUIDE

Quickstart

Upload an image and apply a watermark from a file or text using a multipart form request.

curl -X POST "https://api.eu.apyverse.com/apyhub/apply-watermark/multi-part/link?output=my-invite" \
  -H "apy-token: $APY_TOKEN" \
  -F "image=@/path/to/image.jpg" \
  -F "watermark_text=Confidential"

What you'll get back

Returns a JSON object with a data string field containing the generated file URL.

{
  "data": "https://apyverse-dev-outgoing.s3.eu-west-1.amazonaws.com/mono-go/image-processor-watermark/general/watermark_2026-07-01_eb78bbf2.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA2Q3FC7EXNYY64ZXU%2F20260701%2Feu-west-1%2Fs3%2Faws4_request&X-Amz-Date=20260701T110102Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&response-content-disposition=inline&response-content-type=image%2Fjpeg&X-Amz-Signature=d94886615717ca15dd7e7eeb897dfbdc7db867666fb4d63b0d354cd1262b41e1"
}
TRY ITLIVE · 60 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*

About this endpoint

What it does

Applies a watermark to an uploaded image and returns a URI for the resulting file. The request sends the source image plus optional watermark configuration, and the response contains the output location as a string URI.

Query Parameter(s)

AttributeTypeMandatoryDescription
outputStringNoOutput filename or identifier.
preserve_formatBooleanNoPreserves the original image format when set.

Request Body

ParameterTypeMandatoryDescription
imageStringYesSource image file to watermark.
sizeStringNosee schema for nested fields
watermarkStringNoWatermark file to apply.
watermark_textStringYes (if watermark_image not given)Text to use as the watermark.
watermark_angleStringNoWatermark angle.
watermark_imageStringYes (if watermark_text not given)Watermark image file.
watermark_opacityStringNoWatermark opacity.
watermark_positionStringNoWatermark position.
watermark_font_sizeStringNoWatermark text font size.
watermark_font_colorStringNoWatermark text font color.
watermark_image_sizeStringNoWatermark image size.
watermark_text_paddingStringNoPadding around watermark text.
watermark_text_alignmentStringNoWatermark text alignment.
watermark_text_line_spacingStringNoWatermark text line spacing.
watermark_text_background_colorStringNoWatermark text background color.

Response

Returns a JSON object with a data string field formatted as a URI. The success response contains the location of the processed output.

ParameterTypeMandatoryDescription
dataStringYesURI of the generated watermarked file.

Query parameters

Name
Type
Description
outputOPTIONAL
string
preserve_formatOPTIONAL
boolean

Body

Name
Type
Description
bodyREQUIRED
object

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

▣ ENDPOINT 03 / 06
POST
Apply watermark (URL fetch, download)
https://api.eu.apyverse.com/apyhub/apply-watermark/url/download

QUICKSTART

GUIDE

Quickstart

Generate a watermark from an image URL and download the result as a file.

curl -X POST "https://api.eu.apyverse.com/apyhub/apply-watermark/url/download" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://assets.apyhub.com/samples/sample.jpg",
    "watermark_text": "Confidential"
  }'

What you'll get back

Returns a binary file (string with format: binary) containing the watermarked image.

(binary file)
TRY ITLIVE · 60 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*
Watermark URL mode. Image from `image_url`. Either `watermark_text` or watermark image URL (`watermark_image_url`). Style/placement fields mirror multipart names (`watermark_position`, `watermark_opacity`, …).
watermark_font_color

About this endpoint

What it does

Applies a watermark to an image fetched from a URL and returns the resulting file as binary data. The request body supplies the source image URL and watermark settings; the response is the downloaded/watermarked file content.

Query Parameter(s)

AttributeTypeMandatoryDescription
outputStringNoOutput file identifier/format hint.
preserve_formatBooleanNoWhether to keep the original file format.

Request Body

ParameterTypeMandatoryDescription
sizeStringNoWatermark URL mode setting.
image_urlStringNoSource image URL to watermark. Must be a URI.
watermark_textStringNoText to use as the watermark. Either watermark_text or watermark_image_url should be provided.
watermark_angleStringNoWatermark rotation angle.
watermark_opacityStringNoWatermark opacity.
watermark_positionStringNoWatermark placement on the image.
watermark_font_sizeStringNoWatermark text font size.
watermark_image_urlStringNoWatermark image URL. Must be a URI. Either watermark_image_url or watermark_text should be provided.
watermark_font_colorString ArrayNoWatermark text font color components.
watermark_image_sizeStringNoWatermark image size.
watermark_text_paddingStringNoWatermark text padding.
watermark_text_alignmentStringNoWatermark text alignment.
watermark_text_line_spacingStringNoWatermark text line spacing.
watermark_text_background_colorStringNoWatermark text background color.

Response

Returns the resulting file as a binary response body.

ParameterTypeMandatoryDescription
binaryStringYesBinary file content returned by the endpoint.

Query parameters

Name
Type
Description
outputOPTIONAL
string
preserve_formatOPTIONAL
boolean

Body

Name
Type
Description
bodyREQUIRED
object
Watermark URL mode. Image from `image_url`. Either `watermark_text` or watermark image URL (`watermark_image_url`). Style/placement fields mirror multipart names (`watermark_position`, `watermark_opacity`, …).
▣ ENDPOINT 04 / 06
POST
Apply watermark (URL fetch, signed URL)
https://api.eu.apyverse.com/apyhub/apply-watermark/url/link

QUICKSTART

GUIDE

Quickstart

Generate a watermark from an image URL and return the resulting file URL.

curl -X POST "https://api.eu.apyverse.com/apyhub/apply-watermark/url/link" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://assets.apyhub.com/samples/sample.jpg",
    "watermark_text": "Confidential"
  }'

What you'll get back

Returns a JSON object with a data string field containing the output image URL.

{
  "data": "https://apyverse-dev-outgoing.s3.eu-west-1.amazonaws.com/mono-go/image-processor-watermark/general/watermark_2026-07-01_364973f9.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA2Q3FC7EXNYY64ZXU%2F20260701%2Feu-west-1%2Fs3%2Faws4_request&X-Amz-Date=20260701T110952Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&response-content-disposition=inline&response-content-type=image%2Fjpeg&X-Amz-Signature=6168ed7c4c69c4f2d0ec2b5da967bf411a7c7464d73c0e0bc83535b4724a66f9"
}
TRY ITLIVE · 60 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*
Watermark URL mode. Image from `image_url`. Either `watermark_text` or watermark image URL (`watermark_image_url`). Style/placement fields mirror multipart names (`watermark_position`, `watermark_opacity`, …).
watermark_font_color

About this endpoint

What it does

Applies a watermark to an image fetched from a signed URL. The request body supplies the source image URL plus watermark text- or image-based styling options, and the response returns a JSON object containing the resulting image URL.

Query Parameter(s)

AttributeTypeMandatoryDescription
outputStringNoOutput name for the generated file.
preserve_formatBooleanNoPreserve the original image format.

Request Body

ParameterTypeMandatoryDescription
sizeStringNoOutput size.
image_urlStringNoSource image URL to watermark. Format: URI.
watermark_textStringNoText to use as the watermark.
watermark_angleStringNoWatermark rotation angle.
watermark_opacityStringNoWatermark opacity.
watermark_positionStringNoWatermark placement on the image.
watermark_font_sizeStringNoWatermark text font size.
watermark_image_urlStringNoWatermark image URL. Format: URI.
watermark_font_colorString ArrayNoWatermark text font color values.
watermark_image_sizeStringNoWatermark image size.
watermark_text_paddingStringNoPadding around the watermark text.
watermark_text_alignmentStringNoWatermark text alignment.
watermark_text_line_spacingStringNoWatermark text line spacing.
watermark_text_background_colorStringNoWatermark text background color.

Response

Returns a JSON object with a data string field formatted as a URI. This field contains the resulting watermarked image location.

ParameterTypeMandatoryDescription
dataStringYesResulting image URL. Format: URI.

Query parameters

Name
Type
Description
outputOPTIONAL
string
preserve_formatOPTIONAL
boolean

Body

Name
Type
Description
bodyREQUIRED
object
Watermark URL mode. Image from `image_url`. Either `watermark_text` or watermark image URL (`watermark_image_url`). Style/placement fields mirror multipart names (`watermark_position`, `watermark_opacity`, …).
▣ ENDPOINT 05 / 06
POST
Apply watermark (base64 bodies, download)
https://api.eu.apyverse.com/apyhub/apply-watermark/base64/download

QUICKSTART

GUIDE

Quickstart

Send a base64-encoded image plus a watermark in the request body to generate a watermarked image.

curl -X POST "https://api.eu.apyverse.com/apyhub/apply-watermark/base64/download" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "image_base64": "iVBORw0KGgoAAAANSUhEUgAAAAUA",
    "watermark_text": "Confidential"
  }'

What you'll get back

Returns the generated image as binary data (string with format: binary).

(binary file)
TRY ITLIVE · 60 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*
Source image as Base64 (`image_base64` required). Watermark via `watermark_text` or `watermark_base64`; placement/style keys match URL JSON / multipart parity.
Required — standard Base64-encoded image bytes.
watermark_font_color

About this endpoint

What it does

Applies a watermark to a source image provided as Base64 and returns the processed file as a binary download. The request body carries the source image plus optional watermark text or watermark image settings.

Query Parameter(s)

AttributeTypeMandatoryDescription
outputStringNoOutput filename stem.
preserve_formatBooleanNoWhen true, preserves the original file format.

Request Body

ParameterTypeMandatoryDescription
image_base64StringYesRequired — standard Base64-encoded image bytes.
sizeStringNoSource image size.
watermark_textStringNoWatermark text to apply.
watermark_angleStringNoWatermark angle.
watermark_base64StringNoWatermark image as Base64.
watermark_opacityStringNoWatermark opacity.
watermark_positionStringNoWatermark position.
watermark_font_sizeStringNoWatermark text font size.
watermark_font_colorString ArrayNoWatermark text font color components.
watermark_image_sizeStringNoWatermark image size.
watermark_text_paddingStringNoWatermark text padding.
watermark_text_alignmentStringNoWatermark text alignment.
watermark_text_line_spacingStringNoWatermark text line spacing.
watermark_text_background_colorStringNoWatermark text background color.

Response

Returns a binary file download. The output schema is a single binary string, so the success response is the downloaded file content rather than a JSON object.

Query parameters

Name
Type
Description
outputOPTIONAL
string
preserve_formatOPTIONAL
boolean

Body

Name
Type
Description
bodyREQUIRED
object
Source image as Base64 (`image_base64` required). Watermark via `watermark_text` or `watermark_base64`; placement/style keys match URL JSON / multipart parity.
▣ ENDPOINT 06 / 06
POST
Apply watermark (base64 bodies, signed URL)
https://api.eu.apyverse.com/apyhub/apply-watermark/base64/link

QUICKSTART

GUIDE

Quickstart

Send a base64-encoded image and a watermark definition to generate a watermarked image URL.

curl -X POST "https://api.eu.apyverse.com/apyhub/apply-watermark/base64/link" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "image_base64": "iVBORw0KGgoAAAANSUhEUgAAAAUA",
    "watermark_text": "ApyHub"
  }'

What you'll get back

Returns a JSON object with a data string field containing the generated image URL.

{
  "data": "https://apyverse-dev-outgoing.s3.eu-west-1.amazonaws.com/mono-go/image-processor-watermark/general/watermark_2026-07-01_ca36b745.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA2Q3FC7EXNYY64ZXU%2F20260701%2Feu-west-1%2Fs3%2Faws4_request&X-Amz-Date=20260701T111130Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&response-content-disposition=inline&response-content-type=image%2Fjpeg&X-Amz-Signature=6daa7c0819205344392be08e2bbe0f0e241d17243c62012245a79080f5ed472a"
}
TRY ITLIVE · 60 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*
Source image as Base64 (`image_base64` required). Watermark via `watermark_text` or `watermark_base64`; placement/style keys match URL JSON / multipart parity.
Required — standard Base64-encoded image bytes.
watermark_font_color

About this endpoint

What it does

Applies a watermark to a source image provided as Base64 and returns a JSON object containing a data URI string for the processed result. The watermark can be supplied as text or as Base64 image data, with additional fields to control placement and styling.

Query Parameter(s)

AttributeTypeMandatoryDescription
outputStringNoOutput name.
preserve_formatBooleanNoPreserve the original format when processing the image.

Request Body

ParameterTypeMandatoryDescription
sizeStringNoImage size.
image_base64StringYesRequired — standard Base64-encoded image bytes. Source image as Base64.
watermark_textStringNoWatermark text. Use this or watermark_base64 for the watermark content.
watermark_angleStringNoWatermark angle.
watermark_base64StringNoBase64-encoded watermark image. Use this or watermark_text for the watermark content.
watermark_opacityStringNoWatermark opacity.
watermark_positionStringNoWatermark position.
watermark_font_sizeStringNoWatermark font size.
watermark_font_colorString ArrayNoWatermark font color components.
watermark_image_sizeStringNoWatermark image size.
watermark_text_paddingStringNoWatermark text padding.
watermark_text_alignmentStringNoWatermark text alignment.
watermark_text_line_spacingStringNoWatermark text line spacing.
watermark_text_background_colorStringNoWatermark text background color.

Response

Returns a JSON object with a data string field formatted as a URI. This is the processed image result returned by the endpoint.

ParameterTypeMandatoryDescription
dataStringYesURI of the processed output image.

Query parameters

Name
Type
Description
outputOPTIONAL
string
preserve_formatOPTIONAL
boolean

Body

Name
Type
Description
bodyREQUIRED
object
Source image as Base64 (`image_base64` required). Watermark via `watermark_text` or `watermark_base64`; placement/style keys match URL JSON / multipart parity.
▣ 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.