Watermarking

The Resemble Watermark API applies and detects durable watermarks in audio, image, and video files. Provide a public HTTPS URL and the API automatically determines the media type from the file content.

Model behavior

All newly encoded media is reported as perth_v2. Detection behavior depends on the media type:

OperationAudioImage and video
ApplyEncodes with Perth v2Encodes with Perth v2
DetectRuns Perth v1 and Perth v2 concurrentlyRuns one detector, reported as Perth v2

For audio, the response includes an overall verdict and a separate result for each Perth version. This lets you identify older Perth v1 watermarks while continuing to detect content encoded with Perth v2.

Supported media

Media typeCommon formatsMaximum source sizeAdditional parameters
AudioWAV, MP3, and other audio formats25 MB
ImagePNG, JPEG, and other image formats25 MBstrength, custom_message
VideoMP4, MOV, and other video formats100 MBstrength, custom_message

The source URL must be publicly fetchable over HTTPS. Signed URLs are supported as long as they remain valid while the job is processing.

Asynchronous and synchronous processing

Processing is asynchronous by default. The initial response contains a job UUID and a status; poll the corresponding result endpoint until the status is completed or failed.

To wait for completion in the initial request, include Prefer: wait. Model cold starts and video processing can make synchronous requests take longer, so asynchronous processing is recommended when your HTTP client has a short request timeout.

1type WatermarkStatus = "pending" | "processing" | "completed" | "failed";
2
3interface ApplyRequest {
4 url: string;
5 strength?: number; // Image/video only; 0.0-1.0, default: 0.2
6 custom_message?: string; // Image/video only; default: "resembleai"
7}
8
9interface DetectRequest {
10 url: string;
11 custom_message?: string; // Image/video only; default: "resembleai"
12}
13
14interface WatermarkJob {
15 uuid: string;
16 media_type: "audio" | "image" | "video";
17 operation_type: "apply" | "detect";
18 status: WatermarkStatus;
19 model_version?: "perth_v2";
20 source_media_url: string;
21 watermarked_media: string | null;
22 metrics: object | null;
23 created_at: string;
24 updated_at: string;
25}

model_version is returned for all apply jobs and for image/video detect jobs. Audio detect jobs instead report every checked version in metrics.model_results.

See Apply Watermark and Detect Watermark for complete requests and response schemas.