# Wan-2.2 Text-to-Video A14B API

> A14B 文生视频，输出 480p 到 720p，支持两阶段引导和可选插值

根据文本 `prompt` 生成视频。`num_frames` 范围为 17 到 161，`frames_per_second` 范围为 4 到 60，`resolution` 为 480p、580p 或 720p，宽高比为 16:9、9:16 或 1:1。支持两个引导值、`acceleration` 设置以及 film 或 rife 插值（默认插入一帧）。

- Model id: `wan/v2.2-a14b/text-to-video`
- Made by: Alibaba
- Category: Text to Video
- Output: video
- Price per second of your output video: from $0.04 / second of output video (cheapest run $0.04 (40 API credits))
- Run: `POST https://api.doitong.ru/v1/run/wan/v2.2-a14b/text-to-video`
- Quote: `POST https://api.doitong.ru/v1/quote/wan/v2.2-a14b/text-to-video`
- Docs page: https://doitong.com/zh/developers/models/wan/v2.2-a14b/text-to-video

## Pricing

Price: **from $0.04 / second of output video** (the lowest tier; the quote prices your exact input). Price per second of your output video: the input files are measured before the run (length, resolution, frame rate). The quote measures the same files and is exactly what the run charges.

Price by tier:

- 480p: $0.04 / second of output video
- 580p: $0.06 / second of output video
- 720p: $0.08 / second of output video

The full example input below costs $0.405 = 405 API credits (5.0625 s output video × $0.08 (720p)).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.ru/v1/quote/wan/v2.2-a14b/text-to-video` with the same JSON body returns the exact price for that input; the quote is exactly what a run charges. Invalid input is never charged and failed or canceled requests are refunded automatically.

## Input parameters

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `prompt` |  | string | yes |  |  | 指导视频生成的文本指令。 |
| `negative_prompt` |  | string | no | `` |  | 生成视频时应用的负面提示词。 |
| `num_frames` |  | integer | no | `81` | 17 – 161 | 生成所用的帧数，范围为 17–161（含边界）。 |
| `frames_per_second` |  | integer \| null | no | `16` | 4 – 60 | 生成视频的帧率，接受 4 到 60 的值；将 `adjust_fps_for_interpolation` 设置为 false 可保持该帧率不变。使用插帧且 `adjust_fps_for_interpolation` 为 true（其默认值）时，将此帧率乘以插入帧数加一，即可得到最终 FPS。例如，16 FPS 插入 1 帧后变为 32 FPS。 |
| `seed` |  | integer \| null | no |  |  | 使生成结果可复现的种子。设置为 None 时会随机选择种子。 |
| `resolution` |  | enum (string) | no | `720p` | `480p`, `580p`, `720p` | 输出视频分辨率：480p、580p 或 720p。 |
| `aspect_ratio` |  | enum (string) | no | `16:9` | `16:9`, `9:16`, `1:1` | 输出视频的宽高比，可以是 16:9 或 9:16。 |
| `num_inference_steps` |  | integer | no | `27` | 2 – 40 | 采样步数；步数越多，处理时间越长，质量越高。 |
| `enable_safety_checker` |  | boolean | no | `false` |  | 处理前的输入安全筛查，仅授权账户可以关闭。缺少授权的请求始终会被筛查；否则，true 会启用筛查。 |
| `enable_output_safety_checker` |  | boolean | no | `false` |  | 控制对生成视频的安全筛查；设置为 true 会在生成后执行检查。 |
| `enable_prompt_expansion` |  | boolean | no | `false` |  | 允许大语言模型使用细节丰富提示词。启用此扩展不会改变提示词的含义。 |
| `acceleration` |  | enum (string) | no | `regular` | `none`, `regular` | 加速设置，建议选择 'regular'。提高加速程度会牺牲质量以缩短生成时间。 |
| `guidance_scale` |  | number | no | `3.5` | 1 – 10 | 无分类器引导强度；比例越高，越倾向于匹配提示词，但可能损失质量。 |
| `guidance_scale_2` |  | number | no | `4` | 1 – 10 | 控制模型在第二阶段遵循提示词程度的引导比例。 |
| `shift` |  | number | no | `5` | 1 – 10 | 视频位移设置，允许范围为 1.0–10.0。 |
| `interpolator_model` |  | enum (string) | no | `film` | `none`, `film`, `rife` | 帧插值设置：选择 None 跳过插值，或指定执行插值的模型。 |
| `num_interpolated_frames` |  | integer | no | `1` | 0 – 4 | 在每两个生成帧之间的间隔中插入 0–4 个插值帧。 |
| `adjust_fps_for_interpolation` |  | boolean | no | `true` |  | 帧率调整开关：false 保持提供的 FPS，true 将其乘以插值帧数加一。因此，启用调整并插入 1 帧时，16 FPS 会变为 32 FPS。 |
| `video_quality` |  | enum (string) | no | `high` | `low`, `medium`, `high`, `maximum` | 输出视频质量设置；值越高，文件越大，画面效果越好。 |
| `video_write_mode` |  | enum (string) | no | `balanced` | `fast`, `balanced`, `small` | 视频写入模式。balanced 在速度和质量之间提供折中。选择 small 可获得最小文件和最慢写入速度；更快的写入会更早返回结果，但生成的文件更大。 |

## Example input

Required parameters only:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}
```

A fuller example:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}
```

## Run it

Set `DOITONG_API_KEY` to a key from https://doitong.com/developers/dashboard#keys. `?wait=20` returns the finished request in the same call when it is ready within 20 seconds; otherwise poll `GET /requests/{id}` (it also accepts `?wait=`), or pass `webhook_url`.

### curl

```bash
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.ru/v1/run/wan/v2.2-a14b/text-to-video?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  }'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.ru/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.ru/v1";
const headers = {
  "Authorization": "Bearer " + process.env.DOITONG_API_KEY,
  "Content-Type": "application/json",
};

// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/wan/v2.2-a14b/text-to-video?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  }),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);

// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
  res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
  request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
```

### Python

```python
import os
import requests

API = "https://api.doitong.ru/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/wan/v2.2-a14b/text-to-video", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
    raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])

# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
    request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
    raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
```

### MCP

The MCP server at `https://api.doitong.ru/v1/mcp` exposes the tools `search_models`, `get_model`, `quote`, `run`, `get_request`, `cancel_request`, `list_requests`, `create_upload` and `get_account`. A `run` call for this model:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "run",
    "arguments": {
      "model_id": "wan/v2.2-a14b/text-to-video",
      "input": {
        "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
      },
      "wait_seconds": 20
    }
  }
}
```

## Response

Every call returns a request object. `status` is one of `queued`, `running`, `succeeded`, `failed`, `canceled`. `outputs` lists the generated files with URLs on our storage (kept forever, or 7 days with `?storage=temporary`; `storage` says which); `output` is the model's own result object with the same URLs.

```json
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "object": "request",
  "model": "wan/v2.2-a14b/text-to-video",
  "status": "succeeded",
  "created_at": "2026-10-20T12:00:00Z",
  "started_at": "2026-10-20T12:00:02Z",
  "completed_at": "2026-10-20T12:00:09Z",
  "queue_position": null,
  "cost": {
    "credits": 405,
    "usd": "0.405",
    "charged": 405,
    "refunded": 0
  },
  "input": {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  },
  "output": {
    "video": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_name": "0-output.mp4",
      "file_size": 1843200
    },
    "prompt": "A close-up of a young woman smiling gently in the rain, raindrops glistening on her face and eyelashes. The video captures the delicate details of her expression and the water droplets, with soft light reflecting off her skin in the rainy atmosphere.",
    "seed": 42
  },
  "outputs": [
    {
      "type": "video",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_size": 1843200,
      "width": 1280,
      "height": 720,
      "duration": 5,
      "stored": true
    }
  ],
  "error": null,
  "metrics": {
    "inference_seconds": 6.8
  },
  "urls": {
    "self": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `video` | object {url, content_type, file_name, file_size} | 生成得到的视频文件。 |
| `prompt` | string | 用于生成视频的文本提示词。 |
| `seed` | integer | 生成期间应用的种子值。 |

## Related models

- [Wan · v2.2 A14b · Text to Image](https://doitong.com/developers/models/wan/v2.2-a14b/text-to-image.md) (`wan/v2.2-a14b/text-to-image`): $0.025 / image
- [Wan v2.2 A14B](https://doitong.com/developers/models/wan/v2.2-a14b/image-to-video.md) (`wan/v2.2-a14b/image-to-video`): from $0.04 / second of output video
- [Wan · v2.2 A14b · Video to Video](https://doitong.com/developers/models/wan/v2.2-a14b/video-to-video.md) (`wan/v2.2-a14b/video-to-video`): from $0.04 / second of output video
- [Wan-2.2 Speech-to-Video 14B](https://doitong.com/developers/models/wan/v2.2-14b/speech-to-video.md) (`wan/v2.2-14b/speech-to-video`): from $0.10 / second of output video
- [Wan 3.0 Text to Video](https://doitong.com/developers/models/alibaba/wan-3.0/text-to-video.md) (`alibaba/wan-3.0/text-to-video`): from $0.05 / second
- [FLUX 3 Max Text to Video](https://doitong.com/developers/models/blackforestlabs/flux-3-max/text-to-video.md) (`blackforestlabs/flux-3-max/text-to-video`): from $0.0425 / second of output video
- [Grok Imagine Video 1.5 Text to Video](https://doitong.com/developers/models/xai/grok-imagine-video/v1.5/text-to-video.md) (`xai/grok-imagine-video/v1.5/text-to-video`): from $0.08 / second
- [Kling 3.0 Pro Text to Video](https://doitong.com/developers/models/kling-video/v3/pro/text-to-video.md) (`kling-video/v3/pro/text-to-video`): from $0.112 / second

## Links

- HTML page: https://doitong.com/developers/models/wan/v2.2-a14b/text-to-video
- All models and guides for AI agents: https://doitong.com/developers/llms.txt
- OpenAPI 3.1 with this model's typed request body: https://doitong.com/developers/openapi.json?model=wan/v2.2-a14b/text-to-video
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/wan/v2.2-a14b/text-to-video
