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
| Feature | Unterstützte Werte |
|---|---|
| Ausgabeauflösung | 480p · 720p · 1080p |
| Ausgabedauer | 4–30 Sekunden |
| Seitenverhältnis | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive |
| Referenzbilder | Bis zu 30 Bilder |
| Referenzvideos | Bis zu 10 Videos |
| Referenzaudiodateien | Bis zu 10 Audiodateien |
| Alle Referenzen kombiniert | Insgesamt bis zu 50 Referenzdateien |
| Gesamtdauer pro Video-/Audio-Gruppe | 30 Sekunden |
| seed | Nicht unterstützt |
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.
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ösung | Ohne Video-Input | Mit Video-Input |
|---|---|---|
480p | 10 Credits/Sekunde | 6 Credits/Sekunde |
720p | 20 Credits/Sekunde | 12 Credits/Sekunde |
1080p | 30 Credits/Sekunde | 20 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.
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-Inputs | Berechnung der Gebühr | Beispiel |
|---|---|---|
| Mit Referenzvideos | Die 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.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonSetzen 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/generationsSenden 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
| Feld | Typ | Erforderlich | Beschreibung & Einschränkungen |
|---|---|---|---|
model | string | Ja | Modell-ID. Um Seedance 2.5 zu verwenden, setzen Sie dieses Feld auf seedance-2-5. |
callback_url | string | Nein | Ö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 | object | Ja | Generierungseinstellungen. Muss einen ausgefüllten Prompt enthalten. |
Eingabeparameter
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.
| Feld | Typ | Erforderlich | Standard | Beschreibung & Einschränkungen |
|---|---|---|---|---|
input.draft | boolean | Nein | false | 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 | string | Nein | — | 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 | string | Nein | mp4 | 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 | string | Bedingt | — | 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 | string | Nein | text-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 | integer | Nein | 5 | 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–30Beispiel: 5 |
input.aspect_ratio | string | Nein | adaptive | 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, adaptiveBeispiel: adaptive |
input.resolution | string | Nein | 720p | 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 | 1080pBeispiel: 720p |
input.generate_audio | boolean | Nein | true | Synchronisierte Audiogenerierung anfordern. Unterstützte Werte true | falseBeispiel: true |
input.watermark | boolean | Nein | false | KI-Wasserzeichen im generierten Video anfordern. Unterstützte Werte true | falseBeispiel: false |
input.web_search | boolean | Nein | false | Websuche erlauben, sofern vom Modell unterstützt. Unterstützte Werte true | falseBeispiel: false |
input.return_last_frame | boolean | Nein | false | 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 | falseBeispiel: 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.
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.
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.
Generierungsmodi & Beispiele
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
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
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"| Status | Beschreibung & Einschränkungen |
|---|---|
queued | Akzeptiert und wartet auf die Verarbeitung. |
generating | Generierung läuft. |
completed | Erfolgreich abgeschlossen. Laden Sie data.results vor dem Ablaufdatum herunter. |
failed | Fehlgeschlagen. Prüfen Sie failed_reason und billing_status. |
| Feld | Typ | Beschreibung & Einschränkungen |
|---|---|---|
id | string | Task-ID. Entspricht der taskId aus der Erstellungsantwort. |
created_at | number | Erstellungszeitpunkt des Tasks als Unix-Zeitstempel (Sekunden). |
model | string | Die für diesen Task verwendete öffentliche Modell-ID. |
is_draft | boolean | True für einen 480p-Entwurf; false für ein Finale oder Standardvideo. |
draft_task_id | string | null | Die API-Task-ID des Quell-Entwurfs bei einem Finale; null bei Entwürfen und Standardvideos. |
billing_status | string | reserved, charged, refunded oder refund_failed. |
credits | number | 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_reason | string | null | Fehlerursache bei fehlgeschlagenen Tasks; andernfalls null. Fehlgeschlagene Abfrage-Antworten enthalten keine data. |
data | object | Vorhanden bei erfolgreich abgeschlossenen oder laufenden Tasks. Enthält die Ausgabe und Verarbeitungsdetails. |
data.results | string[] | Array mit Video-URLs. Leer bis zur Fertigstellung oder nach Ablauf des Videos. |
data.video_expires_at | string | 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_url | string | null | URL des letzten Frames, sofern angefordert und verfügbar, andernfalls null. |
data.processing_time | number | 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."
}
}| HTTP | Feld | Vorgehensweise |
|---|---|---|
| 400 | invalid_request | Korrigieren Sie das JSON, den fehlenden Prompt, den Parameterbereich oder die Medien-URL, bevor Sie es erneut versuchen. |
| 401 | invalid_api_key | Überprüfen Sie das Bearer-Token und ob der API-Key aktiv ist. |
| 402 | insufficient_credits | Laden Sie Credits auf oder reduzieren Sie die Task-Kosten. Die Antwort kann den benötigten und den verfügbaren Betrag enthalten. |
| 403 | forbidden | Überprüfen Sie die in der Fehlermeldung beschriebene Einschränkung auf Kontoebene. |
| 404 | not_found | Überprüfen Sie die Task-ID und ob der Key dem Besitzer des Tasks gehört. |
| 429 | rate_limited | Warten Sie das Retry-After-Intervall ab, bevor Sie es erneut versuchen. |
| 500 | internal_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.