Greife über die vereinheitlichte TokenHub API auf die Videogenerierungsmodelle von ByteDance Seedance 2.0 zu. Unterstützt Text-zu-Video, Bild-zu-Video, Videobearbeitung, audiogesteuerte Generierung und mehr. Dieser Leitfaden führt dich durch den kompletten Integrationsprozess.
th-xxxxxxxxxxxx...)https://tokenhub.store/api/v1Alle Anfragen erfordern einen API Key im Header:
Authorization: Bearer th-your-api-keyPOST/videos/generationsErstellt eine Videogenerierungsaufgabe und gibt die Task-ID zurück
GET/videos/generations/{task_id}Fragt den Aufgabenstatus ab und gibt bei Erfolg die Video-URL zurück
| Model-ID | Eingabe | Preis | Beschreibung |
|---|---|---|---|
| doubao-seedance-2.0 | Keine Video-Eingabe | $6.970/1M (1080p $7.727) | Flaggschiff-model, höchste Qualität. 1080p unterstützt. |
| Mit Video-Eingabe | $4.242/1M (1080p $4.697) | Flaggschiff mit Video-Eingabe, kosteneffizient. | |
| doubao-seedance-2.0-fast | Keine Video-Eingabe | $5.606/1M | Schnelles model, schnellere Generierung. |
| Mit Video-Eingabe | $3.333/1M | Schnelles model mit Video-Eingabe, am günstigsten. |
Abrechnungsdetails:
Beispiel: doubao-seedance-2.0 ohne Video-Eingabe (≤720p), bei der Generierung eines 5-Sekunden-Videos mit ca. 1M Tokens → Kosten ≈ $6.970
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| model | string | Erforderlich | Model-ID, z. B. "doubao-seedance-2.0" |
| prompt | string | Erforderlich | Textbeschreibung des Videos. Englische Prompts liefern in der Regel bessere Ergebnisse |
| duration | number | Optional | Videodauer (Sek.), Bereich 4–15, Standard 5 |
| resolution | string | Optional | "480p", "720p" oder "1080p" (Standard 720p; 1080p nur für doubao-seedance-2.0) |
| aspect_ratio | string | Optional | Seitenverhältnis: "adaptive" (Standard), "16:9", "9:16", "1:1", usw. |
| image_url | string | Optional | URL des Referenzbilds (Bild-zu-Video) |
| image_urls | string[] | Optional | Array mit mehreren URL(s) von Referenzbildern |
| video_url | string | Optional | URL des Referenzvideos (Videobearbeitung / Video-zu-Video) |
| video_urls | string[] | Optional | Array mit mehreren URL(s) von Referenzvideos (max. 3) |
| video_durations | number[] | Optional | Array mit Dauern pro Video in Sekunden, z. B. [3, 5] |
| input_video_duration | number | Optional | Gesamtdauer des Eingabevideos in Sekunden (Alternative zu video_durations) |
| audio_url | string | Optional | URL der Referenz-Audio (Hintergrundmusik / SFX) |
| audio_urls | string[] | Optional | Array mit mehreren URL(s) von Referenz-Audios (max. 3) |
| generate_audio | boolean | Optional | Ob Audio generiert werden soll, Standard: true |
| watermark | boolean | Optional | Ob ein Wasserzeichen hinzugefügt werden soll, Standard: false |
| content | array | Optional | Array von Medien-Assets. Jedes Element: { type: "image_url", image_url: { url }, role }. Unterstützte Rollen: first_frame (max 1), last_frame (max 1), reference_image, reference_video, reference_audio |
Sie können Text, Bilder, Videos und Audio frei als Eingabe kombinieren. Beachten Sie die folgenden Einschränkungen:
Die grundlegendste Nutzung — beschreiben Sie eine Szene in Textform, um ein Video zu generieren.
curl -X POST https://tokenhub.store/api/v1/videos/generations \
-H "Authorization: Bearer th-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2.0",
"prompt": "A golden retriever running on a sunny beach, waves crashing in the background, cinematic slow motion, 4K quality",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"watermark": false
}'Antwort:
{
"id": "xxxxxx-task-id",
"object": "video.generation.task",
"model": "doubao-seedance-2.0",
"status": "queued",
"created": 1719900000
}Die Videogenerierung erfolgt asynchron — fragen Sie den Status ab, bis sie abgeschlossen ist.
# Poll task status using the task_id from creation response
curl https://tokenhub.store/api/v1/videos/generations/YOUR_TASK_ID \
-H "Authorization: Bearer th-your-api-key"Task läuft:
{
"id": "YOUR_TASK_ID",
"object": "video.generation.task",
"model": "doubao-seedance-2.0",
"status": "running",
"created": 1719900000
}Task abgeschlossen (Video-URL erhalten):
{
"id": "YOUR_TASK_ID",
"object": "video.generation.task",
"model": "doubao-seedance-2.0",
"status": "succeeded",
"created": 1719900000,
"data": [
{
"video_url": "https://tokenhub-data.tos-cn-hongkong.volces.com/user_sd_file/YOUR_TASK_ID.mp4",
"cover_image_url": "https://tokenhub-data.tos-cn-hongkong.volces.com/user_sd_file/YOUR_TASK_ID_cover.jpg"
}
],
"usage": {
"video_duration": 5
}
}import requests
import time
API_BASE = "https://tokenhub.store/api/v1"
API_KEY = "th-your-api-key"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# Step 1: Create video generation task
payload = {
"model": "doubao-seedance-2.0",
"prompt": "A majestic eagle soaring over snow-capped mountains, golden hour lighting, cinematic aerial shot",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"watermark": False
}
resp = requests.post(f"{API_BASE}/videos/generations", json=payload, headers=headers)
task = resp.json()
task_id = task["id"]
print(f"Task created: {task_id}, status: {task['status']}")
# Step 2: Poll for result
while True:
resp = requests.get(f"{API_BASE}/videos/generations/{task_id}", headers=headers)
result = resp.json()
status = result["status"]
print(f"Status: {status}")
if status == "succeeded":
video_url = result["data"][0]["video_url"]
duration = result["usage"]["video_duration"]
print(f"Video ready! Duration: {duration}s")
print(f"URL: {video_url}")
break
elif status == "failed":
print(f"Failed: {result.get('error', {}).get('message', 'Unknown error')}")
break
time.sleep(5)const API_BASE = "https://tokenhub.store/api/v1";
const API_KEY = "th-your-api-key";
const headers = {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json"
};
// Step 1: Create task
const createResp = await fetch(`${API_BASE}/videos/generations`, {
method: "POST",
headers,
body: JSON.stringify({
model: "doubao-seedance-2.0",
prompt: "A majestic eagle soaring over snow-capped mountains, cinematic aerial shot",
duration: 5,
resolution: "720p",
aspect_ratio: "16:9",
watermark: false,
}),
});
const task = await createResp.json();
console.log("Task created:", task.id);
// Step 2: Poll for result
const poll = async () => {
while (true) {
const resp = await fetch(`${API_BASE}/videos/generations/${task.id}`, { headers });
const result = await resp.json();
console.log("Status:", result.status);
if (result.status === "succeeded") {
console.log("Video URL:", result.data[0].video_url);
console.log("Duration:", result.usage.video_duration, "seconds");
return result;
}
if (result.status === "failed") {
console.error("Failed:", result.error?.message);
return result;
}
await new Promise(r => setTimeout(r, 5000));
}
};
await poll();import requests, time
API_BASE = "https://tokenhub.store/api/v1"
headers = {
"Authorization": "Bearer th-your-api-key",
"Content-Type": "application/json"
}
# Image-to-Video with a single reference image
payload = {
"model": "doubao-seedance-2.0",
"prompt": "The woman in the photo turns to face the camera and smiles warmly, her hair gently blowing in the wind",
"duration": 5,
"resolution": "720p",
"image_url": "https://your-bucket.com/portrait.jpg",
"watermark": False
}
resp = requests.post(f"{API_BASE}/videos/generations", json=payload, headers=headers)
task_id = resp.json()["id"]
print(f"Task: {task_id}")
# Poll for result
while True:
r = requests.get(f"{API_BASE}/videos/generations/{task_id}", headers=headers).json()
if r["status"] == "succeeded":
print(f"Done: {r['data'][0]['video_url']}")
break
elif r["status"] == "failed":
print(f"Error: {r.get('error', {}).get('message')}")
break
time.sleep(5)Wenn Ihr Eingabebild eine echte Person enthält, leitet TokenHub die Anfrage automatisch an ein Upstream weiter, das die Generierung mit echten Personen unterstützt. Keine Client-seitigen Änderungen erforderlich.
Wird automatisch ausgelöst, wenn der Upstream-Content-Filter eine echte Person im Eingabebild erkennt.
Die Request-Struktur ist identisch mit der normalen Image-to-Video-Anfrage — gleicher POST /v1/videos/generations-Body.
Das GET-Polling ist identisch — rufen Sie /v1/videos/generations/{id} mit der von POST zurückgegebenen ID auf, bis der Status succeeded oder failed ist. Die ID-Umschreibungen werden serverseitig gehandhabt; Sie sehen während der gesamten Lebensdauer der Anfrage immer dieselbe ID.
Wird mit Status 400 zurückgegeben, wenn für Ihr Konto kein Provider konfiguriert ist, der reale Personen unterstützt. Wenden Sie sich an Ihren Administrator, um einen unterstützten Provider zu aktivieren.
Wird über GET mit Status: failed zurückgegeben, wenn die Asset-Vorbereitung im Upstream länger als 5 Minuten dauert. Die Anfrage kann sicher erneut versucht werden.
Die pat-id ist für Ihren Client undurchsichtig - pollen Sie weiter, bis sich der Status ändert.
# POST
curl -X POST https://tokenhub.store/api/v1/videos/generations \
-H "Authorization: Bearer $TH_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2.0",
"prompt": "let her dance and spin",
"duration": 8,
"resolution": "480p",
"content": [
{ "type": "image_url", "image_url": { "url": "https://example.com/portrait.png" }, "role": "first_frame" }
]
}'
# → {"id":"pat-abc123","status":"queued"}
# GET (asset still uploading)
curl https://tokenhub.store/api/v1/videos/generations/pat-abc123 -H "Authorization: Bearer $TH_KEY"
# → {"id":"pat-abc123","status":"queued"}
# GET (upstream task running)
# → {"id":"pat-abc123","status":"running"}
# GET (complete — id stays pat-, video_url in data)
# → {"id":"pat-abc123","status":"succeeded","data":[{"video_url":"..."}]}Empfohlenes Format: [Subjekt] + [Aktion] + [Umgebung/Hintergrund] + [Kamera/Stil]
"A young woman walking through a cherry blossom garden, petals falling in slow motion, soft natural lighting, cinematic 35mm film look""Close-up of hands pouring latte art into a ceramic cup, steam rising, warm cafe ambiance, shallow depth of field""Aerial drone shot of a winding river through autumn forest, golden and red leaves, morning mist, 4K cinematic"Registriere dich bei TokenHub und nutze jetzt die Seedance 2.0 Video Generation API
© 2026 TokenHub · Powered by ByteDance Seedance 2.0 · support@tokenhub.store