# Kling 4.0 Reference to Video API

> יצירת סרטונים באורך 3–30 שניות ששומרים על המראה של עד 10 תמונות ייחוס, 5 סרטוני ייחוס ו-7 אלמנטים

יוצר וידאו מ־`prompt` של טקסט בתוספת תמונות ייחוס, סרטוני ייחוס ואלמנטים של דמויות או אובייקטים, שאליהם מתייחסים בהנחיה כ־@Image1, @Video1 או @Element1. המשך נע בין 3 ל־30 שניות (ברירת מחדל 5), עם פלט ב־720p או 1080p ויחסי תמונה auto, 16:9, 9:16, 1:1 או 21:9. השתמשו ב־`multi_prompt` להנחיות לכל שוט; במקרה כזה האורך הכולל הוא סכום משכי השוטים. המגבלות הן 10 תמונות, 5 סרטונים באורך 3-30s כל אחד ו־7 אלמנטים, שמתוכם עד 3 יכולים לכלול קול.

- Model id: `kling/v4/reference-to-video`
- Made by: Kling
- Category: Reference to Video
- Output: video
- Price per second of your output video: from $0.157 / second of output video (cheapest run $0.157 (157 API credits))
- Run: `POST https://api.doitong.com/v1/run/kling/v4/reference-to-video`
- Quote: `POST https://api.doitong.com/v1/quote/kling/v4/reference-to-video`
- Docs page: https://doitong.com/he/developers/models/kling/v4/reference-to-video

## Pricing

Price: **from $0.157 / 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:

- 720p: $0.157 / second of output video
- 1080p: $0.235 / second of output video

The full example input below costs $1.175 = 1175 API credits (5 s output video × $0.235 (1080p)).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.com/v1/quote/kling/v4/reference-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 \| null | no |  | ≤ 2500 characters | הוראות יצירה שממלאות את הדרישה לספק `prompt` או `multi_prompt`. כדי להתייחס לקלט שסופק, השתמשו ב-@Image1, ב-@Video1, ב-@Element1 וכן הלאה. |
| `multi_prompt` |  | array of object {prompt, duration} \| null | no |  | ≥ 1 items | הוראות יצירה שוט-אחר-שוט, כאשר כל הנחיה מגדירה שוט אחד שמשך הזמן שלו תורם לאורך הכולל של הווידאו. |
| `multi_prompt[].prompt` |  | string | yes |  | 1 – 512 characters | הוראות טקסט לשוט הנוכחי. |
| `multi_prompt[].duration` |  | integer | no | `5` | 1 – 30 | משך שוט יחיד, נמדד בשניות. |
| `duration` |  | integer | no | `5` | 3 – 30 | אורך הווידאו בשניות, מ-3 עד 30. |
| `start_image_url` | `image` | string (image URL) \| null | no |  |  | תמונת פריים ראשון אופציונלית הנכללת במגבלת תמונות הייחוס. גודל הקובץ המרבי הוא 30.0 MB; הרוחב והגובה חייבים להיות לפחות 300 px כל אחד, עם יחס גובה-רוחב בין 0.40 ל-2.50. |
| `image_urls` | `images` | array of image URL \| null | no |  | ≤ 10 items | תמונות ייחוס המקבלות התייחסות באמצעות @Image1, @Image2 וכן הלאה, עם עד 10 תמונות. כל קובץ מוגבל ל-30.0 MB, דורש לפחות 300 px בשתי המידות, וחייב להיות בעל יחס גובה-רוחב בין 0.40 ל-2.50. |
| `video_urls` | `videos` | array of video URL \| null | no |  | ≤ 5 items | עד 5 סרטוני ייחוס, המקבלים התייחסות באמצעות @Video1, @Video2 וכן הלאה; כל אחד נמשך 3–30 שניות (30.05 שניות לכל היותר), והמשך הכולל שלהם יחד עם סרטוני elements אינו יכול לעלות על 30 שניות. גודל כל קובץ לא יעלה על 300 MB, והרוחב והגובה חייבים להיות בטווח 700 px–4553 px. יחס הגובה-רוחב חייב להיות בין 0.40 ל-2.50, וקצב הפריימים בין 23.9 ל-60.05 FPS. |
| `elements` |  | array of object {frontal_image_url, reference_image_urls, video_url, voice_id} \| null | no |  | ≤ 7 items | אוסף של עד 7 דמויות או אובייקטים, שמתוכם לכל היותר 3 יכולים לכלול `voice_id` ולכל היותר 3 יכולים להשתמש בווידאו. הפנו ל-elements אלה כ-@Element1, @Element2 וכן הלאה. |
| `elements[].frontal_image_url` |  | string (image URL) \| null | no |  |  | תמונה חזיתית המציגה את התצוגה הראשית של ה-element. גודל הקובץ המרבי הוא 30.0 MB; שתי המידות חייבות להיות לפחות 300 px, ויחס הגובה-רוחב חייב להיות בין 0.40 ל-2.50. |
| `elements[].reference_image_urls` |  | array of image URL \| null | no |  | ≤ 3 items | תמונות משלימות המציגות זוויות שונות של ה-element, עם 1 עד 3 תצוגות. גודל כל קובץ לכל היותר 30.0 MB, שתי המידות חייבות להיות לפחות 300 px, ויחס הגובה-רוחב חייב להיות בין 0.40 ל-2.50. |
| `elements[].video_url` |  | string (video URL) \| null | no |  |  | ייצוג וידאו של element במקום תמונות, באורך 3–30 שניות (30.05 שניות לכל היותר). גודל הקובץ לא יעלה על 300 MB; הרוחב והגובה חייבים להיות בטווח 700–4553 px. יחסי הגובה-רוחב הנתמכים הם 0.40–2.50, בקצב פריימים של 23.9–60.05 FPS. |
| `elements[].voice_id` |  | string \| null | no |  |  | הקול שהוקצה ל-element. |
| `resolution` |  | enum (string) | no | `1080p` | `720p`, `1080p` | הרזולוציה של הפלט. |
| `aspect_ratio` |  | enum (string) | no | `16:9` | `auto`, `16:9`, `9:16`, `1:1`, `21:9` | פרופורציות הווידאו, שנבחרות במפורש או נגזרות מהייחוסים באמצעות בחירה ב-'auto'. |

File parameters (`image`, `images`, `videos`) 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
{}
```

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.com/v1/run/kling/v4/reference-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.com/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.com/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/kling/v4/reference-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.com/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/kling/v4/reference-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.com/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": "kling/v4/reference-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": "kling/v4/reference-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": 1175,
    "usd": "1.175",
    "charged": 1175,
    "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
    }
  },
  "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.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `video` | object {url, content_type, file_name, file_size} | וידאו שהופק על ידי המודל. |

## Related models

- [Kling 4.0 Text to Video](https://doitong.com/developers/models/kling/v4/text-to-video.md) (`kling/v4/text-to-video`): from $0.157 / second of output video
- [Seedance 2.0 Fast Reference to Video](https://doitong.com/developers/models/bytedance/seedance-2.0/fast/reference-to-video.md) (`bytedance/seedance-2.0/fast/reference-to-video`): from $0.113 / second
- [Seedance 2.0 Reference to Video](https://doitong.com/developers/models/bytedance/seedance-2.0/reference-to-video.md) (`bytedance/seedance-2.0/reference-to-video`): from $0.141 / second
- [Wan 3.0 Reference to Video](https://doitong.com/developers/models/alibaba/wan-3.0/reference-to-video.md) (`alibaba/wan-3.0/reference-to-video`): from $0.05 / second
- [Kling O1 Reference Image to Video \[Pro\]](https://doitong.com/developers/models/kling-video/o1/reference-to-video.md) (`kling-video/o1/reference-to-video`): $0.112 / second
- [Kling O1 Reference Image to Video \[Standard\]](https://doitong.com/developers/models/kling-video/o1/standard/reference-to-video.md) (`kling-video/o1/standard/reference-to-video`): $0.084 / second
- [Kling O3 Reference to Video \[Pro\]](https://doitong.com/developers/models/kling-video/o3/pro/reference-to-video.md) (`kling-video/o3/pro/reference-to-video`): from $0.112 / second
- [Kling O3 Reference to Video \[Standard\]](https://doitong.com/developers/models/kling-video/o3/standard/reference-to-video.md) (`kling-video/o3/standard/reference-to-video`): from $0.084 / second

## Links

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