Seedance 2.5 is live — 30-second cinematic video with native audio & real-person references
Seedance-2.5-API Schnelleinstieg: Deine erste Videoanfrage
2026/09/12

Seedance-2.5-API Schnelleinstieg: Deine erste Videoanfrage

Starte mit der Seedance 2.5 API: API-Key, cURL-Anfrage und Python-Polling. Prüfe Eingabemodi, Frame-Verkettung und die Kosten deiner ersten Generierung.

Um die Seedance-2.5-API auf reAPI aufzurufen, erstelle einen API-Schlüssel, sende eine Anfrage an /api/v1/videos/generations mit model: "doubao-seedance-2.5-face", und rufe dann die zurückgegebene id ab. Die abgeschlossene Aufgabe enthält eine Video-URL. Du verwendest dieselbe Modell-ID für Text-, Bild-, First/Last-Frame- und multimodale Referenzanfragen.[1]

Beginne mit einer viersekündigen Textanfrage, damit es keine hochgeladenen Dateien zur Diagnose gibt. Zum 12. September liegt der Tarif bei $0,118589 pro Sekunde für 480p ohne Referenzvideo, also kostet diese Anfrage 475 Credits oder $0,475 nach Aufrundung auf ganze Credits. Die Seedance-2.5-Modellseite zeigt die aktuelle Tariftabelle und einen Playground zum Überprüfen derselben Einstellungen.[2]

Zusammenfassung

  • Erstelle einen Bearer-Schlüssel in API Keys und sende model: "doubao-seedance-2.5-face". Der Seiten-Slug seedance-2-5 ist nicht die Modell-ID der Anfrage.[1]
  • Sende einmal, speichere die Antwort id und rufe /api/v1/tasks/{id} ab. Ein erfolgreicher POST startet eine Aufgabe; das bedeutet nicht, dass das Video bereit ist.[1]
  • Wähle duration von 4–30 Sekunden und resolution aus 480p, 720p oder 1080p. Verwende eine feste Dauer für eine vorhersagbare anfängliche Reserve.[1]
  • Stelle size: "adaptive" für explizite First/Last-Frame-Eingaben ein. Das Seitenverhältnis der Ausgabe folgt der Frame-Form.[1]
  • Eine zehn Sekunden lange 720p-Anfrage ohne Referenzvideo kostet 2.669 Credits oder $2,669 zum Tarif vom 12. September. Die Rechnungstellung für Referenzvideos berücksichtigt mehr als nur die Ausgabesekunden.[1][2]

Erstelle einen Seedance-2.5-API-Schlüssel und bereite eine Anfrage vor

Melde dich bei reAPI an, öffne API Keys und erstelle einen Schlüssel für den Workspace, der die Generierung bezahlt. Kopiere ihn in eine lokale Umgebungsvariable mit dem Namen REAPI_API_KEY. Halte den Schlüssel aus Browser-JavaScript, öffentlichen Repositories und Screenshots fern. Anfragen authentifizieren sich über den Authorization: Bearer ...-Header; der dokumentierte Workflow erfordert keinen separaten Project-Header.[1]

Du benötigst auch genug Credits für die anfängliche Reserve der Anfrage. Werbe-Credits, wenn sie für ein berechtigtes Konto angeboten werden, sind getrennt davon, ob ein bestimmtes Video vollständig finanziert werden kann. Lese den Betrag in deinem Konto. Dieses Lernprogramm setzt ein finanziertes Konto voraus und verspricht keine kostenlose Generierung.[2]

Halte die erste Payload klein. Ein Prompt, feste Dauer, Seitenverhältnis und Auflösung reichen für eine Textanfrage. Füge Bilder oder Sound hinzu, nachdem der Pfad für die Übermittlung und das Polling funktioniert. Das macht einen fehlgeschlagenen ersten Versuch leichter zu diagnostizieren: er kann nicht durch eine nicht erreichbare Referenz-URL oder eine inkompatible Quelldatei verursacht werden.

Sende die erste cURL-Anfrage und speichere ihre Aufgaben-ID

Sende diese Anfrage, nachdem du REAPI_API_KEY bereits in deiner Shell gesetzt hast:

curl --fail-with-body https://reapi.ai/api/v1/videos/generations \
  -H "Authorization: Bearer $REAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.5-face",
    "prompt": "A matte cobalt ceramic mug stands on an ivory turntable. One continuous studio shot. Over four seconds the turntable rotates clockwise by about 45 degrees. The camera stays fixed at mug height. Keep the handle, rim and glaze consistent. Soft side light, plain background, no text or logos.",
    "duration": 4,
    "size": "16:9",
    "resolution": "480p",
    "generate_audio": false,
    "return_last_frame": true
  }'

Speichere die id der Antwort, bevor du etwas anderes tust. Dieser Bezeichner gehört zu dieser Generierung und ist der Wert, den du für nachfolgende GET-Anfragen verwendest. Ersetze ihn nicht durch die Modell-ID, eine Datei-URL oder einen erratenen Bezeichner. Die Antwort enthält auch einen Task-Status; die Video-URLs werden angezeigt, wenn die Aufgabe abgeschlossen ist.[1]

Die Beispielanfrage fordert zusätzlich zum Video ein Last-Frame-Bild an. Du kannst dieses Bild für einen eigenständigen Clip ignorieren oder später beim Verketten von Szenen verwenden. Derselbe Prompt und dieselben Einstellungen sind in unserer getesteten Prompt-Bibliothek enthalten, wo du die generierte Version überprüfen kannst, statt die Formulierung als Qualitätsgarantie zu verstehen.

Sende ab und rufe eine Seedance-2.5-API-Aufgabe in Python ab

Das Python-Beispiel unten ist eine Alternative zum cURL-Beispiel: Es erstellt eine neue Video-Aufgabe und ruft diese Aufgabe ab. Wähle eine Absendemethode für deinen ersten Test. Das Ausführen beider Beispiele erstellt zwei bezahlte Generierungen.

Das Skript wartet lokal bis zu 30 Minuten. Dieses Timeout ist eine beispielhafte Einstellung des Clients, keine zugesicherte Generierungszeit. Es meldet einen HTTP-Fehler statt stumm einen anderen Job zu starten. Installiere requests und setze REAPI_API_KEY, bevor du es ausführst.

import os
import time
import requests

BASE = "https://reapi.ai/api/v1"
headers = {"Authorization": f"Bearer {os.environ['REAPI_API_KEY']}"}
payload = {
    "model": "doubao-seedance-2.5-face",
    "prompt": "A ceramic mug on a table. Locked camera, soft daylight.",
    "duration": 4,
    "resolution": "480p",
    "size": "16:9",
    "generate_audio": False,
}

submitted = requests.post(
    f"{BASE}/videos/generations",
    headers=headers,
    json=payload,
    timeout=120,
)
submitted.raise_for_status()
task_id = submitted.json()["id"]
print("Save this task id:", task_id, flush=True)

deadline = time.monotonic() + 30 * 60
while time.monotonic() < deadline:
    response = requests.get(
        f"{BASE}/tasks/{task_id}", headers=headers, timeout=60
    )
    if response.status_code in (429, 500, 502, 503, 504):
        time.sleep(10)
        continue
    response.raise_for_status()
    task = response.json()
    if task["status"] == "completed":
        for url in task["output"]["video_urls"]:
            print(url)
        break
    if task["status"] == "failed":
        raise RuntimeError(task.get("error"))
    time.sleep(10)
else:
    raise TimeoutError(f"Resume polling existing task {task_id}")

Polling verbraucht keine Generierungs-Credits. Wenn der lokale Prozess abläuft, behalte die gespeicherte ID und setze GET-Anfragen für diese Aufgabe fort. Ein lokales Timeout allein begründet nicht, dass die Remote-Generierung fehlgeschlagen ist. Wenn ähnlich eine POST-Verbindung bricht, bevor du eine Antwort erhältst, überprüfe deine Task-Historie, bevor du dieselbe Arbeit erneut einreichst.[1]

Für eine Service-Integration speichere die Aufgaben-ID sofort nach der Einreichung in deiner eigenen Datenbank. Die wichtige Unterscheidung liegt zwischen dem wiederholten Abrufen einer bestehenden Aufgabe und dem Erstellen einer neuen Aufgabe. Letzteres ist eine weitere Generierungsanfrage.

Wähle vier Input-Modi durch die Media-Felder

Die Medienfelder bestimmen die Art der Anfrage. Verwende diese Tabelle zusammen mit der vollständigen Seedance-2.5-API-Dokumentation.[1]

Beabsichtigte AnfrageZu sendende FelderZu beachtendes Element
Text zu VideopromptEine reine Textanfrage benötigt einen Prompt
Referenzbild zu Videoimage_urls plus Motion-PromptPublic Image-URLs; bis zu 30 Bilder
Explizites First oder First/Last Frameimage_with_rolesVerwende size: "adaptive"; ein Last Frame benötigt ein First Frame
Multimodale Referenzimage_urls, video_urls und/oder audio_urlsJeder Medientyp hat eigene Datei- und Dauer-Limits

Ersetze beispielsweise die Bildeingaben der reinen Text-Payload durch ein explizites First Frame:

{
  "image_with_roles": [
    {
      "url": "https://file.deepytb.com/landing/qwen-image-2/playground-input.webp",
      "role": "first_frame"
    }
  ],
  "size": "adaptive"
}

Dieser Block zeigt Felder, die du in eine vollständige Anfrage einfügst; er ist selbst kein vollständiger POST-Body. Ersetze das Sample durch ein Bild, das du verwenden darfst. Sende nicht beide image_urls und image_with_roles; sie schließen sich gegenseitig aus. Vermische auch nicht Frame-Rollen und reference_image-Rollen im selben Array.[1]

Für Video-Input muss ein Quellclip 2–30 Sekunden lang sein, mit höchstens zehn Clips und maximal 30 Sekunden insgesamt. Audio hat separate Limits von zehn Spuren und 30 Sekunden kombiniert. Mehr Dateien kontrollieren eine Anfrage nicht automatisch; weise jeder Referenz eine klare Rolle im Prompt zu.[1]

Verkette ein Last Frame, ohne perfekte Kontinuität anzunehmen

Setze return_last_frame: true in der ersten Anfrage. Wenn diese Aufgabe abgeschlossen ist, lies output.last_frame_url und platziere diese URL in das image_with_roles-Array der nächsten Anfrage mit role: "first_frame". Verwende size: "adaptive" erneut.[1]

Trage die relevante Beschreibung des Subjekts, der Kleidung, der Umgebung und der beabsichtigten nächsten Aktion vor. Ein gemeinsames Grenzbild gibt dem nächsten Shot einen visuellen Ausgangspunkt; es garantiert nicht, dass spätere Frames jedes Detail bewahren. Überprüfe die Verbindung, besonders bewegliche Hände, Blickrichtung und Hintergrundobjekte, bevor du das Paar als eine Sequenz verwendest.

Video-Bearbeitung ist eine andere Anfrage-Form. Ein explizites omni_reference_task_type: "edit" erfordert Quellvideo, adaptive Größe und automatische Dauer. Es ist nicht die richtige Einstellung für eine neue Szene, die nur ein Foto als Richtlinie verwendet. Halte die erste Integration auf einem einfachen Generierungspfad, dann füge Bearbeitung hinzu, wenn du einen bestehenden Clip ändern musst.[1]

Berechne die Anfrage-Kosten vor dem Hinzufügen von Quellvideo

Für Anfragen ohne Referenzvideo multipliziere den Preis pro Sekunde mit der Ausgabedauer, wandle Dollar in Credits um und runde auf einen ganzen Credit auf. Ein Credit ist $0,001.[1]

AnfrageTarif 12. SeptemberBerechnungZu zahlender Gesamtbetrag
4 Sekunden, 480p, kein Referenzvideo$0,118589/sceil(0.118589 × 4 × 1000)475 Credits / $0,475
10 Sekunden, 720p, kein Referenzvideo$0,266824/sceil(0.266824 × 10 × 1000)2.669 Credits / $2,669
10 Sekunden Output, 3 Sekunden Referenz, 720p$0,160094/sceil(0.160094 × 17 × 1000)2.722 Credits / $2,722

Die letzte Reihe rechnet 17 Sekunden ab, weil Video-Input-Anfragen das Größere von Output plus aufgerundeter Quelldauer und ceil(5 × output / 3) verwenden. Ein niedrigerer Referenzvideo-Tarif bedeutet daher nicht automatisch eine niedrigere Endgebühr. Bild- und Audio-Referenzen fügen keine Quellsekunden hinzu.[1][2]

Auto-Dauer, duration: -1, reserviert gegen die 30-Sekunden-Obergrenze und settelt sich später auf die bereitgestellte Länge. Verwende eine feste Dauer, wenn die Reserve klein bleiben soll. Für breitere Plattformvergleiche siehe den API-Preisleitfaden.

Halte API-Host-Anweisungen zusammen

Suchen nach Seedance 2.5 auf OpenRouter, fal oder GitHub können zu verschiedenen Clients und Service-Spezifikationen führen. Der Schlüssel, der Endpoint, die Modell-ID und die Task-Hülle dieses Lernprogramms gehören zusammen. Ein Repository, das einen anderen Service aufruft, ist kein direkter Ersatz für diese Anfrage.

Bevor du ein Sample anpasst, überprüfe seine Basis-URL, seinen Authentication-Header, akzeptierte Modellnamen, Input-Schema und Status-Endpoint. Verwende die Dokumentation für den Host, der die Anfrage tatsächlich erhält. Du benötigst keinen Third-Party-GitHub-Wrapper, um die cURL- und Python-Beispiele hier auszuführen; sie verwenden reAPIs dokumentierte HTTP-Schnittstelle.[1]

FAQ

Seedance-2.5-API-Schlüssel

Erstelle einen Schlüssel in reAPI API Keys und verwende ihn als Bearer-Token. Halte ihn auf deinem Server oder in deiner lokalen Umgebung mit ausreichend Workspace-Credits für die Anfrage.[1]

Seedance-2.5-API-Dokumentation

Die Modellreferenz dokumentiert akzeptierte Felder, Modi, Einschränkungen und Rechnungstellung. Verwende die Modellseite für aktuelle Preise pro Sekunde.[1][2]

Seedance-2.5-API-Lernprogramm

Sende eine Textanfrage mit fester Dauer ab, speichere deren id, frage dann den Status ab, bis die Aufgabe abgeschlossen oder fehlgeschlagen ist. Füge Referenzdateien nur hinzu, nachdem dieser Pfad funktioniert.[1]

Seedance-2.5-API auf GitHub

Ein GitHub-Client ist optional. Überprüfe, welchen Service er aufruft und ob seine Felder der aktuellen API-Dokumentation entsprechen, bevor du seine Beispiel-Payloads verwendest.[1]

Seedance-2.5-API-Zugang

reAPI stellt doubao-seedance-2.5-face über seinen asynchronen Video-Endpoint bereit. Der Website-Modell-Slug ist nicht der Modellwert zum Absenden.[1]

Seedance-2.5-API-Kosten

Eine viersekündige 480p-Anfrage ohne Quellvideo kostet $0,475 nach Aufrundung der Credits zum Tarif vom 12. September. Dauer, Auflösung und Referenzvideo-Rechnungstellung ändern den Gesamtbetrag.[1][2]

Beende eine Anfrage, bevor du den Workflow erweiterst

Behalte die erste erfolgreiche Payload und ihre Aufgaben-ID als Baseline deiner Seedance-2.5-API-Integration. Für die nächste Anfrage füge den Medientyp hinzu, den dein Shot benötigt, und überprüfe das zurückgegebene Video, bevor du Verkettung oder Bearbeitungen einführst.

Quellen

  1. reAPI. Seedance 2.5 API — Parameters, Modes & Billing. Browser-Abruf 12. September 2026. reapi.ai/docs/seedance-2-5.
  2. reAPI. Seedance 2.5 model page, rendered pricing table and FAQ. Browser-Abruf 12. September 2026. reapi.ai/models/seedance-2-5.