# Wan 2.5 Text to Video API

> Wan 2.5 teavstta-video 480p rájes 1080p rádjái, 5 dahje 10 sekundda ja vejolaš jienagovva

Ráhkada video teavstta `prompt`a vuođul, gitta 1500 mearkka kiinná dahje eaŋgalasgillii. Aspektaráđđu sáhttá leat 16:9, 9:16 dahje 1:1, resolušuvdna 480p, 720p dahje 1080p, ja `duration` 5 dahje 10 sekundda. Eaktodáhtolaš `audio_url` bidjá duogášmusihka, mii ožojuvvo klippa guhkkodahkii. Doarjja prompt-viiddideami, `negative_prompt` ja `seed`.

- Model id: `wan-25-preview/text-to-video`
- Made by: Alibaba
- Category: Text to Video
- Output: video
- Price: from $0.05 / second (5 s ≈ $0.25) (cheapest run $0.25 (250 API credits))
- Run: `POST https://api.doitong.ru/v1/run/wan-25-preview/text-to-video`
- Quote: `POST https://api.doitong.ru/v1/quote/wan-25-preview/text-to-video`
- Docs page: https://doitong.com/se/developers/models/wan-25-preview/text-to-video

## Pricing

Price: **from $0.05 / second (5 s ≈ $0.25)** (the lowest tier; the quote prices your exact input). Billed per second of output (`duration`, default 10).

Price rules (the first rule that matches the input wins; a parameter you leave out counts as its default):

- When `resolution` = 720p: $0.10 (100 API credits) / second
- When `resolution` = 1080p: $0.15 (150 API credits) / second

The full example input below costs $0.75 = 750 API credits (5 s × 150 API credits).

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-25-preview/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

Send either the canonical name or the native field name (not both). Canonical names are the same across models.

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `prompt` |  | string | yes |  | ≥ 1 characters | Video ráhkadeami instrukšuvnnat, gitta 1500 mearkka rádjai, kiinna dahje eŋgelasgillii čállojuvvon. |
| `audio_url` | `audio` | string (audio URL) \| null | no |  |  | Duogášmusihkka almmolaččat olámuttus jietna URL:a bokte, WAV- dahje MP3-formáhtas, 3 gitta 30 s:a guhku ja eanemustá 15 MB. Válljejuvvon 5 dahje 10 sekunda mearrida giktima: liigijietna sihkkojuvvo, ja oanehis ráidalas guođđá video boađusin jietnahis. Ovdamearka: 3 sekunda jietna ja 5 sekunda video addá jiena vuosttaš 3 sekundii ja jietnahis 2 loahpalaš sekundii. |
| `aspect_ratio` |  | enum (string) | no | `16:9` | `16:9`, `9:16`, `1:1` | Boađusvideo govdodat/allodat-ratio. |
| `resolution` |  | enum (string) | no | `1080p` | `480p`, `720p`, `1080p` | Video resolušuvdna dásse. |
| `duration` |  | enum (string) | no | `5` | `5`, `10` | Boađusvideo guhkkodat, válljejuvvon 5 dahje 10 sekundan. |
| `negative_prompt` |  | string \| null | no |  |  | Negatiivvala bivdda mii meroštallá áibbas sisdoalu, gitta 500 mearkka rádjai. |
| `enable_prompt_expansion` |  | boolean | no | `true` |  | LLM-vuđot bivdda ođasmahttin, mii lonuha lasiheami boađusáiggi buoret bohtosiid vuostá oanehis bivddain. |
| `seed` |  | integer \| null | no |  |  | Sádji, mii dahká ráhkadeami reprodukšuvnnalažžan. None bidjan vállje sádji juhkosiid mielde. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Sihkarvuođakontrolla heivehus, man off-heivehus gáibida kontu autoriseren. Autoriserema haga dárkkistuvvo juohke jearaldat heivehusas beroškeahttá; true aktiveret dárkkisteaddji. |

File parameters (`audio`) take a public `https://` URL, a `data:` URI up to 10 MB, or the `file_url` of an upload from `POST /files`.

## 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-25-preview/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-25-preview/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-25-preview/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-25-preview/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-25-preview/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": 750,
    "usd": "0.75",
    "charged": 750,
    "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,
      "width": 1024,
      "height": 768,
      "fps": 1.0,
      "duration": 5,
      "num_frames": 1
    },
    "seed": 42,
    "actual_prompt": "The white dragon warrior stands still in a grand cathedral-like structure, its glowing golden eyes fixed forward. The camera slowly moves closer, focusing on the warrior's armored chest and face. It then begins to circle around the warrior, capturing the intricate details of the white scale armor with gold accents. The warrior maintains a strong, determined posture. Ambient sounds and soft choral tones fill the background, enhancing the majestic atmosphere. The camera continues its slow circular motion, emphasizing the warrior's heroic presence before ending with a close-up of the face."
  },
  "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, width, height, fps, duration, num_frames} | Boađusvideo-fiila. |
| `seed` | integer | Seed-árvu mii geavahuvvo ráhkadeami áigge. |
| `actual_prompt` | string \| null | Bivdda maid duođaid geavahit ođasmahttimis. |

## Related models

- [Wan 2.5 Text to Image](https://doitong.com/developers/models/wan-25-preview/text-to-image.md) (`wan-25-preview/text-to-image`): $0.05 / image
- [Wan 2.5 Image to Image](https://doitong.com/developers/models/wan-25-preview/image-to-image.md) (`wan-25-preview/image-to-image`): $0.05 / image
- [Wan 2.5 Image to Video](https://doitong.com/developers/models/wan-25-preview/image-to-video.md) (`wan-25-preview/image-to-video`): from $0.05 / second
- [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
- [LTX 2.5 Pro Text to Video](https://doitong.com/developers/models/lightricks/ltx-2.5/text-to-video/pro.md) (`lightricks/ltx-2.5/text-to-video/pro`): from $0.12 / second

## Links

- HTML page: https://doitong.com/developers/models/wan-25-preview/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-25-preview/text-to-video
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/wan-25-preview/text-to-video
