Direkt zur Dokumentation
Auf dieser Seite

Seedance 2.5

Generieren Sie Videos mit Seedance 2.5 mithilfe von Text, ersten und letzten Frames oder multimodalen Referenzen. Diese Seite beschreibt den gesamten Workflow von der Anfrage bis zum Ergebnis für dieses Modell.

API-Modell-ID: seedance-2-5

Die Generierung erfolgt asynchron. Speichern Sie die beim Erstellen des Tasks zurückgegebene taskId, um den Status abzufragen oder einen Webhook zu empfangen.

Funktionen

FeatureUnterstützte Werte
Ausgabeauflösung480p · 720p · 1080p
Ausgabedauer4–30 Sekunden
Seitenverhältnis16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
ReferenzbilderBis zu 30 Bilder
ReferenzvideosBis zu 10 Videos
ReferenzaudiodateienBis zu 10 Audiodateien
Alle Referenzen kombiniertInsgesamt bis zu 50 Referenzdateien
Gesamtdauer pro Video-/Audio-Gruppe30 Sekunden
seedNicht unterstützt
Akzeptiert im Reference-to-Video-Modus auch duration=-1; siehe Videobearbeitung und Preise weiter unten. image-to-video unterstützt nur adaptive; lassen Sie dieses Feld weg oder setzen Sie es auf adaptive.

Preise & Credits

Die Videogenerierung wird in Credits auf Basis der abrechenbaren Dauer in Sekunden abgerechnet. Ohne Video-Input entspricht die abrechenbare Dauer der Ausgabedauer; mit Video-Input umfasst sie zusätzlich die Dauer des Referenzvideos.

Entwürfe werden zu den oben genannten 480p-Tarifen abgerechnet (inklusive eventuellem Video-Input). Das Finale wird mit dem reinen 1080p-Ausgabetarif von 30 Credits/Sekunde berechnet; Video-Referenzen werden hierbei nicht erneut berechnet. Beispiel: Ein 5-sekündiger Entwurf ohne Video-Input kostet 50 Credits, das zugehörige Finale zusätzliche 150 Credits.

In der folgenden Tabelle sind die berechneten Credits pro Sekunde aufgeführt, nicht die Gesamtkosten eines Auftrags. Die Rate hängt vom Modell, der Ausgabeauflösung und der Frage ab, ob im Referenz-zu-Video-Modus Referenzvideos bereitgestellt werden. Die Formeln und Beispiele unter der Tabelle zeigen, wie sich die Gesamtkosten berechnen.

AusgabeauflösungOhne Video-InputMit Video-Input
480p10 Credits/Sekunde6 Credits/Sekunde
720p20 Credits/Sekunde12 Credits/Sekunde
1080p30 Credits/Sekunde20 Credits/Sekunde
  • Ohne Video-Input: Ausgabesekunden × Tarif ohne Video.
  • Mit Video-Input: (Ausgabesekunden + gemessene Referenzvideo-Sekunden) × Tarif mit Video. Der Server misst die Gesamtdauer des Referenzvideos und rundet sie vor der Abrechnung auf ganze Sekunden auf.
  • Reine Bild- oder Audioreferenzen nutzen den Tarif ohne Video. Der Tarif für Referenzvideos gilt nur im Reference-to-Video-Modus, wenn tatsächlich Videoreferenzen übergeben werden.

Abrechnungsbeispiele

5 Sekunden 720p Text-to-Video: 5 × 20 = 100 Credits.

5 Sekunden 720p Ausgabe mit einem 5-sekündigen Referenzvideo: (5 + 5) × 12 = 120 Credits.

Diese Credits werden bei der Erstellung des Tasks im Voraus abgezogen. Ist der Task erfolgreich, entspricht dieser Betrag der endgültigen Gebühr – es erfolgt keine nachträgliche Anpassung oder Teilrückerstattung basierend auf der tatsächlichen Ausgabelänge. Bei fehlgeschlagenen Tasks oder Zeitüberschreitungen (Timeout) wird der Betrag zurückerstattet.

Credits werden bei der Übermittlung reserviert und bei Erfolg abgebucht. Fehlgeschlagene Tasks oder Timeouts gehen in den Rückerstattungsprozess. Der Abrechnungsstatus refund_failed bedeutet, dass die Rückerstattung nicht abgeschlossen werden konnte; prüfen Sie die API-Protokolle oder kontaktieren Sie den Support.

Credit-Abrechnung bei duration=-1

Wenn die Dauer auf -1 festgelegt ist, ist die endgültige Videolänge nicht vordefiniert, sondern wird direkt vom Modell bestimmt.

In den meisten Fällen ist es ratsam, die tatsächlich benötigte Videolänge anstelle von -1 einzustellen. Wir empfehlen, den Wert -1 ausschließlich für die Videobearbeitung und nicht für andere Szenarien der Videogenerierung zu verwenden.

Referenz-InputsBerechnung der GebührBeispiel
Mit ReferenzvideosDie Dauer aller Referenzvideos wird addiert und auf die nächste ganze Sekunde aufgerundet (Wert T). Die Gebühr berechnet sich nach der Formel (T + T) × Tarif mit Video: Das erste T steht für die geschätzte Ausgabelänge, das zweite für die Dauer des Input-Videos.720p mit einem 5-sekündigen Referenzvideo: (5 + 5) × 12 = 120 Credits.
Ohne Referenzvideos (nur Bilder oder Audio)Als geschätzte Ausgabelänge werden pauschal 30 Sekunden veranschlagt. Die Gebühr beträgt somit 30 × Tarif ohne Video.720p ohne Referenzvideos: 30 × 20 = 600 Credits.

Authentifizierung

Erstellen Sie einen API-Key im Dashboard. Der vollständige Key wird nur einmal angezeigt. Speichern Sie ihn auf Ihrem Server und senden Sie ihn bei jeder Anfrage als Bearer-Token mit.

Basis-URL

https://api.seevio.ai
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json

Setzen Sie die Umgebungsvariable SEEVIO_API_KEY, bevor Sie diese Beispiele ausführen. JavaScript-Beispiele laufen mit Node.js auf Ihrem Server; Python-Beispiele nutzen das requests-Paket.

Schnellstart

Senden Sie diese minimale Anfrage, speichern Sie die zurückgegebene taskId und nutzen Sie das untenstehende Beispiel zur Task-Abfrage. Der Credits-Wert in der Erstellungsantwort entspricht dem reservierten Betrag.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }
}'

Beispiel für die Antwort beim Erstellen eines Tasks

Nach der Annahme der oben genannten Anfrage gibt die API diese JSON-Antwort zurück. taskId ist die Aufgabenkennung für nachfolgende Statusabfragen; credits ist die Anzahl der für diese Aufgabe reservierten Credits. Diese Antwort bestätigt lediglich die Erstellung der Aufgabe, nicht die Fertigstellung des Videos. Sie müssen den Status der Aufgabe abfragen (Polling) oder einen Webhook verwenden, um die Videoergebnisse zu erhalten.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 100
}

Task erstellen

POST https://api.seevio.ai/v1/videos/generations

Senden Sie ein JSON-Objekt mit model und input sowie einer optionalen callback_url. Geben Sie immer die auf dieser Seite gezeigte Modell-ID an; wird model weggelassen, wird standardmäßig seedance-2-0 gewählt.

Request-Body

FeldTypErforderlichBeschreibung & Einschränkungen
model
stringJa

Modell-ID. Um Seedance 2.5 zu verwenden, setzen Sie dieses Feld auf seedance-2-5.

callback_url
stringNein

Öffentlicher HTTPS-Endpunkt für POST-Callbacks bei Fertigstellung oder Fehlern. Private Netzwerke und localhost sind nicht erlaubt.

Beispiel: https://example.com/webhooks/seevio
input
objectJa

Generierungseinstellungen. Muss einen ausgefüllten Prompt enthalten.

Eingabeparameter

image_urls ist bei image-to-video erforderlich. reference-to-video erfordert mindestens eine Referenz unter image_urls, video_urls oder audio_urls.
Wenn draft_task_id angegeben ist, lassen Sie prompt, generation_type, image_urls, video_urls, audio_urls, duration, aspect_ratio, seed, generate_audio, web_search und omni_reference_task_type weg (selbst wenn die Werte mit dem Entwurf übereinstimmen). Diese Einstellungen werden vererbt. Kombinieren Sie draft=true nicht mit draft_task_id.

Geben Sie image_urls, video_urls und audio_urls als Arrays von URL-Strings (string[]) an. Jede angegebene URL muss öffentlich über HTTPS erreichbar sein – dies gilt auch für Medien, die im ausgewählten Modus ignoriert werden.

FeldTypErforderlichStandardBeschreibung & Einschränkungen
input.draft
booleanNeinfalse

Erstellt eine 480p-Entwurfsvorschau. Nur für Seedance 2.5 verfügbar. Schließt draft_task_id aus.

Unterstützte Werte
true | false
input.draft_task_id
stringNein—

Erstellt ein 1080p-Finale aus einem eigenen, abgeschlossenen API-Entwurf, der vor weniger als 7 Tagen erstellt wurde. Übergeben Sie die von dieser API zurückgegebene taskId und lassen Sie vererbte Generierungsfelder weg.

Beispiel: 3f2aK9mR7xQp4TnZ8bLc6YwH
input.output_format
stringNeinmp4

Ausgabe-Container für Videos. Unterstützt mp4 und mov (sowohl für Entwürfe als auch für Final-Anfragen).

Unterstützte Werte
mp4 | mov
input.prompt
stringBedingt—

Erforderlich für normale Generierungen und die Erstellung eines Entwurfs. Senden Sie dieses Feld nicht beim Erstellen eines Finales mittels draft_task_id; der Prompt des Entwurfs wird automatisch übernommen.

Beispiel: A cat surfing at sunset
input.generation_type
stringNeintext-to-video

text-to-video nutzt nur den Prompt; image-to-video nutzt 1–2 Bilder; reference-to-video nutzt Bild-, Video- und/oder Audioreferenzen.

Unterstützte Werte
text-to-video | image-to-video | reference-to-video
input.image_urls
string[]Bedingt[]

image-to-video: 1 Bild für den ersten Frame oder 2 sortierte Bilder für den ersten und letzten Frame. reference-to-video: bis zu 30 Bilder. Wird bei text-to-video ignoriert.

Beispiel: ["https://example.com/first-frame.jpg"]
input.video_urls
string[]Bedingt[]

Wird nur bei reference-to-video weitergeleitet; maximal 10 Videos und insgesamt 30 Sekunden. Wird in anderen Modi ignoriert.

Beispiel: ["https://example.com/source.mp4"]
input.audio_urls
string[]Bedingt[]

Wird nur bei reference-to-video weitergeleitet; maximal 10 Audiodateien und insgesamt 30 Sekunden. Wird in anderen Modi ignoriert.

Beispiel: ["https://example.com/music.mp3"]
input.duration
integerNein5

Ausgabedauer: 4–30 Sekunden, Standard ist 5. duration=-1 ist für Entwürfe und im Referenz-zu-Video-Modus zulässig. Lassen Sie duration für ein Finale weg; sie wird vom Entwurf vererbt.

Unterstützte Werte
-1 | 4–30
Beispiel: 5
input.aspect_ratio
stringNeinadaptive

Seitenverhältnis der Ausgabe. Bei adaptive bestimmt das Modell das Seitenverhältnis selbst. image-to-video unterstützt nur adaptive; lassen Sie dieses Feld weg oder setzen Sie es auf adaptive.

Unterstützte Werte
16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Beispiel: adaptive
input.resolution
stringNein720p

Normale Generierungen nutzen standardmäßig 720p. Entwürfe unterstützen ausschließlich 480p (Standard für Drafts). Final-Videos unterstützen ausschließlich 1080p (Standard für Finals).

Unterstützte Werte
480p | 720p | 1080p
Beispiel: 720p
input.generate_audio
booleanNeintrue

Synchronisierte Audiogenerierung anfordern.

Unterstützte Werte
true | false
Beispiel: true
input.watermark
booleanNeinfalse

KI-Wasserzeichen im generierten Video anfordern.

Unterstützte Werte
true | false
Beispiel: false
input.web_search
booleanNeinfalse

Websuche erlauben, sofern vom Modell unterstützt.

Unterstützte Werte
true | false
Beispiel: false
input.return_last_frame
booleanNeinfalse

Den letzten Frame anfordern. Das Abfrageergebnis enthält data.last_frame_url, sobald der Frame verfügbar ist; andernfalls ist der Wert null.

Unterstützte Werte
true | false
Beispiel: true

Boolesche Felder müssen als JSON-Werte true oder false übergeben werden, nicht als Strings oder Zahlen.

Antwort bei Erstellung

HTTP 200 gibt die taskId (String) und credits (Zahl) zurück. Dies bestätigt die Erstellung des Tasks, nicht dessen Fertigstellung. Der unten stehende Betrag entspricht dem 5-sekündigen 720p-Schnellstart.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 100
}

Entwurfsvorschau → 1080p-Finale

Seedance 2.5 unterstützt einen zweistufigen Workflow: Generieren Sie zuerst einen Entwurf (Draft) in 480p, um Bild und Bewegung zu prüfen, und nutzen Sie diesen anschließend, um das finale Video in 1080p zu erstellen. Beide Schritte nutzen POST /v1/videos/generations und erstellen separate, kostenpflichtige Tasks.

Der Draft-Modus hilft, die Kosten beim Ausprobieren verschiedener Ideen zu senken. Statt jeden Versuch direkt in 1080p zu generieren, können Sie mehrere kostengünstige 480p-Entwürfe erstellen, Ihren Favoriten auswählen und nur für diesen das hochauflösende 1080p-Finale rendern lassen. So testen Sie verschiedene Ergebnisse kosteneffizient.

Nutzen Sie einen abgeschlossenen Entwurf innerhalb von 7 Tagen nach Erstellung, um das Finale zu generieren. Der Entwurf muss zum selben API-Konto gehören. Verwenden Sie die von dieser API zurückgegebene taskId.

1. Einen 480p-Entwurf generieren

Setzen Sie input.draft=true und übergeben Sie wie gewohnt Prompt, Referenzen und Einstellungen. Die Auflösung ist im Draft-Modus standardmäßig 480p; andere Auflösungen werden abgewiesen. Sie können return_last_frame auch für den Entwurf aktivieren (wie unten gezeigt).

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "draft": true,
    "duration": 5,
    "resolution": "480p",
    "return_last_frame": true
  }
}'
{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 50
}

2. Auf Fertigstellung des Entwurfs warten

Speichern Sie die taskId aus der Erstellungsantwort und fragen Sie GET /v1/tasks/TASK_ID ab, bis status den Wert completed hat. Die Antwort enthält is_draft=true; eine Vorschau des Videos finden Sie in data.results. Der angeforderte letzte Frame ist, sofern verfügbar, unter data.last_frame_url zu finden.

Sie können auch einen Webhook empfangen, sobald der Entwurf fertiggestellt ist. Setzen Sie dazu die callback_url auf der obersten Ebene des Draft-Erstellungs-Requests. Nach Abschluss des Entwurfs wird eine Benachrichtigung an diese URL gesendet, sodass Ihr Dienst das Ergebnis direkt speichern, den Status aktualisieren oder Folgeschritte einleiten kann. Das Callback-Format finden Sie im Abschnitt 'Webhooks'.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": true,
  "draft_task_id": null,
  "status": "completed",
  "billing_status": "charged",
  "credits": 50,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": "https://cdn.seevio.ai/api/images/draft-last-frame.jpg",
    "processing_time": 48
  }
}

3. Das finale 1080p-Video generieren

Ersetzen Sie draft_task_id in diesem Beispiel durch die taskId Ihres abgeschlossenen Entwurfs. Das Finale übernimmt Inhalt und Dauer des Entwurfs. Die Auflösung ist standardmäßig 1080p; andere Auflösungen sind nicht zulässig. output_format, watermark und return_last_frame können für jedes Finale unabhängig konfiguriert werden; die callback_url verbleibt auf der obersten Ebene des Requests.

Wenn draft_task_id angegeben ist, lassen Sie prompt, generation_type, image_urls, video_urls, audio_urls, duration, aspect_ratio, seed, generate_audio, web_search und omni_reference_task_type weg (selbst wenn die Werte mit dem Entwurf übereinstimmen). Diese Einstellungen werden vererbt. Kombinieren Sie draft=true nicht mit draft_task_id.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "draft_task_id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
    "resolution": "1080p",
    "output_format": "mp4",
    "watermark": false,
    "return_last_frame": true
  }
}'

Die Antwort enthält eine neue taskId für das Finale. Fragen Sie diese neue ID ab oder warten Sie auf den Webhook. Die Antwort für das Finale enthält is_draft=false und setzt draft_task_id auf die API-Task-ID des ursprünglichen Entwurfs. Der Entwurf bleibt weiterhin verfügbar. Jede angenommene Final-Anfrage erstellt einen neuen, separat abgerechneten Task.

{
  "taskId": "final_7mQx2pN8kR4vT9cL6bW3",
  "credits": 150
}

Abrechnung von Entwurf und Finale

Entwürfe werden zu den oben genannten 480p-Tarifen abgerechnet (inklusive eventuellem Video-Input). Das Finale wird mit dem reinen 1080p-Ausgabetarif von 30 Credits/Sekunde berechnet; Video-Referenzen werden hierbei nicht erneut berechnet. Beispiel: Ein 5-sekündiger Entwurf ohne Video-Input kostet 50 Credits, das zugehörige Finale zusätzliche 150 Credits.

Bei duration=-1 reservieren Entwurf und finales Video jeweils Credits für bis zu 30 Sekunden Ausgabe. Referenzvideo-Eingaben werden nur beim Entwurf hinzugerechnet. Nach Abschluss wird die Gebühr an die tatsächliche Ausgabedauer angepasst, sofern diese ermittelt werden kann; nicht genutzte reservierte Credits werden erstattet. Ein finales Video reserviert bis zu 900 Credits.

Eine noch nicht abgeschlossene, abgelaufene oder unzugängliche Quelle sowie eine Quelle, die kein Entwurf ist, wird mit HTTP 400 (invalid_request) abgewiesen. Ungültige Auflösungen, mitgesendete vererbte Felder oder widersprüchliche Draft-Parameter führen ebenfalls zu HTTP 400. Unzureichendes Guthaben führt zu HTTP 402.

Generierungsmodi & Beispiele

Ersetzen Sie die Medien-URLs von example.com durch Ihre eigenen, öffentlich zugänglichen HTTPS-Dateien. Die Beispiel-URLs dienen nur zur Veranschaulichung der Request-Struktur und sind keine herunterladbaren Beispieldateien.

Text-to-Video

Aus einem Text-Prompt generieren. Medien-URLs werden in diesem Modus nicht weitergeleitet.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }
}'

Erster Frame

Geben Sie ein Bild als ersten Frame an und beschreiben Sie die Bewegung in Ihrem Prompt.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first-frame.jpg"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Erster und letzter Frame

Geben Sie zwei Bild-URLs in der richtigen Reihenfolge an: zuerst der erste, dann der letzte Frame. Dieses Beispiel fordert auch den letzten Frame des generierten Videos an.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first-frame.jpg",
      "https://example.com/last-frame.jpg"
    ],
    "aspect_ratio": "adaptive",
    "return_last_frame": true
  }
}'

Multimodale Referenz

Kombinieren Sie Bild-, Video- und Audioreferenzen. Der Prompt ist weiterhin erforderlich. Die Übergabe eines Referenzvideos ändert die Abrechnungsformel.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Follow the reference camera movement and keep the character consistent. Use the audio for ambience.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "image_urls": [
      "https://example.com/character.jpg"
    ],
    "video_urls": [
      "https://example.com/camera.mp4"
    ],
    "audio_urls": [
      "https://example.com/ambience.mp3"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Audio-Referenz

Nutzen Sie Audio als einzige Referenz, zusammen mit einem erforderlichen Text-Prompt, der das gewünschte Video beschreibt.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Create a coastal sunrise scene matching the rhythm of this audio.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "audio_urls": [
      "https://example.com/music.mp3"
    ]
  }
}'

Videobearbeitung

Für die Videobearbeitung mit Seedance 2.5 muss die Dauer auf -1 und das Seitenverhältnis auf „adaptive“ eingestellt sein. Beide Einstellungen sind zwingend erforderlich, da die Generierung andernfalls fehlschlägt.

Beschreiben Sie die gewünschte Bearbeitung und stellen Sie das Quellvideo bereit. Setzen Sie duration=-1 und verwenden Sie ein adaptives Seitenverhältnis. Nutzen Sie für diesen Workflow einen Quellclip von mindestens 4 Sekunden. Die Abrechnungsregel für duration=-1 finden Sie oben.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Edit the source video: change the character’s coat to blue and preserve the camera movement.",
    "duration": -1,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "video_urls": [
      "https://example.com/source.mp4"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Video-Erweiterung

Für die Seedance 2.5-Video-Erweiterung muss das Seitenverhältnis (aspect_ratio) auf „adaptive“ eingestellt sein, da die Erstellung andernfalls fehlschlagen kann. Stellen Sie die Dauer (duration) wie gewohnt auf die gewünschte Länge des Ausgabevideos innerhalb des unterstützten Bereichs ein. Der Wert -1 wird nicht benötigt.

Beschreiben Sie, wie das Quellvideo fortgesetzt werden soll. Nutzen Sie ein adaptives Seitenverhältnis und legen Sie eine normale Ausgabedauer innerhalb des Modellbereichs fest.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Continue the camera movement from the source video, revealing a forest clearing.",
    "duration": 8,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "video_urls": [
      "https://example.com/source.mp4"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Task abfragen

GET https://api.seevio.ai/v1/tasks/{taskId}

Ersetzen Sie die Beispiel-ID durch die bei der Erstellung zurückgegebene taskId. Abfragen liefern nur Tasks zurück, die dem User des API-Keys gehören; bei unzugänglichen oder unbekannten IDs wird HTTP 404 zurückgegeben.

Fragen Sie anfangs alle 10–20 Sekunden ab, drosseln Sie die Frequenz bei HTTP 429 und stoppen Sie, sobald der Status completed oder failed lautet. Nutzen Sie für die Produktion bevorzugt Webhooks. Jedes Codebeispiel unten führt eine einzelne Abfrage aus.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
StatusBeschreibung & Einschränkungen
queuedAkzeptiert und wartet auf die Verarbeitung.
generatingGenerierung läuft.
completedErfolgreich abgeschlossen. Laden Sie data.results vor dem Ablaufdatum herunter.
failedFehlgeschlagen. Prüfen Sie failed_reason und billing_status.
FeldTypBeschreibung & Einschränkungen
idstring
Task-ID. Entspricht der taskId aus der Erstellungsantwort.
created_atnumber
Erstellungszeitpunkt des Tasks als Unix-Zeitstempel (Sekunden).
modelstring
Die für diesen Task verwendete öffentliche Modell-ID.
is_draftboolean
True für einen 480p-Entwurf; false für ein Finale oder Standardvideo.
draft_task_idstring | null
Die API-Task-ID des Quell-Entwurfs bei einem Finale; null bei Entwürfen und Standardvideos.
billing_statusstring
reserved, charged, refunded oder refund_failed.
creditsnumber
Für diesen Task reservierte Credits. Dieser Wert bleibt auch nach einer Rückerstattung erhalten; prüfen Sie billing_status, um das genaue Abrechnungsergebnis zu sehen.
failed_reasonstring | null
Fehlerursache bei fehlgeschlagenen Tasks; andernfalls null. Fehlgeschlagene Abfrage-Antworten enthalten keine data.
dataobject
Vorhanden bei erfolgreich abgeschlossenen oder laufenden Tasks. Enthält die Ausgabe und Verarbeitungsdetails.
data.resultsstring[]
Array mit Video-URLs. Leer bis zur Fertigstellung oder nach Ablauf des Videos.
data.video_expires_atstring | null
Ablaufdatum des Videos als ISO 8601-Zeitstempel, oder null, solange es noch nicht verfügbar ist. Speichern Sie das Ergebnis vor diesem Zeitpunkt.
data.last_frame_urlstring | null
URL des letzten Frames, sofern angefordert und verfügbar, andernfalls null.
data.processing_timenumber | null
Verarbeitungsdauer des Anbieters in Sekunden, sofern verfügbar, andernfalls null.

Abgeschlossener Task: Abfrage-Antwort mit Video-Ergebnissen

Wenn die Abfrage status=completed zurückgibt, ist die Videogenerierung abgeschlossen. Rufen Sie die Video-URLs aus data.results ab und laden Sie diese vor data.video_expires_at herunter. billing_status=charged zeigt an, dass die reservierten Credits abgebucht wurden.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": false,
  "draft_task_id": null,
  "status": "completed",
  "billing_status": "charged",
  "credits": 100,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Fehlgeschlagener Task: Abfrage-Antwort mit Fehler- und Abrechnungsdetails

Wenn die Abfrage status=failed zurückgibt, wurde die Generierung erfolglos beendet. Unter failed_reason finden Sie die Ursache und unter billing_status das Erstattungsergebnis. In diesem Beispiel bedeutet refunded, dass die Credits zurückerstattet wurden. credits behält den ursprünglich reservierten Betrag bei, und die Antwort enthält keine data.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": false,
  "draft_task_id": null,
  "status": "failed",
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed"
}

Webhooks

Setzen Sie callback_url in der Erstellungsanfrage, um einen JSON-POST zu erhalten, sobald der Task abgeschlossen ist oder fehlschlägt. Antworten Sie innerhalb von 15 Sekunden mit einem 2xx-Statuscode. Fehlgeschlagene Zustellungen werden wiederholt; verarbeiten Sie doppelte Zustellungen idempotent anhand der Task-ID.

Ihr Callback-Endpunkt muss POST-Anfragen mit einem JSON-Body (Content-Type: application/json) akzeptieren.

Task mit Callback erstellen

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  },
  "callback_url": "https://example.com/webhooks/seevio"
}'

Task abgeschlossen: Payload für erfolgreichen Callback

Wenn die Generierung erfolgreich war, enthält der Callback status=completed. Verwenden Sie id zur Identifizierung des Tasks und data.results, um die Video-URLs abzurufen. Laden Sie die Ergebnisse vor data.video_expires_at herunter und speichern Sie diese.

created_at ist die Ereigniszeit, task_created_at die Erstellungszeit der Aufgabe, jeweils in Unix-Sekunden. Die Beispiele zeigen empfohlene Felder; Antworten können weitere Felder enthalten.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652848,
  "model": "seedance-2-5",
  "status": "completed",
  "task_created_at": 1788652800,
  "billing_status": "charged",
  "credits": 100,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Task fehlgeschlagen: Payload für fehlgeschlagenen Callback

Wenn die Generierung fehlschlägt, enthält der Callback status=failed. Verwenden Sie id zur Identifizierung des Tasks, failed_reason für die Fehlerursache und credits_refunded für die Anzahl der erstatteten Credits.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652848,
  "model": "seedance-2-5",
  "status": "failed",
  "task_created_at": 1788652800,
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed",
  "credits_refunded": 100
}

Empfänger-Beispiel

export async function POST(request: Request) {
  const callbackData = await request.json();

  if (callbackData.status === "completed") {
    const videoUrls = callbackData.data.results;
    // Save the video URLs and mark this task as completed in your application.
    console.log(callbackData.id, videoUrls);
  }

  if (callbackData.status === "failed") {
    const { failed_reason, credits_refunded } = callbackData;
    // Record the failure reason and refunded credits for this task.
    console.error(callbackData.id, failed_reason, credits_refunded);
  }

  return new Response(null, { status: 200 });
}

Dieses Next.js-Beispiel liest den JSON-Callback-Body aus und verarbeitet erfolgreiche sowie fehlgeschlagene Tasks direkt. Fügen Sie für Ihre eigene Anwendung Datenpersistenz und Task-ID-Deduplizierung hinzu. Stellen Sie zeitaufwendige Prozesse in eine Warteschlange, bevor Sie den Callback bestätigen.

Medienanforderungen & Einschränkungen

  • Alle Medien- und Callback-URLs müssen öffentliche HTTPS-URLs sein. Vermeiden Sie localhost, private IPs und Dateien, die Cookies oder Logins erfordern. Referenz-URLs für Video/Audio müssen direkt lesbare Mediendateien ausgeben.
  • Geben Sie bei reference-to-video mindestens eine Referenz an, mit maximal 30 Bildern, 10 Videos, 10 Audiodateien und insgesamt 50 Dateien. Die Gesamtdauer der Videos und der Audios darf jeweils maximal 30 Sekunden betragen.
  • text-to-video ignoriert alle Medienreferenzen. image-to-video übernimmt nur das erste/letzte Bild und ignoriert Video- und Audioreferenzen. Nutzen Sie reference-to-video, um verschiedene Medien zu kombinieren.
  • Jedes Referenzvideo und jede Audiodatei muss zwischen 2 und 30 Sekunden lang sein. Verwenden Sie für Videobearbeitungsbeispiele Quellclips von mindestens 4 Sekunden.

Anforderungen für Bilder

  • Die Dateigröße pro Bild darf maximal 30 MB betragen.
  • Unterstützte Formate: jpeg, png, webp, bmp, tiff, gif.
  • Seitenverhältnis (Breite ÷ Höhe): 0,4 bis einschließlich 2,5.
  • Breite und Höhe müssen jeweils zwischen 300 und 6.000 Pixeln liegen.

Anforderungen für Videos

  • Unterstützte Formate: mp4, mov.
  • Die Dateigröße pro Video darf 100 MB nicht überschreiten.
  • Bildrate: 24 bis einschließlich 60 FPS.
  • Seitenverhältnis (Breite ÷ Höhe): 0,4 bis einschließlich 2,5.
  • Gesamtpixelzahl (Breite × Höhe): 407.696 bis einschließlich 8.295.044. Zum Beispiel: 614 × 664 = 407.696 und 3.326 × 2.494 = 8.295.044. Dies sind lediglich Beispiele für die Pixelanzahl, keine festen Vorgaben für Breite und Höhe.

Anforderungen für Audiodateien

  • Unterstützte Formate: wav, mp3.
  • Die Dateigröße pro Audiodatei darf maximal 15 MB betragen.

Fehler

HTTP-Fehler enthalten ein error-Objekt mit code und message. Auch ein erfolgreich angenommener Task kann später noch fehlschlagen; fragen Sie den Task ab oder verarbeiten Sie den Callback für Fehler.

{
  "error": {
    "code": "invalid_request",
    "message": "input.prompt is required."
  }
}
HTTPFeldVorgehensweise
400invalid_request
Korrigieren Sie das JSON, den fehlenden Prompt, den Parameterbereich oder die Medien-URL, bevor Sie es erneut versuchen.
401invalid_api_key
Überprüfen Sie das Bearer-Token und ob der API-Key aktiv ist.
402insufficient_credits
Laden Sie Credits auf oder reduzieren Sie die Task-Kosten. Die Antwort kann den benötigten und den verfügbaren Betrag enthalten.
403forbidden
Überprüfen Sie die in der Fehlermeldung beschriebene Einschränkung auf Kontoebene.
404not_found
Überprüfen Sie die Task-ID und ob der Key dem Besitzer des Tasks gehört.
429rate_limited
Warten Sie das Retry-After-Intervall ab, bevor Sie es erneut versuchen.
500internal_error
Prüfen Sie die Fehlermeldung und die API-Protokolle. Gehen Sie bei erneuten Versuchen vorsichtig vor; das erneute Senden einer Erstellungsanfrage kann einen weiteren kostenpflichtigen Task auslösen.

Rate Limits

Tasks erstellen: Pro API-Schlüssel sind standardmäßig bis zu 100 Anfragen pro Minute zulässig. Individuelle Ratenbegrenzungen sind derzeit nicht verfügbar.

Tasks abfragen: Pro API-Schlüssel sind standardmäßig bis zu 120 Anfragen pro Minute zulässig. Abfragen und Erstellungsanfragen werden separat gezählt.

HTTP 429 enthält Retry-After: 60 bei der Erstellung und Retry-After: 5 bei Abfragen. Nutzen Sie Backoff-Verfahren und vermeiden Sie unnötig häufiges Polling.