curl --request POST \
--url https://api.goenhance.ai/api/v1/images/generations \
--header 'Content-Type: application/json' \
--data '
{
"model": "watermark-remover",
"image_url": "https://your-cdn.com/photo.jpg",
"detection_prompt": "watermark"
}
'import requests
url = "https://api.goenhance.ai/api/v1/images/generations"
payload = {
"model": "watermark-remover",
"image_url": "https://your-cdn.com/photo.jpg",
"detection_prompt": "watermark"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'watermark-remover',
image_url: 'https://your-cdn.com/photo.jpg',
detection_prompt: 'watermark'
})
};
fetch('https://api.goenhance.ai/api/v1/images/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.goenhance.ai/api/v1/images/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'watermark-remover',
'image_url' => 'https://your-cdn.com/photo.jpg',
'detection_prompt' => 'watermark'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.goenhance.ai/api/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"watermark-remover\",\n \"image_url\": \"https://your-cdn.com/photo.jpg\",\n \"detection_prompt\": \"watermark\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.goenhance.ai/api/v1/images/generations")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"watermark-remover\",\n \"image_url\": \"https://your-cdn.com/photo.jpg\",\n \"detection_prompt\": \"watermark\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goenhance.ai/api/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"watermark-remover\",\n \"image_url\": \"https://your-cdn.com/photo.jpg\",\n \"detection_prompt\": \"watermark\"\n}"
response = http.request(request)
puts response.read_body{
"code": 0,
"msg": "Success",
"data": {
"img_uuid": "c12b656c-747a-44fd-9c80-add79b0c52d5",
"cost": 1
}
}Watermark Remover
Automatically detect and remove watermarks, logos and text overlays from an image. Watermark regions are detected and then filled in with matching background; the rest of the image is left untouched and the output keeps the original size.
Pricing: 1 token per image (= $0.02), regardless of image size.
Input and output:
image_urlmust be anhttps://link that is publicly reachable.- The output format follows the input: PNG, JPG and WebP keep their format; other formats (for example BMP) are returned as PNG.
Tuning detection:
detection_promptdescribes what to remove. The defaultwatermarkcovers most stock-photo and AI-generator marks; naming the mark (for exampleSora logoorGetty Images) helps when it is small or blends into the background.max_bbox_percentignores any detected region larger than this share of the image, so a false positive cannot erase a large part of the picture. Raise it only for watermarks that really cover a big area.
Returns an img_uuid; poll GET /api/v1/jobs/detail (or use custom_callback_url) to get the cleaned image.
curl --request POST \
--url https://api.goenhance.ai/api/v1/images/generations \
--header 'Content-Type: application/json' \
--data '
{
"model": "watermark-remover",
"image_url": "https://your-cdn.com/photo.jpg",
"detection_prompt": "watermark"
}
'import requests
url = "https://api.goenhance.ai/api/v1/images/generations"
payload = {
"model": "watermark-remover",
"image_url": "https://your-cdn.com/photo.jpg",
"detection_prompt": "watermark"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'watermark-remover',
image_url: 'https://your-cdn.com/photo.jpg',
detection_prompt: 'watermark'
})
};
fetch('https://api.goenhance.ai/api/v1/images/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.goenhance.ai/api/v1/images/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'watermark-remover',
'image_url' => 'https://your-cdn.com/photo.jpg',
'detection_prompt' => 'watermark'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.goenhance.ai/api/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"watermark-remover\",\n \"image_url\": \"https://your-cdn.com/photo.jpg\",\n \"detection_prompt\": \"watermark\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.goenhance.ai/api/v1/images/generations")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"watermark-remover\",\n \"image_url\": \"https://your-cdn.com/photo.jpg\",\n \"detection_prompt\": \"watermark\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goenhance.ai/api/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"watermark-remover\",\n \"image_url\": \"https://your-cdn.com/photo.jpg\",\n \"detection_prompt\": \"watermark\"\n}"
response = http.request(request)
puts response.read_body{
"code": 0,
"msg": "Success",
"data": {
"img_uuid": "c12b656c-747a-44fd-9c80-add79b0c52d5",
"cost": 1
}
}Headers
Body
Model name. Must be watermark-remover.
watermark-remover URL of the image to clean. Must be an https:// link that is publicly reachable.
1What to detect and remove, in English. Defaults to watermark. Naming the mark (for example Sora logo or Getty Images) improves detection of small or low-contrast watermarks.
200Largest region to remove, as a percentage of the image area. Detected regions above this size are treated as false positives and left untouched. Defaults to 10.
x <= 100Optional. 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.
"https://your-server.com/goenhance/callback"
