Most "remove watermark" tools are desktop apps you drive by hand, one clip at a time. This is the same job as an HTTP endpoint: POST a video URL and the rectangle the mark sits in, poll for the result, get back a video with a rebuilt background where the mark used to be. High-frame-rate detection plus AIGC inpainting with multi-frame consistency, so the patch does not shimmer between frames. Output resolution matches the input, up to 1080p, and you are billed $0.015 per second of video — only when the job succeeds.
One rule decides whether your first call works: draw the box generously. A rectangle cropped tight to the mark very often returns the video unchanged, while the same mark with roughly 30-50% margin around it is removed cleanly. We learned this the hard way — our own first tests boxed the mark exactly and we nearly concluded the feature was broken. For a corner logo, run the box all the way out to the frame edges; there is nothing there to protect.
The same endpoint and the same key also erase hardcoded subtitles and any on-screen text automatically, without you supplying a region — useful when you are cleaning burned-in captions rather than a fixed-position mark. Both jobs can be limited to part of the timeline, so a watermark that only appears in the intro costs you only those seconds of attention, not a re-render decision.
cURL
# Region mode — box the watermark, get a clean video back.
# Coordinates are normalized 0-1 (fractions of width/height), so they are
# resolution-independent. Draw the box GENEROUSLY — see the note below.
curl -X POST https://apimodels.app/api/v1/video/generations \
-H "Authorization: Bearer $APIMODELS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "subtitle-erase",
"video_url": "https://example.com/clip-with-watermark.mp4",
"eraseMode": "manual",
"eraseRatioLocation": [
{ "topLeftX": 0.70, "topLeftY": 0.02, "bottomRightX": 1.0, "bottomRightY": 0.20 }
]
}'
# → { "code": 200, "data": { "taskId": "...", "state": "pending" } }
# Poll until state == "completed"; data.resultUrls[0] is the cleaned video.
curl "https://apimodels.app/api/v1/video/generations?task_id=TASK_ID" \
-H "Authorization: Bearer $APIMODELS_API_KEY"
# Give the box ~30-50% more room than the mark occupies. A tight box very often
# returns the video unchanged — that is the #1 reason a region erase looks broken.
# For corner marks, take the box out to the frame edge as above.Python
import requests, time
API_KEY = "YOUR_KEY"
URL = "https://apimodels.app/api/v1/video/generations"
H = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
# The watermark sits in the top-right corner. Box it with margin —
# a rectangle cropped tight to the mark often comes back unchanged.
task = requests.post(URL, headers=H, json={
"model": "subtitle-erase",
"video_url": "https://example.com/clip-with-watermark.mp4",
"eraseMode": "manual",
"eraseRatioLocation": [
{"topLeftX": 0.70, "topLeftY": 0.02, "bottomRightX": 1.0, "bottomRightY": 0.20}
],
# Optional: only clean part of the timeline
# "clipFilter": {"mode": "Selected", "clips": [{"start": 0, "end": 12}]},
}).json()["data"]["taskId"]
while True:
d = requests.get(f"{URL}?task_id={task}", headers=H).json()["data"]
if d["state"] == "completed":
print(d["resultUrls"][0]); break
if d["state"] == "failed":
print(d["failMsg"]); break
time.sleep(10)
# Burned-in subtitles instead of a fixed mark? Drop eraseMode and the boxes —
# {"model": "subtitle-erase", "video_url": ..., "eraseType": "subtitle"}
# finds the captions on its own.Yes. POST the video URL plus the normalized rectangle the mark sits in to https://apimodels.app/api/v1/video/generations with model "subtitle-erase" and eraseMode "manual", then poll the task id. You get back a video with the background rebuilt where the mark was, at the input resolution (up to 1080p), for $0.015 per second. No desktop app, no per-clip manual masking, and the same key also works for subtitles and any on-screen text.
Almost always the box was too tight. A rectangle cropped to the visible edge of the mark frequently returns the video unchanged; the same mark with roughly 30-50% margin around it is removed cleanly. Widen the box first — for a corner logo, take it all the way to the frame edges — before concluding anything else. Two other things worth checking: eraseMode must be "manual" (in the default automatic mode your boxes only narrow where text detection may look, so a box around a non-text logo changes nothing), and coordinates are fractions of width and height between 0 and 1, not pixels.
$0.015 per second of video, billed on the input duration and only when the job succeeds — a 30-second clip is $0.45, a 3-minute one is $2.70. There is no subscription, no per-seat licence and no minimum. Erasing is charged the same whether you remove a watermark, a subtitle track or both in one pass, and limiting the job to part of the timeline does not reduce the price, because the whole file still has to be decoded and re-encoded.
A mark that stays in one place is the straightforward case — one box covers it for the whole clip. For a mark that moves, you have two options: give several boxes covering the path it travels (they are processed together), or split the work with clipFilter so different time ranges get different treatment. A mark that drifts across the entire frame is not a good fit, because the region you would have to box is most of the picture.
No. Leave eraseMode out and it runs automatically: eraseType "subtitle" (the default) removes caption-style subtitles anywhere they appear, and eraseType "text" removes any on-screen text, not just captions. Boxes are optional there and only narrow where detection may look, which is useful when you want to clean the lower third but keep a title card. Region mode exists for the things detection would never classify as text — logos, station bugs, signatures, image watermarks.
That depends entirely on the footage and is your call, not ours. Cleaning your own recordings, licensed stock you hold the rights to, or material where the rights holder has agreed is ordinary post-production. Stripping a mark from someone else's copyrighted work to republish it is not, and in several jurisdictions removing rights-management information is a separate offence from the copyright infringement itself. We provide the processing; you are responsible for holding the rights to the video you send.
No. Sign up at apimodels.app, create one API key, and call the endpoint. That same key also reaches Seedance, VEO, Kling, Sora, gpt-image-2, Claude, GPT-5.6 and Gemini on the same base URL, so a pipeline that generates a clip and then cleans it is one credential and one billing account, not several.
It is an async create-then-poll job; runtime scales with clip length and resolution, and a short clip typically finishes in a couple of minutes. Result files are hosted for 7 days, so download or re-host anything you need to keep. The task record itself stays in your console history.