Watermark API and Skill Docs
Install the OpenClaw skill or integrate the runtime-neutral watermark API with authenticated uploads, async task polling, retries, and result downloads.
Choose an Integration Layer
Airemovewatermark exposes the same workflow through three layers:
| Layer | Best fit | Compatibility |
|---|---|---|
| ClawHub package | OpenClaw and ClawHub-style runtimes | Native skill manifest and folder layout |
| Bundled Node script | Agents or automations that can run local Node commands | Portable command interface with structured JSON output |
| HTTP API | Backends, custom agents, and other automation platforms | Runtime-neutral request and response contract |
The published skill is not a native package for every agent framework. Runtimes that do not load OpenClaw-style skills should call the bundled Node script or the HTTP API directly.
API_BASE_URL is a deployment override, not an adapter for unrelated
watermark APIs. A replacement service must implement the endpoints, response
envelope, task states, and output-host behavior documented below.
Authentication
Create a key at API key settings, then send it with either:
Authorization: Bearer <api_key>or:
x-api-key: <api_key>Keep API keys in a server-side secret store or the agent runtime environment.
Do not embed them in client-side code, prompts, screenshots, or committed skill
files. Copy the raw sk-... secret shown once by the dashboard; do not hash it
yourself. The API hashes it internally. A revoked or expired key fails both
credit checks and watermark requests.
The examples below assume:
export API_BASE_URL="https://airemovewatermark.net"
export API_KEY="sk-your-key-shown-once"Quickstart: One Request Entry Point
POST /api/v1/watermark/remove is the recommended endpoint for agents. It
stores one input, creates one task, and optionally performs a short polling
window.
Check credits
curl --silent --show-error \
--header "Authorization: Bearer $API_KEY" \
"$API_BASE_URL/api/v1/credits"Submit a local image
curl --silent --show-error \
--request POST \
--header "Authorization: Bearer $API_KEY" \
--form "file=@/absolute/path/to/image.png" \
--form "wait=true" \
"$API_BASE_URL/api/v1/watermark/remove"The multipart field is named file. An optional fileName field can
override the uploaded filename.
Submit a remote image URL
curl --silent --show-error \
--request POST \
--header "Authorization: Bearer $API_KEY" \
--header "Content-Type: application/json" \
--data '{"imageUrl":"https://example.com/image.png","wait":true}' \
"$API_BASE_URL/api/v1/watermark/remove"imageUrl must use HTTP or HTTPS and must be reachable by the service. Send
exactly one input source: file or imageUrl, never both.
Poll an unfinished task
curl --silent --show-error \
--header "Authorization: Bearer $API_KEY" \
"$API_BASE_URL/api/v1/watermark/tasks/task_xxx"wait=true polls for up to about 30 seconds. It can still return an unfinished
task. Continue polling while the task is queued, processing, or
finalizing. Wait at least 1.6 seconds between status requests.
Retry a failed task
curl --silent --show-error \
--request POST \
--header "Authorization: Bearer $API_KEY" \
--header "Content-Type: application/json" \
--data '{}' \
"$API_BASE_URL/api/v1/watermark/tasks/task_xxx/retry"Retry only when the task response has status: "failed" and
canRetry: true.
Response Contract
Every JSON response uses this envelope:
{
"code": 0,
"message": "ok",
"data": {}
}code: 0means the API operation succeeded.code: -1means the request failed; readmessage.- Clients must inspect both the HTTP status and the JSON
code. Some application-level validation errors use a JSON error envelope even when the HTTP response itself is readable.
A create or status response includes a task object similar to:
{
"code": 0,
"message": "ok",
"data": {
"completed": false,
"pollUrl": "/api/v1/watermark/tasks/task_xxx",
"task": {
"id": "task_xxx",
"taskId": "task_xxx",
"status": "processing",
"costCredits": 1,
"outputUrl": null,
"outputFormat": null,
"expiresAt": "2026-08-19T00:00:00.000Z",
"error": null,
"canRetry": false
}
}
}Use task.id or task.taskId for later status requests. Treat provider
identifiers as implementation details. When status is succeeded,
outputUrl, outputFormat, dimensions, and expiry information describe the
stored result.
Task Lifecycle
| Status | Meaning | Client action |
|---|---|---|
queued | Accepted and waiting | Poll again |
processing | AI processing is running | Poll again |
finalizing | Result is being validated and stored | Poll again |
succeeded | Output is ready | Download outputUrl |
failed | Processing did not complete | Read error; retry only when allowed |
One credit is reserved when a task is created successfully. Failed processing tasks return the reserved credit automatically. Check the current balance before starting a large automated workflow.
Current Input and Queue Limits
The current public service defaults are:
- formats: JPG/JPEG, PNG, and WebP
- maximum file size: 10MB
- minimum width and height: 64px
- maximum image edge: 4096px
- maximum image area: 16 megapixels
- maximum aspect ratio: 1:4
- maximum active queue: 10 tasks per account
Deployment configuration can change operational limits. Treat a validation message returned by the API as authoritative and avoid retrying an unchanged invalid input.
Data Handling and Results
- Local files are uploaded to the remote API; processing is not local.
- Remote image URLs are fetched by the service before task creation.
- Input and output assets remain available in the account for up to 48 hours.
- Download completed work promptly; output URLs are temporary.
- The bundled script downloads only when
--download trueis set. - The published script accepts HTTPS results from the API base host or the official Airemovewatermark asset host.
- Process only images you own or are explicitly authorized to edit. See the Acceptable Use Policy and Privacy Policy.
Install the Published Skill
The current package is airemove-watermark version 0.1.7.
- Open the ClawHub listing.
- Create an API key.
- Set
API_KEYin the OpenClaw environment. - Ask the agent to process an authorized local file or remote image URL.
With OpenClaw 2026.5.7, the tested CLI installation command is:
openclaw skills install airemove-watermarkClawHub may display the scoped command
openclaw skills install @isees/airemove-watermark. OpenClaw 2026.5.7
rejects that form as an invalid slug. Use the tested unscoped command above or
the version-pinned ZIP below.
For a version-pinned local installation, download:
https://assets.airemovewatermark.net/skills/remove-watermark-skill-0.1.7.zipExtract it into ./skills or ~/.openclaw/skills. The archive contains:
manifest.yamlSKILL.mdscripts/remove_watermark.mjs
Required runtime capability:
- Node execution
- outbound HTTPS access
API_KEYenvironment variable
Optional configuration:
API_BASE_URLREMOVE_WATERMARK_API_KEYREMOVE_WATERMARK_BASE_URL- command-level
--api-keyand--base-url
The rwm_xxx value shown in the published 0.1.7 examples is a legacy
placeholder, not a required prefix. Supply the raw sk-... key shown once by
the current dashboard.
Bundled Script Commands
Run these commands from the installed airemove-watermark directory:
node scripts/remove_watermark.mjs creditsnode scripts/remove_watermark.mjs remove \
--file /absolute/path/to/image.png \
--wait true \
--download truenode scripts/remove_watermark.mjs remove \
--image-url https://example.com/image.png \
--wait truenode scripts/remove_watermark.mjs task \
--task-id task_xxx \
--download trueThe script prints structured JSON to standard output for success and failure. Prefer these top-level fields:
statustask_idcompletedresult_fileoutput_urlresult_summarynext_action
With --download true, completed results are stored under:
.openclaw-artifacts/remove-watermark/Advanced Multi-endpoint Flow
Use the lower-level endpoints only when your integration needs to manage upload metadata and task creation separately:
GET /api/v1/creditsPOST /api/v1/uploads/imagesPOST /api/v1/watermark/tasksGET /api/v1/watermark/tasks/:idPOST /api/v1/watermark/tasks/:id/retry
For POST /api/v1/uploads/images, send multipart field files and
scope=watermark. The task-creation endpoint expects the returned storage
URL, key, hash, format, MIME type, file size, width, and height. Most agent
clients should prefer the single-entry /api/v1/watermark/remove endpoint.
Failure Handling
| Message or condition | Recommended action |
|---|---|
| Missing or invalid API key | Replace the credential; do not retry unchanged |
| Insufficient credits | Add credits before another create request |
| Unsupported format or dimensions | Convert or resize the source image |
| Remote URL fetch timeout | Verify the URL is public and retry later |
| Active queue limit reached | Wait for current tasks to finish |
| Temporary provider or network error | Retry after a delay |
Failed task with canRetry: true | Call the retry endpoint once, then poll |
Do not loop indefinitely. Stop on a terminal failed status unless the
response explicitly allows a retry.