Seedance 2.0 API

Integrieren Sie Videogenerierung in Ihr Produkt mit asynchroner Aufgabenerstellung, Statusabfrage, Webhooks und guthabenbasierter Abrechnung.

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

Einführung

Die API ermöglicht es Ihnen, Seedance 2.0 Videogenerierungsaufgaben programmatisch zu übermitteln. Die Generierung ist asynchron: Erstellen Sie eine Aufgabe, erhalten Sie sofort eine Aufgaben-ID, und rufen Sie dann das fertige Video ab, indem Sie den Aufgabenendpunkt abfragen oder einen Webhook empfangen.

Asynchrone Aufgaben

Polling funktioniert gut für die Entwicklung und einfache Integrationen.

Webhook bereit

Webhooks werden für die Produktion empfohlen, da sie aggressives Polling vermeiden und Ihren Dienst benachrichtigen, wenn eine Aufgabe einen Endzustand erreicht.

Credits-bewusst

Credits werden bei der Einreichung reserviert. Erfolgreiche Aufgaben werden von dieser Reservierung abgebucht; fehlgeschlagene oder abgelaufene Aufgaben werden automatisch zurückerstattet.

Authentifizierung

Erstellen Sie im Dashboard einen API-Schlüssel und senden Sie ihn bei jeder Anfrage als Bearer-Token. Der vollständige Schlüssel wird nur einmal zum Zeitpunkt der Erstellung angezeigt.

Authorization: Bearer sk_live_xxxxxxxx
sk_live_

Verwenden Sie sk_live_ Schlüssel für den Produktionsverkehr.

sk_test_

Verwenden Sie sk_test_ Schlüssel für Sandbox-Integrationstests mit demselben API-Vertrag.

401

Fehlende, ungültige oder widerrufene Schlüssel geben invalid_api_key mit HTTP 401 zurück.

Schnellstart

Senden Sie zuerst eine Aufgabe. Nachdem die Aufgabe angenommen wurde, wählen Sie eine Methode zur Ergebnisbereitstellung: Abfragen des Aufgabenendpunkts oder Empfangen des Endergebnisses über einen Webhook.

Aufgabe senden

Erstellen Sie eine asynchrone Videoaufgabe und erhalten Sie sofort eine Aufgaben-ID.

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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,
      "seed": -1
    }
  }'
Ergebnisoption: Polling

Rufen Sie den Aufgabenstatus-Endpunkt ab, wenn Ihre Integration explizites Polling bevorzugt.

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

Übergeben Sie callback_url beim Senden der Aufgabe, und empfangen Sie dann Abschluss- oder Fehler-Callbacks und aktualisieren Sie Ihren eigenen Aufgaben-Datensatz.

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 });
}

Videoaufgabe erstellen

Erstellen Sie eine Videoaufgabe mit POST /v1/videos/generations. Der Anfragetext enthält ein Top-Level-Modell, eine optionale callback_url und ein Eingabeobjekt mit prompt und Generierungseinstellungen.

POST
/v1/videos/generations
curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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,
      "seed": -1
    }
  }'

Generierungsmodi

generation_type steuert, welche Medieneingaben akzeptiert werden und wie das Modell sie interpretiert.

ModusErforderliche MedienOptionale MedienHinweise
text-to-videopromptduration, aspect_ratio, resolution, seedNur Text-Prompt. image_urls, video_urls und audio_urls werden nicht benötigt.
image-to-videoprompt + image_urls Array (1-2 Bild-URLs)duration, aspect_ratio, resolution, seedimage_urls muss ein Array sein. Geben Sie 1 Bild-URL für den ersten Frame oder 2 Bild-URLs für den ersten und letzten Frame an. Video und Audio werden ignoriert.
reference-to-videoprompt + mindestens ein Bild oder VideoBilder, Videos und Audio innerhalb der MateriallimitsAudio kann nicht allein mit Text verwendet werden. Fügen Sie mindestens ein Bild oder Video hinzu, wenn Audio bereitgestellt wird.
text-to-video

Verwenden Sie Text-zu-Video, wenn der Prompt die einzige kreative Eingabe ist. (text-to-video)

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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,
      "seed": -1
    }
  }'
image-to-video

Verwenden Sie Bild-zu-Video, wenn input.image_urls ein Array mit 1-2 Bild-URLs ist: Eine URL legt den ersten Frame fest, und zwei URLs legen den ersten und letzten Frame fest. Video- und Audioreferenzen werden in diesem Modus ignoriert. (image-to-video)

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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

Verwenden Sie Referenz-zu-Video für eine reichhaltigere Steuerung mit Referenzbildern, -videos und -audio. Audio kann nicht allein mit Text verwendet werden; fügen Sie mindestens ein Bild oder Video hinzu, wenn Audio bereitgestellt wird. (reference-to-video)

Materiallimits

  • Bis zu 9 Referenzbilder
  • Bis zu 3 Referenzvideos, Gesamtdauer <= 15 Sekunden
  • Bis zu 3 Referenzaudios, Gesamtdauer <= 15 Sekunden
  • Maximal 12 Materialien insgesamt über alle Typen hinweg

Unterstützte Eingabekombinationen

Text + Bild
Text + Video
Text + Bild + Video
Text + Bild + Audio
Text + Video + Audio
Text + Bild + Video + Audio
curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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": "1080p"
    }
  }'

Anfrageparameter

Parameternamen, Enum-Werte, Endpunktpfade und Beispiele sind Teil des API-Vertrags. Die folgenden Beschreibungen erklären, wie sich jedes Feld verhält.

Header

HeaderErforderlichBeschreibungBeispiel
AuthorizationJaBearer API-Schlüssel zur Authentifizierung der Anfrage.Bearer sk_live_xxx
Content-TypeJaAlle Schreibanfragen verwenden JSON.application/json

Top-Level-Felder

FeldTypErforderlichStandardBereich / EnumModiBeispiel
model

Modellvariante, die für die Generierung verwendet wird.

stringJa-seedance-2-0 | seedance-2-0-fastalleseedance-2-0
callback_url

HTTPS-Endpunkt, der Callback-Benachrichtigungen bei Aufgabenerfolg oder -fehler empfängt.

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

Generierungseinstellungen und Medienreferenzen.

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-zu-Video. (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 Bild-zu-Video senden Sie 1 Bild für den ersten Frame oder 2 Bilder für den ersten und letzten Frame. Für Referenz-zu-Video senden Sie bis zu 9 Bilder als visuelle Referenzen. (image-to-video) (reference-to-video)

string[]Bedingt[]Bild-zu-Video: 1 oder 2 Bilder. Referenz-zu-Video: bis zu 9 Bilder. (image-to-video) (reference-to-video)image-to-video / reference-to-video["https://.../a.jpg"]
input.video_urls

Öffentlich erreichbare Referenzvideos nur für Referenz-zu-Video. Sie können bis zu 3 Videodateien senden, und ihre kombinierte Wiedergabezeit muss 15 Sekunden oder weniger betragen. (reference-to-video)

string[]Nein[]Bis zu 3 Videos. Die kombinierte Videolänge muss 15 Sekunden oder weniger betragen.reference-to-video[]
input.audio_urls

Öffentlich erreichbare Referenzaudiodateien nur für Referenz-zu-Video. Sie können bis zu 3 Audiodateien senden, und ihre kombinierte Wiedergabezeit muss 15 Sekunden oder weniger betragen. (reference-to-video)

string[]Nein[]Bis zu 3 Audiodateien. Die kombinierte Audiolänge muss 15 Sekunden oder weniger betragen.reference-to-video[]
input.duration

Ausgabevideolänge in Sekunden.

intNein54-15 Sekundenalle5
input.aspect_ratio

Ausgabe-Seitenverhältnis. adaptiv lässt den Dienst das beste Verhältnis ableiten.

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

Ausgabeauflösungsstufe.

stringNein720p480p | 720p | 1080palle720p
input.generate_audio

Ob das Modell, wenn unterstützt, Audio generieren soll.

booleanNeintruetrue | falsealletrue
input.watermark

Ob ein Wasserzeichen hinzugefügt werden soll.

booleanNeinfalsetrue | falseallefalse
input.web_search

Ob Web-Such-Erweiterung, wenn unterstützt, erlaubt sein soll.

booleanNeinfalsetrue | falseallefalse
input.return_last_frame

Ob die URL des letzten Frames zurückgegeben werden soll, wenn verfügbar.

booleanNeinfalsetrue | falseallefalse
input.seed

Deterministischer Seed. Verwenden Sie -1 für einen zufälligen Seed.

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

Credits variieren je nach Auflösung, Dauer, Modell und ob Referenz-zu-Video Videoreferenzen enthält. Der von der Erstellungsantwort zurückgegebene Kreditwert ist der tatsächlich reservierte Betrag für diese Aufgabe. (reference-to-video)

Credit-Preise anzeigen

Antwort

Dies ist die Erfolgsantwort von POST /v1/videos/generations. Es bedeutet, dass die Aufgabe angenommen wurde und Credits reserviert wurden. Verwenden Sie die zurückgegebene taskId, um GET /v1/tasks/:id abzufragen oder einen Abschluss- oder Fehler-Callback abzugleichen.

POST /v1/videos/generations Erfolgsantwort

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

Aufgabenstatus abrufen

Verwenden Sie GET /v1/tasks/:id, um den aktuellen Aufgabenstatus abzurufen. Fragen Sie nicht öfter als einmal alle 10 Sekunden ab. Für Produktionssysteme bevorzugen Sie Webhooks.

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

Abgeschlossene Aufgabenantwort

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

Fehlgeschlagene Aufgabenantwort

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "billing_status": "refunded",
  "credits": 60,
  "failed_reason": "provider_failed"
}
WertBedeutung
status=queuedAkzeptiert und wartet auf Übermittlung oder Verarbeitung.
status=generatingAnbieter verarbeitet die Generierung.
status=completedVideo abgeschlossen und data.results enthält die Ergebnis-URL.
status=failedGenerierung fehlgeschlagen oder abgelaufen.
billing_status=reservedCredits werden reserviert, während die Aufgabe läuft.
billing_status=chargedAufgabe erfolgreich und die Reservierung ist abgerechnet.
billing_status=refundedAufgabe fehlgeschlagen oder abgelaufen und Credits wurden zurückerstattet.
billing_status=refund_failedRückerstattungstransaktion fehlgeschlagen und erfordert manuelle Bearbeitung.

Nach video_expires_at ist data.results leer. Laden Sie die Datei herunter und speichern Sie sie, bevor das Gültigkeitsfenster endet.

Webhooks

Wenn callback_url vorhanden ist, ruft Seedance Ihren Endpunkt auf, wenn die Aufgabe abgeschlossen oder fehlgeschlagen ist, und sendet JSON-Daten, die das Endergebnis beschreiben. Wenn Ihr Endpunkt eine Nicht-2xx-Antwort zurückgibt oder nicht innerhalb von 15 Sekunden antwortet, wird die Zustellung bis zu 5 Mal wiederholt. Wiederholungsversuche verwenden dieselbe Aufgaben-ID, also deduplizieren Sie nach ID. Geben Sie eine 200-Antwort zurück, sobald Sie die Callback-Daten sicher gespeichert haben.

Callback bei Aufgabenerfolg

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

Callback bei Aufgabenfehler

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "data": {
    "failed_reason": "provider_failed",
    "credits_refunded": 60
  }
}
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 });
}

Überprüfen Sie die Form der Callback-Daten, deduplizieren Sie nach ID, aktualisieren Sie Ihren eigenen Aufgaben-Datensatz und antworten Sie schnell.

callback_url muss HTTPS sein und darf nicht auf private, Loopback- oder Link-Local-Netzwerkbereiche zeigen.

Fehler

POST /v1/videos/generations und GET /v1/tasks/:id geben diese Fehlerform zurück, wenn die API-Anfrage selbst fehlschlägt, z. B. ungültige Parameter, ungültiger API-Schlüssel, unzureichende Credits, Ratenbegrenzung oder Aufgabe nicht gefunden. Einige Fehler enthalten zusätzliche Felder wie required, available oder retry_after, je nach Situation.

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this task.",
    "required": 60,
    "available": 12
  }
}
CodeHTTPBedeutungWiederholen?
invalid_request400Fehlende oder ungültige Parameter.Nein, beheben Sie die Anfrage.
invalid_api_key401API-Schlüssel fehlt, ist ungültig oder widerrufen.Nein, verwenden Sie einen gültigen Schlüssel.
insufficient_credits402Nicht genügend Credits. Die Aufgabe wird nicht angenommen oder berechnet.Nach dem Aufladen.
forbidden403API-Schlüssel besitzt nicht den erforderlichen Geltungsbereich.Nein.
not_found404Aufgabe existiert nicht oder gehört nicht dem Schlüsselbesitzer.Nein.
rate_limited429Anfragerate überschritten.Ja, folgen Sie Retry-After.
internal_error500Serverfehler.Ja, später erneut versuchen.

Ratenbegrenzungen

Ratenbegrenzungen werden pro API-Schlüssel mit einem gleitenden Fenster angewendet. Die Generierung ist standardmäßig auf 60 Anfragen pro Minute begrenzt; Statusabfragen sind nachsichtiger. HTTP 429-Antworten enthalten Retry-After.

Generierung

60/min

Statusabfragen

Nachsichtiger

429 Header

Retry-After

Abrechnung & Credits

Die API verwendet: Reservierung bei Einreichung, Abrechnung bei Erfolg und Rückerstattung bei Misserfolg. Die Nutzungsseiten im Dashboard zeigen die API-Guthabenhistorie, Aufgabenprotokolle und zeitbasierte Nutzungsstatistiken.

Reserviert

Credits werden geprüft und reserviert, wenn die Aufgabe angenommen wird.

Abgerechnet

Abgeschlossene Aufgaben verrechnen die bestehende Reservierung.

Zurückerstattet

Fehlgeschlagene oder abgelaufene Aufgaben geben die reservierten Credits automatisch zurück.

Nutzung im Dashboard überprüfen

API-Protokolle, Aufgabentimelines, Kreditverlauf und zeitbasierte Nutzungsstatistiken anzeigen.

API-Protokolle