Seedance-API

Integrieren Sie die Videogenerierung mit Seedance 2.5 oder Seedance 2.0, asynchronen Tasks, Webhooks und guthabenbasierter Abrechnung direkt in Ihr Produkt.

Basis-URL
https://api.seevio.ai
Auf dieser Seite

Einführung

Mit der API können Sie Videogenerierungstasks für Seedance 2.5 und Seedance 2.0 programmatisch starten. Seedance 2.5 ist das empfohlene Modell und unterstützt Text-to-Video, Image-to-Video (mit erstem Frame oder erstem und letztem Frame) sowie multimodales Reference-to-Video. Die Generierung erfolgt asynchron: Sie erstellen einen Task, erhalten sofort eine Task-ID und rufen das fertige Video entweder per Polling über den Task-Endpunkt ab oder lassen es sich per Webhook senden.

Asynchrone Tasks

Polling eignet sich ideal für die Entwicklungsphase und einfache Integrationen.

Webhook-bereit

Webhooks werden für den Produktivbetrieb empfohlen, da sie unnötige Abfragen (Polling) vermeiden und Ihr System sofort benachrichtigen, sobald ein Task einen Endzustand erreicht.

Guthaben-basiert

Das benötigte Guthaben wird beim Absenden des Tasks reserviert. Bei erfolgreichem Abschluss wird die Reservierung abgebucht; fehlgeschlagene Tasks oder Zeitüberschreitungen werden automatisch zurückerstattet.

Authentifizierung

Erstellen Sie im Dashboard einen API-Key und senden Sie diesen bei jeder Anfrage als Bearer-Token mit. Der vollständige Key wird Ihnen nur ein einziges Mal direkt nach der Erstellung angezeigt.

Authorization: Bearer sk_live_xxxxxxxx
sk_live_

Verwenden Sie sk_live_ Keys für den echten Produktivbetrieb.

sk_test_

Verwenden Sie sk_test_ Keys für Integrationstests in der Sandbox-Umgebung mit exakt denselben API-Bedingungen.

401

Fehlende, ungültige oder widerrufene Keys führen zu einem invalid_api_key-Fehler mit dem HTTP-Status 401.

Schnellstart

Senden Sie zuerst einen Task ab. Sobald dieser akzeptiert wurde, wählen Sie eine Methode zur Bereitstellung des Ergebnisses: Fragen Sie den Task-Endpunkt ab (Polling) oder empfangen Sie das finale Ergebnis direkt über einen Webhook.

Task absenden

Erstellen Sie einen asynchronen Videotask und erhalten Sie sofort eine Task-ID zurück.

curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "callback_url": "https://your-domain.com/api/seedance/webhook",
    "input": {
      "prompt": "a cat surfing on a neon wave, cinematic lighting",
      "generation_type": "text-to-video",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false
    }
  }'
Ergebnisoption: Polling

Fragen Sie den Task-Status-Endpunkt ab, wenn Ihre Integration explizites Polling bevorzugt.

curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"
Ergebnisoption: Webhook

Übergeben Sie beim Erstellen des Tasks eine callback_url, um bei Erfolg oder Fehler automatisch benachrichtigt zu werden und Ihre eigenen Datensätze zu aktualisieren.

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

  if (callbackData.status === "completed") {
    const videoUrl = callbackData.data.results[0];
    // Save the video URL or update your own task record here.
  }

  if (callbackData.status === "failed") {
    const errorMessage = callbackData.data.failed_reason;
    // Mark your own task record as failed here.
  }

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

Videotask erstellen

Erstellen Sie einen Videotask mit POST /v1/videos/generations. Der Request-Body enthält das primäre model, eine optionale callback_url sowie ein input-Objekt mit dem Prompt und den Generierungseinstellungen.

POST
/v1/videos/generations
curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "callback_url": "https://your-domain.com/api/seedance/webhook",
    "input": {
      "prompt": "a cat surfing on a neon wave, cinematic lighting",
      "generation_type": "text-to-video",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false
    }
  }'

Generierungsmodi

generation_type steuert, welche Medien-Inputs akzeptiert und wie diese vom Modell interpretiert werden.

Funktionen von Seedance 2.5
seedance-2-5

Setzen Sie model auf seedance-2-5, um Videos in 480p oder 720p mit einer Länge von 4 bis 30 Sekunden zu generieren.

  • Text-to-Video mit Seitenverhältnissen wie Adaptive, 16:9, 9:16, 1:1, 4:3, 3:4 oder 21:9
  • Image-to-Video basierend auf einem Bild (erster Frame) oder zwei Bildern (erster und letzter Frame); das Seitenverhältnis muss hierbei auf adaptive gesetzt sein
  • Reference-to-Video mit bis zu 30 Bildern, 10 Videos und 10 Audiodateien (maximal 50 Referenzmedien insgesamt)
  • Jedes Referenzvideo und jedes Audio-Referenzdokument muss zwischen 2 und 30 Sekunden lang sein; die Gesamtlänge aller Videos bzw. aller Audiodateien darf jeweils 30 Sekunden nicht überschreiten
  • Reine Audio-Referenzen sowie return_last_frame werden unterstützt; seed wird nicht unterstützt
ModusErforderliche MedienOptionale MedienHinweise
text-to-videopromptduration, aspect_ratio, resolution, seedNur Text-Prompt. image_urls, video_urls und audio_urls sind nicht erforderlich.
image-to-videoprompt + image_urls-Array (1–2 Bild-URLs)duration, aspect_ratio, resolution, seedimage_urls muss als Array übergeben werden. Nutzen Sie 1 Bild-URL für den ersten Frame oder 2 Bild-URLs für den ersten und letzten Frame. Video und Audio werden ignoriert.
reference-to-videoprompt + mindestens ein Bild, Video oder Audio als ReferenzBilder, Videos und Audio im Rahmen der erlaubten LimitsSeedance 2.5 unterstützt reine Audio-Referenzen. Fügen Sie bei Seedance 2.0 mindestens ein Bild oder Video hinzu, wenn Audio verwendet wird.
text-to-video

Verwenden Sie Text-to-Video, wenn der Text-Prompt Ihre einzige kreative Eingabe ist.

curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "callback_url": "https://your-domain.com/api/seedance/webhook",
    "input": {
      "prompt": "a cinematic drone shot over a futuristic coastal city at sunrise",
      "generation_type": "text-to-video",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false
    }
  }'
image-to-video

Verwenden Sie Image-to-Video, wenn input.image_urls ein Array mit 1–2 Bild-URLs enthält: Eine URL definiert den ersten Frame, zwei URLs definieren den ersten und den letzten Frame. Video- und Audio-Referenzen werden in diesem Modus ignoriert.

curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "input": {
      "prompt": "the subject turns toward camera, soft studio motion",
      "generation_type": "image-to-video",
      "image_urls": ["https://your.cdn.com/first-frame.jpg"],
      "duration": 5,
      "resolution": "720p"
    }
  }'
reference-to-video

Nutzen Sie Reference-to-Video für eine präzisere Steuerung mittels Referenzbildern, -videos und -audio. Seedance 2.5 unterstützt reine Audio-Referenzen; Seedance 2.0 erfordert bei der Bereitstellung von Audio mindestens ein zusätzliches Bild oder Video.

Limits für Referenzmedien

  • Seedance 2.5: bis zu 30 Referenzbilder
  • Seedance 2.5: bis zu 10 Referenzvideos (je 2–30 Sek., Gesamtlänge <= 30 Sek.)
  • Seedance 2.5: bis zu 10 Referenzaudios (je 2–30 Sek., Gesamtlänge <= 30 Sek.)
  • Seedance 2.5: maximal 50 Referenzmedien insgesamt über alle Typen hinweg
  • Seedance 2.0-Varianten behalten ihre bisherigen Limits: 9 Bilder, 3 Videos, 3 Audios und maximal 15 Sekunden pro Video-/Audio-Gruppe

Unterstützte Input-Kombinationen

Text + Bild
Text + Video
Text + Audio (Seedance 2.5)
Text + Bild + Video
Text + Bild + Audio
Text + Video + Audio
Text + Bild + Video + Audio
curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "input": {
      "prompt": "use the product from image 1 and the camera motion from the reference video",
      "generation_type": "reference-to-video",
      "image_urls": ["https://your.cdn.com/product.jpg"],
      "video_urls": ["https://your.cdn.com/camera-motion.mp4"],
      "audio_urls": [],
      "duration": 8,
      "resolution": "720p"
    }
  }'

Anfrageparameter

Parameternamen, Enum-Werte, Endpunkt-Pfade und Beispiele sind fester Bestandteil des API-Vertrags. Die folgenden Beschreibungen erläutern die Funktionsweise der einzelnen Felder.

Header

HeaderErforderlichBeschreibungBeispiel
AuthorizationJaDer zur Authentifizierung der Anfrage verwendete Bearer-API-Key.Bearer sk_live_xxx
Content-TypeJaAlle Schreibanfragen nutzen JSON.application/json

Felder auf oberster Ebene

FeldTypErforderlichStandardBereich / EnumModiBeispiel
model

Die für die Generierung verwendete Modellvariante. Nutzen Sie seedance-2-5 für Seedance 2.5, seedance-2-0 für Seedance 2.0, seedance-2-0-fast für Seedance 2.0 Fast oder seedance-2-0-mini für Seedance 2.0 Mini.

stringJa-seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-minialleseedance-2-5
callback_url

HTTPS-Endpunkt, der Benachrichtigungen bei erfolgreichem oder fehlgeschlagenem Task empfängt.

stringNein-HTTPS-URL, keine privaten Netzwerkeallehttps://your-domain.com/hook
input

Generierungseinstellungen und Referenzmedien.

objectJa--alle-

input.* Felder

FeldTypErforderlichStandardBereich / EnumModiBeispiel
input.prompt

Text-Prompt, der das zu erstellende Video beschreibt.

stringJa-nicht-leerer Textallea cat surfing
input.generation_type

Generierungsmodus. Standardwert ist text-to-video.

stringNeintext-to-videotext-to-video | image-to-video | reference-to-video-image-to-video
input.image_urls

Öffentlich erreichbare Bild-URLs. Für Image-to-Video senden Sie 1 Bild für den ersten Frame oder 2 Bilder für den ersten und letzten Frame. Für Reference-to-Video unterstützt Seedance 2.5 bis zu 30 Bilder und Seedance 2.0 bis zu 9 Bilder.

string[]Bedingt[]Image-to-Video: 1 oder 2 Bilder. Reference-to-Video: bis zu 30 für Seedance 2.5; bis zu 9 für Seedance 2.0.image-to-video / reference-to-video["https://.../a.jpg"]
input.video_urls

Öffentlich erreichbare Referenzvideos (nur für Reference-to-Video). Seedance 2.5 unterstützt bis zu 10 Videos mit einer Länge von je 2–30 Sekunden und einer Gesamtlänge von <= 30 Sekunden. Seedance 2.0 unterstützt bis zu 3 Videos mit einer Gesamtlänge von <= 15 Sekunden.

string[]Nein[]Seedance 2.5: bis zu 10 Videos, je 2–30 Sek., Gesamtlänge <= 30 Sek. Seedance 2.0: bis zu 3, Gesamtlänge <= 15 Sek.reference-to-video[]
input.audio_urls

Öffentlich erreichbare Referenzaudiodateien (nur für Reference-to-Video). Seedance 2.5 unterstützt bis zu 10 Audiodateien mit einer Länge von je 2–30 Sekunden und einer Gesamtlänge von <= 30 Sekunden sowie reine Audio-Referenzen. Seedance 2.0 unterstützt bis zu 3 Audiodateien mit einer Gesamtlänge von <= 15 Sekunden.

string[]Nein[]Seedance 2.5: bis zu 10 Audiodateien, je 2–30 Sek., Gesamtlänge <= 30 Sek. Seedance 2.0: bis zu 3, Gesamtlänge <= 15 Sek.reference-to-video[]
input.duration

Länge des fertigen Videos in Sekunden.

intNein5Seedance 2.5: 4–30 Sekunden. Seedance 2.0: 4–15 Sekunden.alle5
input.aspect_ratio

Seitenverhältnis des Ausgabevideos. Bei adaptive ermittelt das System das optimale Verhältnis. Seedance 2.5 Image-to-Video unterstützt nur adaptive.

stringNeinadaptive16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptivealle16:9
input.resolution

Auflösungsstufe des Ausgabevideos.

stringNein720pSeedance 2.5: 480p | 720p. Seedance 2.0: 480p | 720p | 1080p | 4k (je nach Variante).alle720p
input.generate_audio

Legt fest, ob das Modell Audio generieren soll, sofern unterstützt.

booleanNeintruetrue | falsealletrue
input.watermark

Legt fest, ob ein Wasserzeichen hinzugefügt werden soll.

booleanNeinfalsetrue | falseallefalse
input.web_search

Legt fest, ob Websuche-Augmentierung erlaubt ist, sofern unterstützt.

booleanNeinfalsetrue | falseallefalse
input.return_last_frame

Legt fest, ob die URL des letzten Frames zurückgegeben werden soll, sofern verfügbar.

booleanNeinfalsetrue | falseallefalse
input.seed

Deterministischer Seed für Seedance 2.0-Varianten. Wird von Seedance 2.5 nicht unterstützt und sollte weggelassen werden.

intNein-1-1 oder 0-4294967295alle-1

Die verbrauchten Credits hängen von der Auflösung, der Dauer, dem Modell und der Frage ab, ob bei Reference-to-Video Videos als Referenz verwendet werden. Der in der Create-Antwort zurückgegebene credits-Wert entspricht dem exakt reservierten Betrag für diesen Task.

Preise für Credits ansehen

Antwort

Dies ist die Erfolgsantwort von POST /v1/videos/generations. Sie bestätigt, dass der Task akzeptiert und das Guthaben reserviert wurde. Nutzen Sie die zurückgegebene taskId für Polling über GET /v1/tasks/:id oder zum Abgleich mit einem Webhook-Callback.

Erfolgsantwort für POST /v1/videos/generations

{
  "taskId": "3f2aK9mR...",
  "credits": 100
}

Task-Status abrufen

Nutzen Sie GET /v1/tasks/:id, um den aktuellen Task-Status abzurufen. Führen Sie Polling maximal alle 10 Sekunden durch. Für Produktionsumgebungen wird die Nutzung von Webhooks empfohlen.

curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"

Antwort bei erfolgreichem Task

{
  "id": "3f2aK9mR...",
  "status": "completed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "billing_status": "charged",
  "credits": 100,
  "failed_reason": null,
  "data": {
    "results": ["https://cdn.seevio.ai/.../x.mp4"],
    "video_expires_at": "2026-06-13T10:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Antwort bei fehlgeschlagenem Task

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed"
}
WertBedeutung
status=queuedAkzeptiert und wartet auf Übermittlung oder Verarbeitung.
status=generatingDer Provider verarbeitet die Generierung.
status=completedVideo fertiggestellt; data.results enthält die Ergebnis-URL.
status=failedGenerierung fehlgeschlagen oder Zeitüberschreitung.
billing_status=reservedGuthaben ist reserviert, solange der Task läuft.
billing_status=chargedTask erfolgreich abgeschlossen und Reservierung verbucht.
billing_status=refundedTask fehlgeschlagen oder Zeitüberschreitung – Guthaben wurde zurückerstattet.
billing_status=refund_failedRückerstattung fehlgeschlagen und erfordert manuelle Prüfung.

Nach Ablauf von video_expires_at ist data.results leer. Laden Sie die Datei herunter und speichern Sie sie, bevor das Gültigkeitsfenster abläuft.

Webhooks

Wenn eine callback_url angegeben ist, ruft Seedance Ihren Endpunkt auf, sobald der Task erfolgreich abgeschlossen wurde oder fehlgeschlagen ist, und sendet JSON-Daten mit dem finalen Ergebnis. Wenn Ihr Endpunkt keinen 2xx-Erfolgscode zurückgibt oder nicht innerhalb von 15 Sekunden antwortet, wird die Zustellung bis zu 5-mal wiederholt. Wiederholungsversuche nutzen dieselbe task id – führen Sie daher eine Duplikatsbereinigung anhand der ID durch. Senden Sie eine 200-Antwort zurück, sobald Sie die Callback-Daten sicher gespeichert haben.

Callback bei erfolgreichem Task

{
  "id": "3f2aK9mR...",
  "status": "completed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "data": {
    "results": ["https://cdn.seevio.ai/.../x.mp4"],
    "video_expires_at": "2026-06-13T10:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Callback bei fehlgeschlagenem Task

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "data": {
    "failed_reason": "provider_failed",
    "credits_refunded": 100
  }
}
export async function POST(request: Request) {
  const callbackData = await request.json();

  if (callbackData.status === "completed") {
    const videoUrl = callbackData.data.results[0];
    // Save the video URL or update your own task record here.
  }

  if (callbackData.status === "failed") {
    const errorMessage = callbackData.data.failed_reason;
    // Mark your own task record as failed here.
  }

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

Validieren Sie die Struktur der Callback-Daten, filtern Sie Duplikate anhand der ID heraus, aktualisieren Sie Ihren eigenen Task-Datensatz und antworten Sie zeitnah.

Die callback_url muss eine HTTPS-Verbindung nutzen und darf nicht auf private IP-Bereiche, Loopbacks oder Link-Local-Netzwerke verweisen.

Fehler

POST /v1/videos/generations und GET /v1/tasks/:id geben diese Fehlerstruktur zurück, wenn die API-Anfrage selbst fehlschlägt (z. B. bei ungültigen Parametern, falschem API-Key, unzureichendem Guthaben, Rate-Limiting oder wenn der Task nicht gefunden wurde). Einige Fehler enthalten je nach Kontext zusätzliche Felder wie required, available oder retry_after.

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this task.",
    "required": 100,
    "available": 12
  }
}
CodeHTTPBedeutungWiederholen?
invalid_request400Fehlende oder ungültige Parameter.Nein, korrigieren Sie die Anfrage.
invalid_api_key401API-Key fehlt, ist ungültig oder wurde widerrufen.Nein, nutzen Sie einen gültigen Key.
insufficient_credits402Nicht genügend Guthaben. Der Task wird weder akzeptiert noch berechnet.Nach dem Aufladen des Guthabens.
forbidden403Dem API-Key fehlen die erforderlichen Berechtigungen (Scope).Nein.
not_found404Der Task existiert nicht oder gehört nicht zum Inhaber des API-Keys.Nein.
rate_limited429Limit für die Anzahl der Anfragen überschritten.Ja, beachten Sie den Header Retry-After.
internal_error500Interner Serverfehler.Ja, versuchen Sie es später noch einmal.

Rate Limits

Rate Limits werden pro API-Key über ein gleitendes Zeitfenster (Sliding Window) angewendet. Die Videogenerierung ist standardmäßig auf 100 Anfragen pro Minute beschränkt; Statusabfragen sind großzügiger geregelt. HTTP-429-Antworten enthalten einen Retry-After-Header.

Generierung

100/Min.

Statusabfragen

Toleranter geregelt

429-Header

Retry-After

Abrechnung & Guthaben

Die API nutzt das Prinzip: Reservierung beim Absenden, Abbuchung bei Erfolg und Rückerstattung bei Fehlern. Im Dashboard finden Sie den API-Guthabenverlauf, Task-Logs und zeitbasierte Nutzungsstatistiken.

Reserviert

Das Guthaben wird geprüft und reserviert, sobald der Task akzeptiert wird.

Abgebucht

Erfolgreich abgeschlossene Tasks verrechnen die bestehende Reservierung endgültig.

Zurückerstattet

Fehlgeschlagene Tasks oder Zeitüberschreitungen geben das reservierte Guthaben automatisch wieder frei.

Nutzung im Dashboard analysieren

Sehen Sie API-Logs, Task-Zeitverläufe, den Guthabenverlauf und zeitbasierte Nutzungsdaten ein.

API-Logs