# LTX 2.3 Video Pro · Audio to Video API

> 音声ファイルからクリップを作成するPro音声動画生成。任意で最初のフレーム画像を指定可能

音声ファイルに合わせた動画を生成します。`image_url`で開始画像を任意指定できます。画像を指定しない場合は`prompt`（最大5000文字）が必要です。音声は2～20秒で、Proモデルでは最大10秒です。`aspect_ratio`はauto、16:9、9:16から選択でき、`guidance_scale`は1～50です。

- Model id: `ltx-2.3/audio-to-video`
- Made by: Lightricks
- Category: Lipsync & Avatars
- Output: video
- Price per second of your input audio: $0.10 / second of input audio (cheapest run $0.10 (100 API credits))
- Run: `POST https://api.doitong.ru/v1/run/ltx-2.3/audio-to-video`
- Quote: `POST https://api.doitong.ru/v1/quote/ltx-2.3/audio-to-video`
- Docs page: https://doitong.com/ja/developers/models/ltx-2.3/audio-to-video

## Pricing

Price: **$0.10 / second of input audio**. Price per second of your input audio: 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.

The full example input below costs $1.00 = 1000 API credits (10 s input audio × $0.10).

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/ltx-2.3/audio-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 |
|---|---|---|---|---|---|---|
| `audio_url` | `audio` | string (audio URL) | yes |  |  | 動画生成のソースとなる音声ファイルURL。一般公開URLまたはbase64データURIを指定します。音声の長さは2–20秒で、proモデルでは最大10秒です。 |
| `image_url` | `image` | string (image URL) \| null | no |  |  | 開始フレーム画像のURL。省略するとプロンプトが必須になります。 |
| `prompt` |  | string \| null | no |  | 1 – 5000 characters | 動画の指示。`image_url`の有無で役割が変わり、画像がある場合はそのアニメーションを指定し、ない場合は生成する動画の説明が必須です。 |
| `guidance_scale` |  | number \| null | no |  | 1 – 50 | 動画生成におけるプロンプト準拠の強度。画像入力ではデフォルト 9、テキストから動画では 5 です。スケールを上げるとプロンプトにより近い結果になります。 |
| `aspect_ratio` |  | enum (string) | no | `auto` | `auto`, `16:9`, `9:16` | 動画のアスペクト比。'auto'では、入力画像がある場合は画像由来の比率を、ない場合は16:9を選択します。 |
| `enable_safety_checker` |  | boolean | no | `true` |  | 呼び出し元に権限がある場合、false に設定するとスクリーニングを緩和できます。 |

File parameters (`audio`, `image`) 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
{
  "audio": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
}
```

A fuller example:

```json
{
  "audio_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
}
```

## 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/ltx-2.3/audio-to-video?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "audio_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
  }'

# 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/ltx-2.3/audio-to-video?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "audio_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
  }),
});
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 = {
    "audio_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/ltx-2.3/audio-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": "ltx-2.3/audio-to-video",
      "input": {
        "audio_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
      },
      "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": "ltx-2.3/audio-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": 1000,
    "usd": "1.00",
    "charged": 1000,
    "refunded": 0
  },
  "input": {
    "audio_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
  },
  "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
    }
  },
  "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} | 生成された動画ファイル。 |

## Related models

- [LTX 2.3 Video Fast · Text to Video](https://doitong.com/developers/models/ltx-2.3/text-to-video/fast.md) (`ltx-2.3/text-to-video/fast`): from $0.06 / second
- [LTX Video 2.3 Pro · Text to Video](https://doitong.com/developers/models/ltx-2.3/text-to-video.md) (`ltx-2.3/text-to-video`): from $0.08 / second
- [LTX 2.3 Video Fast · Image to Video](https://doitong.com/developers/models/ltx-2.3/image-to-video/fast.md) (`ltx-2.3/image-to-video/fast`): from $0.06 / second
- [LTX 2.3 Video Pro · Image to Video](https://doitong.com/developers/models/ltx-2.3/image-to-video.md) (`ltx-2.3/image-to-video`): from $0.08 / second
- [Ltx 2.3](https://doitong.com/developers/models/ltx-2.3/reframe.md) (`ltx-2.3/reframe`): from $0.10 / second of input video
- [LTX Video 2.3 Pro · Extend Video](https://doitong.com/developers/models/ltx-2.3/extend-video.md) (`ltx-2.3/extend-video`): $0.10 / second
- [LTX Video 2.3 Pro · Retake Video](https://doitong.com/developers/models/ltx-2.3/retake-video.md) (`ltx-2.3/retake-video`): $0.10 / second
- [Kling AI Avatar 2.0 Pro](https://doitong.com/developers/models/kling-video/ai-avatar/v2/pro.md) (`kling-video/ai-avatar/v2/pro`): $0.115 / second of input audio

## Links

- HTML page: https://doitong.com/developers/models/ltx-2.3/audio-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=ltx-2.3/audio-to-video
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/ltx-2.3/audio-to-video
