Gemini Watermark Remover API
Clean Gemini images in your own app, script or pipeline. Send the image in one POST request and get the PNG back, with the sparkle logo removed and the original resolution kept. It uses the same engine as our free online remover.
Quickstart
- Get a key. Request access; we reply with your key by email. Keep it secret and send it only from your server.
- Send the image. POST the raw PNG or JPEG bytes to the endpoint with your key in the
Authorizationheader. - Save the result. A
200response body is the cleaned PNG.
https://the-ai-future.com/api/v1/remove-gemini-watermarkExamples
cURL
curl -X POST https://the-ai-future.com/api/v1/remove-gemini-watermark \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: image/png" \
--data-binary @gemini-image.png \
-o gemini-image-no-watermark.pngJavaScript (Node 18+)
import { readFile, writeFile } from 'node:fs/promises';
const res = await fetch('https://the-ai-future.com/api/v1/remove-gemini-watermark', {
method: 'POST',
headers: { Authorization: 'Bearer ' + process.env.GWR_API_KEY, 'Content-Type': 'image/png' },
body: await readFile('gemini-image.png'),
});
if (res.ok) await writeFile('gemini-image-no-watermark.png', Buffer.from(await res.arrayBuffer()));
else console.error(res.status, await res.json()); // e.g. 422 no_watermark_foundPython
import os, requests
with open("gemini-image.png", "rb") as f:
r = requests.post("https://the-ai-future.com/api/v1/remove-gemini-watermark",
headers={"Authorization": f"Bearer {os.environ['GWR_API_KEY']}", "Content-Type": "image/png"},
data=f.read(), timeout=60)
if r.ok:
open("gemini-image-no-watermark.png", "wb").write(r.content)
else:
print(r.status_code, r.json())Request
| Method | POST |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Body | The raw image bytes. PNG or JPEG, up to 5 MB and 25 megapixels. WebP isn’t supported yet. |
| Content-Type | image/png or image/jpeg (the format is detected from the file itself) |
Response
On success you get 200 with Content-Type: image/png. Useful headers:
X-Watermark-Box | Where the logo was: x,y,size in pixels |
|---|---|
X-Match-Score | Detection confidence from 0 to 1 |
X-RateLimit-Limit / X-RateLimit-Remaining | Your daily image limit and what’s left today |
Errors
Errors are JSON: {"error": "code", "message": "…"}.
| Status | Code | Meaning |
|---|---|---|
| 200 | — | Watermark removed. The body is the cleaned PNG. |
| 400 | empty_body | No image was sent in the request body. |
| 401 | missing_or_invalid_key | The Authorization header is missing, or the key is wrong or switched off. |
| 413 | file_too_large / image_too_large | Over 5 MB, or over 25 megapixels. |
| 415 | unsupported_type / webp_not_supported / image_unreadable | Send a PNG or JPEG. |
| 422 | no_watermark_found | No Gemini watermark was detected, so nothing was changed. |
| 429 | daily_limit_reached | The key’s daily image limit is used up. It resets at 00:00 UTC. |
Limits and Usage
- Daily limit: each key has a daily image limit (500 by default), reset at 00:00 UTC. Every accepted image counts, including ones where no watermark was found. Need more? Ask us.
- One image per request. For batches, send requests one after another or a few at a time.
- Privacy: images are processed in memory and never stored or logged. Only a count of requests per key is kept.
- What it removes: the visible Gemini sparkle logo only. Google’s invisible SynthID watermark stays in the image.
- Fair use: use it on images you generated with Gemini or have the right to edit. Don’t use it to pass off AI images as human-made.
Need Higher Volume or a Custom Setup?
Tell us how many images you process and how you’d like to connect. We’ll set up a key with the right limit.
Contact us about the API