Seedance 2.5
Integrate
bytedance/seedance-2.5/draft/complete
# 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/bytedance/seedance-2.5/draft/complete?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"draft_id": "your-draft-id"
}'
# 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"
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/bytedance/seedance-2.5/draft/complete?wait=20", {
method: "POST",
headers,
body: JSON.stringify({
"draft_id": "your-draft-id"
}),
});
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 + ")");
import os
import requests
API = "https://api.doitong.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}
payload = {
"draft_id": "your-draft-id",
}
# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/bytedance/seedance-2.5/draft/complete", 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"])
# 1. Connect once (Claude Code; Cursor, VS Code, Claude Desktop: https://doitong.com/developers/docs/mcp)
claude mcp add --transport http doitong-models https://api.doitong.com/v1/mcp \
--header "Authorization: Bearer $DOITONG_API_KEY"
# 2. Your agent calls the "run" tool with:
{
"model_id": "bytedance/seedance-2.5/draft/complete",
"input": {
"draft_id": "your-draft-id"
}
}
Call the Seedance 2.5 model (bytedance/seedance-2.5/draft/complete) through the Doitong API. Docs for agents: https://doitong.com/developers/models/bytedance/seedance-2.5/draft/complete.md
POST https://api.doitong.com/v1/run/bytedance/seedance-2.5/draft/complete?wait=20
Authorization: Bearer $DOITONG_API_KEY
Content-Type: application/json
{
"draft_id": "your-draft-id"
}
If the response status is "queued" or "running", poll GET https://api.doitong.com/v1/requests/REQUEST_ID?wait=20 until it is "succeeded"; the files are in outputs[].url. POST https://api.doitong.com/v1/quote/bytedance/seedance-2.5/draft/complete with the same body returns the exact price before the run.
This request: ≈$9.15 9,150 API credits Run it on this page
Your new API key. It is shown only now and is already in the code and in the API key field below. Keep it secret: never put it in code that runs in a browser.
Made on Doitong
Public works made with Seedance 2.5 by the Doitong community. Reuse a prompt in one click.
Video
Use the input image as the base scene and visual appearance. Use the reference video strictly as a motion reference for the dog’s movement. The dog must move exactly like in the reference video: - same gait (trotting rhythm) - same speed and tempo - same head motion and body dynamics - same ear...
Video
First-person POV of a dog trotting forward along the path at a realistic, moderate speed (approximately 8 km/h). The camera is positioned low, at the natural height of the dog’s head. The motion follows a true trotting gait: steady, rhythmic, grounded movement with gentle vertical bounce and...
Video
Subject: Young woman with dark hair, pale skin, glowing green eyes. Context: Dark, shadowy room. Action: Slow subtle breathing, slight blink. Cold direct gaze at camera. Finger pressed to lips. Minimal movement. Style: Cinematic, hyperrealistic, mysterious, intense. Camera motion: Static shot, no...
Video
First-person POV of a dog running forward along the path at a realistic, moderate speed (approximately 10 km/h). The camera is positioned low, at the natural height of the dog’s head. The motion follows a true trotting gait: steady, rhythmic, grounded movement with gentle vertical bounce and...
Video
Очень медленный финальный наезд камеры. Пламя свечи на переднем плане горит ярче, создавая блики. Dialogue in this scene: Астролог: "Но в марте будет одна дата… когда решение изменит всё. Напишите в комментариях “Овен” — и я сделаю отдельный разбор." No background music.
Video
A close-up portrait of a striking cyberpunk woman with sleek dark hair partially wet and falling around her face. She’s wearing glossy, high-tech neon visor goggles with a vivid color gradient — bright yellow, orange, and pink reflecting glowing city lights. Her expression is confident and...
Video
Ultra-realistic scene featuring miniature construction workers in orange vests and hard hats, actively working on a giant [pizza]. The tiny workers are using small tools, cranes, and machines to [assemble]. The [pizza] is placed on a metal surface or kitchen countertop. Steam or particles rise...
Video
Two sandboarders racing down massive golden sand dunes, carving aggressively in wide S-curves, heading directly toward the camera in a low, dramatic angle. They are captured in mid-motion, kicking up thick trails of sand behind their boards. Both riders wear full protective sandboarding suits in...
Video
Алиса издает радостный, заливистый смех и весело дрыгает ножками в воздухе. Камера плавно уходит в затемнение через мягкий расфокус, оставляя ощущение тепла. На последних секундах в кадр попадает ладонь мамы, которая нежно гладит ребенка по голове, успокаивая суету. Завершающий аккорд видео...
Video
Папа судорожно разворачивает подгузник, случайно роняет его и быстро наклоняется, чтобы поднять, исчезая из кадра на секунду. Камера плавно переводит фокус от папы к лицу Алисы на переднем плане. Малышка издает тихий звук, похожий на вздох, сохраняя полное олимпийское спокойствие и глядя на суету...
Video
Родители забавно сталкиваются спинами на заднем плане, синхронно ойкают и продолжают свой безумный бег. Камера быстро отъезжает назад, открывая масштабный вид на всю комнату, полную движения. В самом центре кадра Алиса остается абсолютно неподвижной, создавая сильный визуальный контраст между...
Video
Алиса медленно и очень забавно поворачивает голову сначала влево, затем вправо, пытаясь осознать причину шума. Камера совершает круговое вращение вокруг ее головы на 90 градусов. Ее маленькая пухлая ручка тянется к объективу, пальцы медленно сжимаются и разжимаются. Атмосфера сцены передает милое...
Video
На заднем плане мама и папа комично проносятся из стороны в сторону, создавая эффект ускоренной суеты. Камера слегка покачивается, имитируя живой взгляд. Алиса медленно переводит взгляд с одного родителя на другого, ее брови слегка приподняты в забавном недоумении. Движения родителей подчеркнуто...
Video
Папа судорожно разворачивает подгузник, случайно роняет его и быстро наклоняется, чтобы поднять, исчезая из кадра на секунду. Камера плавно переводит фокус от папы к лицу Алисы на переднем плане. Малышка издает тихий звук, похожий на вздох, сохраняя полное олимпийское спокойствие и глядя на суету...
Video
Папа судорожно разворачивает подгузник, случайно роняет его и быстро наклоняется, чтобы поднять, исчезая из кадра на секунду. Камера плавно переводит фокус от папы к лицу Алисы на переднем плане. Малышка издает тихий звук, похожий на вздох, сохраняя полное олимпийское спокойствие и глядя на суету...
Video
На заднем плане мама и папа комично проносятся из стороны в сторону, создавая эффект ускоренной суеты. Камера слегка покачивается, имитируя живой взгляд. Алиса медленно переводит взгляд с одного родителя на другого, ее брови слегка приподняты в забавном недоумении. Движения родителей подчеркнуто...
Build a request
Controls are generated from the model schema. The code and the price update as you change them.
/run/bytedance/seedance-2.5/draft/complete?wait=20
quote → $9.15
# 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/bytedance/seedance-2.5/draft/complete?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"draft_id": "your-draft-id"
}'
# 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"
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/bytedance/seedance-2.5/draft/complete?wait=20", {
method: "POST",
headers,
body: JSON.stringify({
"draft_id": "your-draft-id"
}),
});
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 + ")");
import os
import requests
API = "https://api.doitong.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}
payload = {
"draft_id": "your-draft-id",
}
# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/bytedance/seedance-2.5/draft/complete", 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"])
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "run",
"arguments": {
"model_id": "bytedance/seedance-2.5/draft/complete",
"input": {
"draft_id": "your-draft-id"
},
"wait_seconds": 20
}
}
}
Run this request
Your key stays in this browser: it is sent only to the Doitong API and saved (localStorage) only if you tick Remember. Get an API key
About Seedance 2.5
Takes a `draft_id` from an earlier Seedance 2.5 draft run and renders the final video. The id stays valid for seven days and only for the original caller. Output is fixed at 1080p, and the codec can be auto, H264 or H265. It returns the video and seed.
Parameters
draft_idrequired
resolutionoptional
codecoptional
Output
{
"id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
"object": "request",
"model": "bytedance/seedance-2.5/draft/complete",
"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": 9150,
"usd": "9.15",
"charged": 9150,
"refunded": 0
},
"input": {
"draft_id": "your-draft-id"
},
"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
},
"seed": 42,
"draft_id": "string"
},
"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"
}
}
Fields of output
- video
- object {url, content_type, file_name, file_size}Video file produced by generation.
- seed
- integerSeed value applied during generation.
- draft_id
- string | nullDraft identifier for completion under the same account within seven days; the response contains null instead if draft mode is disabled.
More models: Video to Video
For AI agents: this page as Markdown is at https://doitong.com/developers/models/bytedance/seedance-2.5/draft/complete.md. All models and guides: https://doitong.com/developers/llms.txt