Video subtitle / watermark removal
Submit a video subtitle or watermark removal task, then poll or use a callback.
Video subtitle / watermark removal →550W · Developer API
Image & Video Processing API
Submit a video subtitle or watermark removal task, then poll or use a callback.
Video subtitle / watermark removal →Remove an image watermark synchronously or as an async task.
Image watermark removal →Task state machine · Task and account utilities
Available endpoints →Video subtitle removal is charged by processing duration and resolution. Images cost 10 credits per successful task; failed processing is not charged.
Usage & billingUse userNo and API Key for every request. Upload is optional: use /open/uploadVideo or provide a public videoUrl.
Generate API KeyChoose a workflow for your product. Each step links directly to the API reference below.
Integration exampleshttps://www.550wai.cnPOST · multipart/form-dataUse userNo and API Key for every request. Upload is optional: use /open/uploadVideo or provide a public videoUrl.
curl -X POST https://www.550wai.cn/open/submitTask \\
-H 'Content-Type: application/x-www-form-urlencoded' \\
--data-urlencode 'userNo=YOUR_USER_NO' --data-urlencode 'apiKey=YOUR_API_KEY' \\
--data-urlencode 'videoUrl=https://example.com/video.mp4' \\
--data-urlencode 'width=1920' --data-urlencode 'height=1080' --data-urlencode 'duration=30' \\
--data-urlencode 'x1=0' --data-urlencode 'y1=0' --data-urlencode 'x2=1920' --data-urlencode 'y2=200'Use userNo and API Key for every request. Upload is optional: use /open/uploadVideo or provide a public videoUrl.
Responses contain code and message. Tasks progress through waiting, processing, and success or failed. On success, use resultUrl; on failure, inspect failCode. Result files expire. For overseas accounts (clientType=overseas), message is returned in English. Codes, field names, status, and failCode are language-independent; use them for program logic.
uploadVideo → submitTask → taskDetail
Responses contain code and message. Tasks progress through waiting, processing, and success or failed. On success, use resultUrl; on failure, inspect failCode. Result files expire.
Handle errors using code, message, status, failCode and refundStatus.
Configure a publicly reachable HTTPS callbackUrl to receive the final task status. Alternatively, query taskDetail with taskId and gradually increase the time between checks.
Send a unique Idempotency-Key for each logical task submission. Reuse the same key when retrying that submission to receive the original taskId without creating another task or charging twice.
Set sync to false, save task.taskId, and call imageWatermarkTaskDetail until the status is success or failed. On success, read task.resultUrl.
resultUrl · 24 h
Choose a workflow for your product. Each step links directly to the API reference below.
videoUrl · uploadVideo · Upload a local video, or provide your own public videoUrl.submitTask · Submit a video subtitle or watermark removal task, then poll or use a callback.taskId · taskDetail · callbackUrlremoveImageWatermark · Remove an image watermark synchronously or as an async task.sync=true → resultUrl · sync=false → taskIdimageWatermarkTaskDetail · Check the final task statususerNo · apiKey · Required on every requestqueryCredits · Check available account credits.taskList · List your video tasks with pagination. Deleted tasks are filtered from taskDetail and taskList; task status remains waiting, processing, success, or failed./open/uploadVideoUpload a local video, or provide your own public videoUrl.
/open/submitTaskSubmit a video subtitle or watermark removal task, then poll or use a callback.
/open/taskDetailCheck a video task’s status, result, cost, and failure details.
/open/taskListList your video tasks with pagination. Deleted tasks are filtered from taskDetail and taskList; task status remains waiting, processing, success, or failed.
/open/deleteTaskMark a video task as deleted and return immediately. Its uploaded source, processed result, and retry media are then removed from VOD asynchronously in the background. Neither taskDetail nor taskList returns it after deletion. Credits already charged are not refunded.
/open/removeImageWatermarkRemove an image watermark synchronously or as an async task.
/open/imageWatermarkTaskDetailCheck an async image task’s status and result URL.
/open/queryCreditsCheck available account credits.
/open/uploadVideoUpload a local video, or provide your own public videoUrl.
Request format: multipart/form-data
| Field | Type | Required | Description |
|---|---|---|---|
userNo | string | Yes | 550W userNo |
apiKey | string | Yes | API Key |
file | file | Yes | MP4/MOV · ≤ 1080p · ≤ 30 min · File Size ≤ 1 GiB |
| Field | Type | Description |
|---|---|---|
code | number | Result code; 200 means success |
message | string | Human-readable status message |
videoUrl | string | Hosted video URL |
coverUrl | string | Video cover URL |
width | number | Video width in pixels |
height | number | Video height in pixels |
duration | number | Video duration in seconds |
| code | Meaning | Description |
|---|---|---|
-100 | Authentication or quota failure | Typical causes: userNo · API Key · credits |
-200 | Invalid parameter | Typical causes: field · URL · size · duration · Idempotency-Key |
-500 | Internal error | Typical causes: server · retry |
/open/submitTaskSubmit a video subtitle or watermark removal task, then poll or use a callback.
Request format: application/x-www-form-urlencoded
| Field | Type | Required | Description |
|---|---|---|---|
userNo | string | Yes | 550W userNo |
apiKey | string | Yes | API Key |
videoUrl | string | Yes | HTTP(S) URL · ≤ 2048 chars |
width | number | Yes | px · max edge ≤ 1920 · min edge ≤ 1080 |
height | number | Yes | px · max edge ≤ 1920 · min edge ≤ 1080 |
duration | number | Yes | 1–1800 s |
x1 | number | Yes | top-left X · px · ≥ 0 |
y1 | number | Yes | top-left Y · px · ≥ 0 |
x2 | number | Yes | bottom-right X · px · > x1 |
y2 | number | Yes | bottom-right Y · px · > y1 |
mode | string | No | normal (default) · protect |
fileName | string | No | UTF-8 |
coverUrl | string | No | HTTP(S) URL |
callbackUrl | string | No | HTTPS webhook · final status |
removeAudio | boolean | No | true · false (default) |
Idempotency-Key / idempotencyKey | string | Recommended | ≤ 128 chars |
| Field | Type | Description |
|---|---|---|
code | number | Result code; 200 means success |
message | string | Human-readable status message |
taskId | string | Task identifier; save it for status queries |
status | string | waiting / processing / success / failed |
| code | Meaning | Description |
|---|---|---|
-100 | Authentication or quota failure | Typical causes: userNo · API Key · credits |
-200 | Invalid parameter | Typical causes: field · URL · size · duration · Idempotency-Key |
-300 | Request rejected | Typical causes: taskId · ownership · state |
-401 | Temporary account suspension | Typical causes: First effective violation: 1 hour. Second: 24 hours. Hits during an active suspension do not count, extend, or escalate it. |
-402 | Permanent account ban | Typical causes: The third effective violation permanently bans the account. |
-600 | Unsupported video format | Typical causes: codec · bit depth · HDR · audio |
/open/taskDetailCheck a video task’s status, result, cost, and failure details.
Request format: form / query
| Field | Type | Required | Description |
|---|---|---|---|
userNo | string | Yes | 550W userNo |
apiKey | string | Yes | API Key |
taskId | string | Yes | 1–64 chars |
subUserId | string | No | ≤ 128 chars · ownership scope |
| Field | Type | Description |
|---|---|---|
taskId | string | Task identifier; save it for status queries |
status | string | waiting / processing / success / failed |
width | number | Video width in pixels |
height | number | Video height in pixels |
duration | number | Video duration in seconds |
x1 | number | x1 |
y1 | number | y1 |
x2 | number | x2 |
y2 | number | y2 |
mode | string | mode |
cost | number | Credits charged for this task |
resultUrl | string | Result URL; valid for 24 hours after generation |
failCode | string | Stable failure identifier |
failReason | string | Diagnostic failure reason |
refundStatus | number | Credit refund state after failure |
| code | Meaning | Description |
|---|---|---|
-100 | Authentication or quota failure | Typical causes: userNo · API Key · credits |
-300 | Request rejected | Typical causes: taskId · ownership · state |
-500 | Internal error | Typical causes: server · retry |
/open/taskListList your video tasks with pagination. Deleted tasks are filtered from taskDetail and taskList; task status remains waiting, processing, success, or failed.
Request format: form / query
| Field | Type | Required | Description |
|---|---|---|---|
userNo | string | Yes | 550W userNo |
apiKey | string | Yes | API Key |
page | number | No | ≥ 0 · default 0 |
size | number | No | 1–100 · default 20 |
subUserId | string | No | ≤ 128 chars · ownership scope |
| Field | Type | Description |
|---|---|---|
total | number | Total non-deleted task count |
page | number | Normalized page number |
size | number | Normalized page size |
list | array | Non-deleted tasks; status is waiting, processing, success, or failed |
| code | Meaning | Description |
|---|---|---|
-100 | Authentication or quota failure | Typical causes: userNo · API Key · credits |
-200 | Invalid parameter | Typical causes: field · URL · size · duration · Idempotency-Key |
-500 | Internal error | Typical causes: server · retry |
/open/deleteTaskMark a video task as deleted and return immediately. Its uploaded source, processed result, and retry media are then removed from VOD asynchronously in the background. Neither taskDetail nor taskList returns it after deletion. Credits already charged are not refunded.
Request format: form / query
| Field | Type | Required | Description |
|---|---|---|---|
userNo | string | Yes | 550W userNo |
apiKey | string | Yes | API Key |
taskId | string | Yes | 1–64 chars |
subUserId | string | No | ≤ 128 chars · ownership scope |
| Field | Type | Description |
|---|---|---|
code | number | Result code; 200 means success |
message | string | Human-readable status message |
| code | Meaning | Description |
|---|---|---|
-100 | Authentication or quota failure | Typical causes: userNo · API Key · credits |
-200 | Invalid parameter | Typical causes: field · URL · size · duration · Idempotency-Key |
-300 | Request rejected | Typical causes: taskId · ownership · state |
-500 | Internal error | Typical causes: server · retry |
/open/removeImageWatermarkRemove an image watermark synchronously or as an async task.
Request format: multipart/form-data
| Field | Type | Required | Description |
|---|---|---|---|
userNo | string | Yes | 550W userNo |
apiKey | string | Yes | API Key |
file | file | Yes | JPG · PNG · BMP · WebP · AVIF · TIFF · SVG · ≤ 50 MiB |
sync | boolean | No | true (default) · false |
operationId | string | No | string |
| Field | Type | Description |
|---|---|---|
code | number | Result code; 200 means success |
message | string | Human-readable status message |
creditsAfter | number | Credits remaining after processing |
task | object | Synchronous result or asynchronous task |
| code | Meaning | Description |
|---|---|---|
-100 | Authentication or quota failure | Typical causes: userNo · API Key · credits |
-200 | Invalid parameter | Typical causes: field · URL · size · duration · Idempotency-Key |
-300 | Request rejected | Typical causes: taskId · ownership · state |
-500 | Internal error | Typical causes: server · retry |
/open/imageWatermarkTaskDetailCheck an async image task’s status and result URL.
Request format: form / query
| Field | Type | Required | Description |
|---|---|---|---|
userNo | string | Yes | 550W userNo |
apiKey | string | Yes | API Key |
taskId | string | Yes | 1–64 chars |
| Field | Type | Description |
|---|---|---|
status | string | waiting / processing / success / failed |
resultUrl | string | Result URL; valid for 24 hours after generation |
failCode | string | Stable failure identifier |
failReason | string | Diagnostic failure reason |
cost | number | Credits charged for this task |
expiredTime | string | Result URL expiration time |
| code | Meaning | Description |
|---|---|---|
-100 | Authentication or quota failure | Typical causes: userNo · API Key · credits |
-300 | Request rejected | Typical causes: taskId · ownership · state |
-500 | Internal error | Typical causes: server · retry |
/open/queryCreditsCheck available account credits.
Request format: form / query
| Field | Type | Required | Description |
|---|---|---|---|
userNo | string | Yes | 550W userNo |
apiKey | string | Yes | API Key |
| Field | Type | Description |
|---|---|---|
code | number | Result code; 200 means success |
message | string | Human-readable status message |
userNo | string | User identifier |
credits | number | Currently available credits |
| code | Meaning | Description |
|---|---|---|
-100 | Authentication or quota failure | Typical causes: userNo · API Key · credits |
-500 | Internal error | Typical causes: server · retry |
| Field | Required | Description |
|---|---|---|
userNo | Yes | 550W userNo |
apiKey | Yes | API Key |
Idempotency-Key | Recommended | ≤ 128 · retry-safe |
callbackUrl | No | HTTPS webhook · final status |
| Field | Type | Description |
|---|---|---|
videoUrl | string | HTTP(S) URL · ≤ 2048 chars |
width | number | px · max edge ≤ 1920 · min edge ≤ 1080 |
height | number | px · max edge ≤ 1920 · min edge ≤ 1080 |
duration | number | 1–1800 s |
x1 | number | top-left X · px · ≥ 0 |
y1 | number | top-left Y · px · ≥ 0 |
x2 | number | bottom-right X · px · > x1 |
y2 | number | bottom-right Y · px · > y1 |
mode | string | normal (default) · protect |
removeAudio | boolean | true · false (default) |
Responses contain code and message. Tasks progress through waiting, processing, and success or failed. On success, use resultUrl; on failure, inspect failCode. Result files expire.
{ "code": 200, "message": "success", "taskId": "...", "status": "waiting" }| Code | Meaning | Typical causes |
|---|---|---|
200 | Success | message: "success" |
-100 | Authentication or quota failure | userNo · API Key · credits |
-200 | Invalid parameter | field · URL · size · duration · Idempotency-Key |
-300 | Request rejected | taskId · ownership · state |
-401 | Temporary account suspension | First effective violation: 1 hour. Second: 24 hours. Hits during an active suspension do not count, extend, or escalate it. |
-402 | Permanent account ban | The third effective violation permanently bans the account. |
-500 | Internal error | server · retry |
-600 | Unsupported video format | codec · bit depth · HDR · audio |
failCode is a string identifier, not the numeric code. It appears only when a task fails. Use failCode to determine the cause; do not parse the translated failReason message.
| failCode | Meaning |
|---|---|
VIDEO_UNREACHABLE | The video URL is not publicly accessible |
VIDEO_METADATA_UNAVAILABLE | Could not obtain reliable video metadata. |
VIDEO_RESOLUTION_UNSUPPORTED | The measured video resolution exceeds the supported range |
VIDEO_DURATION_UNSUPPORTED | The measured video duration exceeds 30 minutes |
VIDEO_CODEC_UNSUPPORTED | The video codec is not supported |
VIDEO_BIT_DEPTH_UNSUPPORTED | The video bit depth is not supported |
VIDEO_HDR_UNSUPPORTED | HDR, PQ, or HLG is not supported |
VIDEO_AUDIO_UNSUPPORTED | The audio codec is not supported |
VIDEO_CONTAINER_UNSUPPORTED | The video container format is not supported |
VIDEO_PREPARE_FAILED | Video preparation, validation, or audio removal failed |
/open/submitTask// JavaScript
const form = new URLSearchParams({
userNo: USER_NO, apiKey: API_KEY, videoUrl: VIDEO_URL,
width: '1920', height: '1080', duration: '30',
x1: '0', y1: '0', x2: '1920', y2: '200'
});
const response = await fetch('https://www.550wai.cn/open/submitTask', {
method: 'POST',
body: form,
});
# Python
import requests
r = requests.post('https://www.550wai.cn/open/submitTask', data={
'userNo': USER_NO, 'apiKey': API_KEY, 'videoUrl': VIDEO_URL,
'width': 1920, 'height': 1080, 'duration': 30,
'x1': 0, 'y1': 0, 'x2': 1920, 'y2': 200
})/open/removeImageWatermark// JavaScript
const imageFile = document.querySelector('#image-file').files[0];
const imageForm = new FormData();
imageForm.append('userNo', USER_NO);
imageForm.append('apiKey', API_KEY);
imageForm.append('file', imageFile);
imageForm.append('sync', 'true');
const imageResponse = await fetch(
'https://www.550wai.cn/open/removeImageWatermark',
{ method: 'POST', body: imageForm }
);
# Python
import requests
IMAGE_FILE_PATH = '/path/to/image-file'
with open(IMAGE_FILE_PATH, 'rb') as image:
r = requests.post(
'https://www.550wai.cn/open/removeImageWatermark',
data={'userNo': USER_NO, 'apiKey': API_KEY, 'sync': 'true'},
files={'file': image}
)Video subtitle removal is charged by processing duration and resolution. Images cost 10 credits per successful task; failed processing is not charged.
| Video resolution | Rate | Example |
|---|---|---|
| width × height ≤ 921,600 · 720p or below | 1.3 Credits / s | 1280×720 · 30 s ≈ 39 Credits |
| width × height > 921,600 · Up to 1080p | 1.6 Credits / s | 1920×1080 · 30 s ≈ 48 Credits |
Task queries only return the authenticated user’s data.
Handle errors using code, message, status, failCode and refundStatus.
Video subtitle removal is charged by processing duration and resolution. Images cost 10 credits per successful task; failed processing is not charged.
Pricing →