Dreamina Seedance 2.0
Provider list prices: no platform markup, pay-as-you-go. These are official list prices. Logged-in customers may see effective prices including workspace discounts on /console/pricing.
Use Dreamina Seedance 2.0 in 30 seconds
Asynchronous job API: create a task and poll it, or hold the request open with Prefer: wait. POST /v1/videos
import time
import requests
BASE = "https://synthorai.io/v1"
HEADERS = {"Authorization": "Bearer sk-syn-..."}
# 1) create the video generation job (POST /v1/videos)
task = requests.post(
f"{BASE}/videos",
headers=HEADERS,
json={
"model": "dreamina-seedance-2-0-260128",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5,
},
).json()
# 2) poll the job until it reaches a terminal state
while task["status"] in ("queued", "in_progress"):
time.sleep(5)
task = requests.get(f"{BASE}/videos/{task['id']}", headers=HEADERS).json()
# 3) completed → signed video URL (valid ~24h — download and store it promptly)
if task["status"] == "completed":
print(task["data"][0]["url"])
else:
print(task["error"])const HEADERS = {
Authorization: "Bearer sk-syn-...",
"Content-Type": "application/json",
};
interface VideoTask {
id: string;
status: "queued" | "in_progress" | "completed" | "failed" | "cancelled";
data?: Array<{ url: string }>;
error?: { code: string; message: string };
}
// 1) create the video generation job (POST /v1/videos)
const created = await fetch("https://synthorai.io/v1/videos", {
method: "POST",
headers: HEADERS,
body: JSON.stringify({
model: "dreamina-seedance-2-0-260128",
prompt: "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
resolution: "720p",
duration: 5,
}),
});
let task = (await created.json()) as VideoTask;
// 2) poll the job until it reaches a terminal state
while (task.status === "queued" || task.status === "in_progress") {
await new Promise((r) => setTimeout(r, 5000));
const res = await fetch(`https://synthorai.io/v1/videos/${task.id}`, { headers: HEADERS });
task = (await res.json()) as VideoTask;
}
// 3) completed → signed video URL (valid ~24h — download and store it promptly)
if (task.status === "completed") console.log(task.data?.[0]?.url);
else console.error(task.error);# Create the job; "Prefer: wait" holds the request up to 60s and returns the
# completed task when generation finishes in time (else the queued task).
curl https://synthorai.io/v1/videos \
-H "Authorization: Bearer sk-syn-..." \
-H "Content-Type: application/json" \
-H "Prefer: wait=60" \
-d '{
"model": "dreamina-seedance-2-0-260128",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5
}'
# Still queued / in_progress? Poll until completed → data[0].url (valid ~24h).
curl https://synthorai.io/v1/videos/vid_9f2e8c1a4b7d \
-H "Authorization: Bearer sk-syn-..."package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"time"
)
const base = "https://synthorai.io/v1"
type videoTask struct {
ID string `json:"id"`
Status string `json:"status"`
Data []struct {
URL string `json:"url"`
} `json:"data"`
}
func call(method, url string, body []byte) (t videoTask) {
req, _ := http.NewRequest(method, url, bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer sk-syn-...")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
json.NewDecoder(resp.Body).Decode(&t)
return t
}
func main() {
// 1) create the video generation job (POST /v1/videos)
payload, _ := json.Marshal(map[string]any{
"model": "dreamina-seedance-2-0-260128",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5,
})
task := call("POST", base+"/videos", payload)
// 2) poll the job until it reaches a terminal state
for task.Status == "queued" || task.Status == "in_progress" {
time.Sleep(5 * time.Second)
task = call("GET", base+"/videos/"+task.ID, nil)
}
// 3) completed → signed video URL (valid ~24h — download and store promptly)
if task.Status == "completed" {
fmt.Println(task.Data[0].URL)
}
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
// JDK built-in HttpClient — no extra dependency needed.
HttpClient http = HttpClient.newHttpClient();
// 1) create the job; "Prefer: wait=60" holds the request up to 60s and
// returns the completed task when generation finishes in time
HttpRequest create = HttpRequest.newBuilder(URI.create("https://synthorai.io/v1/videos"))
.header("Authorization", "Bearer sk-syn-...")
.header("Content-Type", "application/json")
.header("Prefer", "wait=60")
.POST(HttpRequest.BodyPublishers.ofString("""
{"model": "dreamina-seedance-2-0-260128",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p", "duration": 5}"""))
.build();
String task = http.send(create, HttpResponse.BodyHandlers.ofString()).body();
System.out.println(task); // {"id":"vid_…","status":…} — completed → data[0].url
// 2) still queued / in_progress? Poll GET https://synthorai.io/v1/videos/{id} until the
// status turns completed, then download data[0].url (valid ~24h).About Dreamina Seedance 2.0
Dreamina Seedance 2.0 is ByteDance's flagship video generation model on BytePlus ModelArk, presented in the official catalog as the mainline video model with high-fidelity audio-visual synchronization, high motion quality, and emotional expression.
- It generates .mp4 clips of 4-15 seconds at 24 fps in resolutions from 480p up to 4K (10-bit encoding) across six aspect ratios, working from text prompts or from first-frame and first-and-last-frame images, with synchronized sound available via the generate_audio switch.
- The official series tutorial credits the 2.0 generation with restoring item details, timbres, effects, styles, and camera movements with high accuracy while keeping character features consistent, and lists multimodal reference, video editing, and video extension among the series' capabilities.
- Synthorai serves it through the asynchronous /v1/videos job API — create a task, then poll it (or hold the request open with Prefer: wait) until the signed video URL is ready.
Specs & limits
| Modalities | text + image → video |
| Features | vision |
| Notable | Flagship of ByteDance's Dreamina Seedance 2.0 series, the catalog's mainline video generation model with high-fidelity audio-visual synchronization; text-to-video + first-frame / first-and-last-frame image-to-video; 480p-4k output (10-bit encoding at 4k), 24 fps, 4-15 s, six aspect ratios, .mp4; generate_audio for sound-on output; the series also lists multimodal reference (image/video/audio), video editing and video extension; version date 260128 encoded in the model id. |
FAQ
Is the Dreamina Seedance 2.0 API free to try?
Yes: new accounts get 10 trial calls and up to $1 in free credit, no card required. That's enough to try Dreamina Seedance 2.0 against your real workload before adding a payment method.
What is Dreamina Seedance 2.0 best at?
High-fidelity audio-visual synchronization, plus 480p up to 4K output, 4-15 seconds and text, first-frame, and first/last-frame input. See the About section for the full picture from the vendor's own release notes.
How much does Dreamina Seedance 2.0 cost?
Dreamina Seedance 2.0 costs $7 per million video tokens on Synthorai (video tokens ≈ width × height × 24fps × seconds ÷ 1024). Only successful generations are billed: pay-as-you-go, no platform markup, no subscription.
How do I generate videos with the Dreamina Seedance 2.0 API?
POST to /v1/videos on Synthorai with model="dreamina-seedance-2-0-260128" to create an asynchronous job, then poll the task — or hold the request open with a Prefer: wait header — until the video URL is ready. No vendor SDK is needed.
How do I get access to Dreamina Seedance 2.0?
Point your existing OpenAI SDK at base_url="https://synthorai.io/v1", set model="dreamina-seedance-2-0-260128", and you're done. One API key covers every model on the gateway.