概览
向指定任务提交取消申请。是否能够取消取决于当前处理阶段;最终结果以任务查询为准。
请求参数
task_id:必填 string 路径参数,值为创建响应的 id。无请求体,不传 model、resolution 等创建参数。
调用示例
Bash / macOS / Linux;Windows 可使用 Git Bash。
# 先按“鉴权与通用约定”设置环境变量
: "${MASS_API_KEY:?请先设置 MASS_API_KEY}"
: "${MASS_TASK_ID:?请先设置 MASS_TASK_ID}"
MASS_BASE_URL="${MASS_BASE_URL:-https://api.vizen.cc}"
curl --silent --show-error --fail-with-body --max-time 120 \
-X POST "${MASS_BASE_URL%/}/v1/tasks/${MASS_TASK_ID}/cancel" \
-H "Authorization: Bearer $MASS_API_KEY"Python 3.10+,仅使用标准库。保存为 example.py,运行 python example.py。
import json
import os
import urllib.error
import urllib.parse
import urllib.request
base_url = os.environ.get("MASS_BASE_URL", "https://api.vizen.cc").rstrip("/")
api_key = os.environ["MASS_API_KEY"]
task_id = urllib.parse.quote(os.environ["MASS_TASK_ID"], safe="")
path = "/v1/tasks/{task_id}/cancel".replace("{task_id}", task_id)
headers = {"Authorization": "Bearer " + api_key}
body = None
request = urllib.request.Request(
base_url + path, data=body, headers=headers, method="POST"
)
try:
with urllib.request.urlopen(request, timeout=120) as response:
result = json.load(response)
print(json.dumps(result, ensure_ascii=False, indent=2))
except urllib.error.HTTPError as error:
print("HTTP", error.code, error.read().decode("utf-8"))
raise SystemExit(1)
except urllib.error.URLError as error:
# 创建请求出现网络异常时,保留原幂等键;不要生成新键后盲目重试。
print("请求未能确认:", error.reason)
raise SystemExit(1)JDK 17+,仅使用标准库。保存为 UTF-8 的 Example.java;执行 javac -encoding UTF-8 Example.java,再执行 java Example。
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
public class Example {
static String requireEnv(String name) {
String value = System.getenv(name);
if (value == null || value.isBlank()) {
throw new IllegalArgumentException("请设置环境变量 " + name);
}
return value;
}
public static void main(String[] args) throws Exception {
String base = System.getenv().getOrDefault("MASS_BASE_URL", "https://api.vizen.cc");
base = base.replaceAll("/+$", "");
String taskId = URLEncoder.encode(requireEnv("MASS_TASK_ID"), StandardCharsets.UTF_8)
.replace("+", "%20");
String path = "/v1/tasks/{task_id}/cancel".replace("{task_id}", taskId);
HttpRequest request = HttpRequest.newBuilder(URI.create(base + path))
.timeout(Duration.ofSeconds(120))
.header("Authorization", "Bearer " + requireEnv("MASS_API_KEY"))
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpClient client = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(20)).build();
// 网络异常会抛出异常;重试创建请求时保留相同幂等键和参数。
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
System.out.println(response.body());
if (response.statusCode() >= 400) {
throw new IllegalStateException("HTTP " + response.statusCode());
}
}
}Go 1.20+,仅使用标准库。保存为 main.go,运行 go run main.go。
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"os"
"strings"
"time"
)
func requireEnv(name string) string {
value := os.Getenv(name)
if value == "" { panic("请设置环境变量 " + name) }
return value
}
func main() {
base := os.Getenv("MASS_BASE_URL")
if base == "" { base = "https://api.vizen.cc" }
base = strings.TrimRight(base, "/")
path := strings.ReplaceAll("/v1/tasks/{task_id}/cancel", "{task_id}", url.PathEscape(requireEnv("MASS_TASK_ID")))
req, err := http.NewRequest("POST", base + path, nil)
if err != nil { panic(err) }
req.Header.Set("Authorization", "Bearer " + requireEnv("MASS_API_KEY"))
client := &http.Client{Timeout: 120 * time.Second}
resp, err := client.Do(req)
// 网络异常不代表创建失败;重试时保留原幂等键和参数。
if err != nil { panic(err) }
defer resp.Body.Close()
data, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(string(data))
if resp.StatusCode >= 400 { panic(fmt.Sprintf("HTTP %d", resp.StatusCode)) }
}路径参数 task_id 为创建时返回的任务 ID,无需请求体。成功响应为 HTTP 202 和统一任务对象。仅在服务支持且当前阶段可取消时接受申请;cancelling 不代表已取消,继续查询直到 cancelled 或其他终态。Wan 仅支持取消尚未提交处理的任务。无法取消返回 409,按 error.code 处理;取消并不保证免除已经产生的费用。
取消申请响应
{
"id": "job_example",
"type": "video_generation",
"status": "cancelling",
"model": "seedance-2.5",
"resolution": "720p",
"output": null,
"error": null,
"created_at": "2026-09-15T03:58:00Z",
"updated_at": "2026-09-15T03:58:00Z",
"completed_at": null
}响应字段与统一任务对象相同。收到 202 后查询该任务;只有 cancelled 才表示已确认取消。
可取消阶段与错误
Wan 已提交处理的任务无法取消;不要将 HTTP 202 当作取消成功。
- 409 / cancellation_unavailable:当前阶段或服务不支持取消,继续查询原任务。
- 409 / task_busy:任务正在更新,稍后查询再判断是否重试取消。
- 404 / task_not_found:检查任务 ID 以及是否使用创建任务的同一把 Key。