Seedance 2.0 API: Vollständiger Integrationsleitfaden (2026)

Feb. 11, 2026

Die Seedance 2.0 API bietet programmatischen Zugang zu ByteDances KI-Videogenerierungsmodell. Dieser Leitfaden behandelt alles, was Entwickler für die Integration von Seedance in Anwendungen und Produktions-Workflows benötigen, von der Authentifizierung über asynchrones Polling bis hin zu Webhook-gesteuerten Architekturen.

API-Überblick

Die Seedance 2.0 REST API stellt Endpunkte für Text-zu-Video-Generierung, Bild-zu-Video-Generierung, Status-Polling und Ergebnisabruf bereit. Alle Generierungen sind asynchron: Sie senden eine Anfrage, erhalten eine Task-ID und pollen oder warten auf einen Webhook, um das Ergebnis zu erhalten.

FunktionEndpunktMethode
Text-zu-Video/v2/generate/textPOST
Bild-zu-Video/v2/generate/imagePOST
Statusprüfung/v2/tasks/{task_id}GET
Ergebnis-Download/v2/tasks/{task_id}/resultGET
Webhook-Konfiguration/v2/webhooksPOST
Kontoinformationen/v2/accountGET

Basis-URL: https://api.seedance.ai

Antwortformat: Alle Endpunkte liefern JSON mit einer konsistenten Struktur, die status-, data- und error-Felder enthält.

Schnellstart (5 Minuten)

Kommen Sie in drei Schritten von Null zu Ihrem ersten generierten Video.

Schritt 1: API-Schlüssel erhalten. Erstellen Sie ein Konto im Dreamina-Entwicklerportal und navigieren Sie zu Einstellungen > API-Schlüssel, um einen Schlüssel zu generieren.

Schritt 2: Generierungsanfrage senden.

curl -X POST https://api.seedance.ai/v2/generate/text \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.0",
    "prompt": "A golden retriever running through a field of sunflowers at sunset, slow motion, cinematic lighting",
    "aspect_ratio": "16:9",
    "duration": 4
  }'

Schritt 3: Ergebnis abfragen.

curl https://api.seedance.ai/v2/tasks/TASK_ID \
  -H "Authorization: Bearer YOUR_API_KEY"

Wenn status den Wert "completed" zurückgibt, enthält die Antwort ein video_url-Feld mit einem signierten Download-Link, der 24 Stunden gültig ist.

Authentifizierung

Alle API-Anfragen erfordern ein Bearer-Token im Authorization-Header. Ihr API-Schlüssel ist mit Ihrem Konto und Abrechnungsplan verknüpft.

JavaScript

const SEEDANCE_API_KEY = process.env.SEEDANCE_API_KEY

const headers = {
  'Authorization': `Bearer ${SEEDANCE_API_KEY}`,
  'Content-Type': 'application/json',
}

Python

import os
import requests

SEEDANCE_API_KEY = os.environ["SEEDANCE_API_KEY"]

headers = {
    "Authorization": f"Bearer {SEEDANCE_API_KEY}",
    "Content-Type": "application/json",
}

cURL

curl -H "Authorization: Bearer $SEEDANCE_API_KEY" \
     -H "Content-Type: application/json" \
     https://api.seedance.ai/v2/account

Sicherheits-Best-Practices:

  • API-Schlüssel in Umgebungsvariablen speichern, niemals im Quellcode
  • Schlüssel regelmäßig über das Entwickler-Dashboard rotieren
  • Separate Schlüssel für Entwicklungs- und Produktionsumgebungen verwenden
  • Nutzung über das Konto-Dashboard überwachen, um unbefugte Verwendung zu erkennen

Text-zu-Video-Endpunkt

Generieren Sie Videos aus Textbeschreibungen. Dies ist der primäre Endpunkt für die meisten Anwendungsfälle.

Anfrageparameter:

ParameterTypErforderlichStandardBeschreibung
modelstringJaModellversion (seedance-2.0)
promptstringJaVideobeschreibung (30-500 Zeichen)
negative_promptstringNeinAuszuschließende Elemente
aspect_ratiostringNein16:916:9, 9:16 oder 1:1
durationintegerNein44 oder 8 Sekunden
seedintegerNeinzufälligReproduzierbarkeits-Seed
webhook_urlstringNeinURL für Abschlussbenachrichtigung

JavaScript-Beispiel

async function generateTextToVideo(prompt) {
  const response = await fetch('https://api.seedance.ai/v2/generate/text', {
    method: 'POST',
    headers,
    body: JSON.stringify({
      model: 'seedance-2.0',
      prompt,
      aspect_ratio: '16:9',
      duration: 4,
    }),
  })

  const data = await response.json()

  if (!data.data?.task_id) {
    throw new Error(`Generation failed: ${data.error?.message ?? 'Unknown error'}`)
  }

  return data.data.task_id
}

Python-Beispiel

def generate_text_to_video(prompt: str) -> str:
    response = requests.post(
        "https://api.seedance.ai/v2/generate/text",
        headers=headers,
        json={
            "model": "seedance-2.0",
            "prompt": prompt,
            "aspect_ratio": "16:9",
            "duration": 4,
        },
    )
    response.raise_for_status()
    data = response.json()

    task_id = data.get("data", {}).get("task_id")
    if not task_id:
        raise ValueError(f"Generation failed: {data.get('error', {}).get('message', 'Unknown')}")

    return task_id

Für effektive Prompts siehe unseren Seedance-Prompt-Leitfaden mit über 50 sofort verwendbaren Vorlagen.

Bild-zu-Video-Endpunkt

Animieren Sie statische Bilder mit Bewegungs-Prompts. Das Bild liefert den visuellen Ausgangspunkt, und der Bewegungs-Prompt beschreibt, wie sich die Szene bewegen soll.

Anfrageparameter:

ParameterTypErforderlichBeschreibung
modelstringJaseedance-2.0
imagefile/URLJaQuellbild (JPEG/PNG, max. 10 MB)
motion_promptstringJaBeschreibung der gewünschten Bewegung
durationintegerNein4 oder 8 Sekunden
seedintegerNeinReproduzierbarkeits-Seed
webhook_urlstringNeinURL für Abschlussbenachrichtigung

JavaScript-Beispiel (Datei-Upload)

async function generateImageToVideo(imagePath, motionPrompt) {
  const imageBuffer = await fs.promises.readFile(imagePath)
  const blob = new Blob([imageBuffer], { type: 'image/png' })

  const formData = new FormData()
  formData.append('model', 'seedance-2.0')
  formData.append('image', blob, 'input.png')
  formData.append('motion_prompt', motionPrompt)
  formData.append('duration', '4')

  const response = await fetch('https://api.seedance.ai/v2/generate/image', {
    method: 'POST',
    headers: { 'Authorization': `Bearer ${SEEDANCE_API_KEY}` },
    body: formData,
  })

  const data = await response.json()
  return data.data.task_id
}

JavaScript-Beispiel (URL-Referenz)

async function generateImageToVideoFromUrl(imageUrl, motionPrompt) {
  const response = await fetch('https://api.seedance.ai/v2/generate/image', {
    method: 'POST',
    headers,
    body: JSON.stringify({
      model: 'seedance-2.0',
      image_url: imageUrl,
      motion_prompt: motionPrompt,
      duration: 4,
    }),
  })

  const data = await response.json()
  return data.data.task_id
}

Python-Beispiel

def generate_image_to_video(image_path: str, motion_prompt: str) -> str:
    with open(image_path, "rb") as f:
        files = {"image": ("input.png", f, "image/png")}
        data = {
            "model": "seedance-2.0",
            "motion_prompt": motion_prompt,
            "duration": "4",
        }

        response = requests.post(
            "https://api.seedance.ai/v2/generate/image",
            headers={"Authorization": f"Bearer {SEEDANCE_API_KEY}"},
            files=files,
            data=data,
        )

    response.raise_for_status()
    return response.json()["data"]["task_id"]

Asynchrone Generierung und Status-Polling

Alle Seedance API-Generierungen sind asynchron. Nach dem Senden einer Anfrage erhalten Sie eine task_id und müssen den Abschluss abfragen. Die typische Generierungszeit beträgt 30-120 Sekunden, abhängig von Dauer und Serverauslastung.

Task-Statuswerte:

StatusBeschreibung
pendingAnfrage empfangen, zur Verarbeitung eingereiht
processingGenerierung läuft
completedVideo zum Download bereit
failedGenerierung fehlgeschlagen (siehe error-Feld)

JavaScript Polling-Implementierung

async function pollForResult(taskId, maxAttempts = 60, intervalMs = 3000) {
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
    const response = await fetch(
      `https://api.seedance.ai/v2/tasks/${taskId}`,
      { headers }
    )
    const data = await response.json()
    const status = data.data?.status

    if (status === 'completed') {
      return data.data.video_url
    }

    if (status === 'failed') {
      throw new Error(`Generation failed: ${data.data?.error ?? 'Unknown error'}`)
    }

    await new Promise((resolve) => setTimeout(resolve, intervalMs))
  }

  throw new Error('Generation timed out after maximum polling attempts')
}

Python Polling-Implementierung

import time

def poll_for_result(task_id: str, max_attempts: int = 60, interval: float = 3.0) -> str:
    for _ in range(max_attempts):
        response = requests.get(
            f"https://api.seedance.ai/v2/tasks/{task_id}",
            headers=headers,
        )
        response.raise_for_status()
        data = response.json()["data"]

        if data["status"] == "completed":
            return data["video_url"]

        if data["status"] == "failed":
            raise RuntimeError(f"Generation failed: {data.get('error', 'Unknown')}")

        time.sleep(interval)

    raise TimeoutError("Generation timed out")

Polling-Best-Practices:

  • In den ersten 30 Sekunden mit 3-Sekunden-Intervallen beginnen
  • Nach 30 Sekunden auf 5-Sekunden-Intervalle erhöhen
  • Ein maximales Timeout von 3-5 Minuten festlegen
  • Exponentielles Backoff für Rate-Limited-Antworten implementieren

Webhook-Integration

Webhooks eliminieren die Notwendigkeit des Pollings, indem sie eine Benachrichtigung an Ihren Server senden, wenn die Generierung abgeschlossen ist. Dies ist der empfohlene Ansatz für Produktionssysteme.

Webhook-Einrichtung

// Webhook-Endpunkt registrieren
async function registerWebhook(url) {
  const response = await fetch('https://api.seedance.ai/v2/webhooks', {
    method: 'POST',
    headers,
    body: JSON.stringify({
      url,
      events: ['generation.completed', 'generation.failed'],
    }),
  })

  return response.json()
}

Webhook-Payload

Wenn die Generierung abgeschlossen ist, sendet Seedance eine POST-Anfrage an Ihre Webhook-URL:

{
  "event": "generation.completed",
  "task_id": "task_abc123",
  "status": "completed",
  "video_url": "https://cdn.seedance.ai/results/...",
  "duration": 4,
  "created_at": "2026-02-11T10:30:00Z",
  "completed_at": "2026-02-11T10:31:15Z"
}

Express.js Webhook-Handler

app.post('/webhooks/seedance', express.json(), (req, res) => {
  const { event, task_id, video_url, status } = req.body

  if (event === 'generation.completed') {
    // Abgeschlossenes Video verarbeiten
    processCompletedVideo(task_id, video_url)
  }

  if (event === 'generation.failed') {
    // Fehler behandeln
    handleGenerationFailure(task_id)
  }

  res.status(200).json({ received: true })
})

Webhook-Sicherheit:

  • Webhook-Signatur-Header überprüfen, um zu bestätigen, dass Anfragen von Seedance stammen
  • Nur HTTPS-Endpunkte verwenden
  • Innerhalb von 5 Sekunden mit Status 200 antworten, um Wiederholungen zu vermeiden
  • Idempotente Verarbeitung implementieren, um doppelte Zustellungen zu handhaben

Fehlerbehandlung

Die Seedance API verwendet Standard-HTTP-Statuscodes mit strukturierten Fehlerantworten. Ordnungsgemäße Fehlerbehandlung ist entscheidend für die Produktionszuverlässigkeit.

Fehlerantwortformat:

{
  "status": "error",
  "error": {
    "code": "RATE_LIMITED",
    "message": "Rate limit exceeded. Retry after 30 seconds.",
    "retry_after": 30
  }
}

Häufige Fehlercodes:

HTTP-StatusFehlercodeBeschreibungMaßnahme
400INVALID_PARAMSUngültige AnfrageparameterAnfragebody korrigieren
401UNAUTHORIZEDUngültiger oder abgelaufener API-SchlüsselSchlüssel prüfen/rotieren
403FORBIDDENPlan erlaubt diese Aktion nichtPlan upgraden
429RATE_LIMITEDZu viele gleichzeitige AnfragenWarten und erneut versuchen
500INTERNAL_ERRORServerseitiger FehlerMit Backoff erneut versuchen
503SERVICE_UNAVAILABLEVorübergehende WartungNach Verzögerung erneut versuchen

JavaScript Fehlerbehandlung mit Retry

async function apiRequestWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options)

    if (response.ok) {
      return response.json()
    }

    if (response.status === 429) {
      const data = await response.json()
      const retryAfter = data.error?.retry_after ?? 30
      await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000))
      continue
    }

    if (response.status >= 500) {
      const backoffMs = Math.pow(2, attempt) * 1000
      await new Promise((resolve) => setTimeout(resolve, backoffMs))
      continue
    }

    const errorData = await response.json()
    throw new Error(`API error ${response.status}: ${errorData.error?.message ?? 'Unknown'}`)
  }

  throw new Error('Maximum retries exceeded')
}

Python Fehlerbehandlung mit Retry

def api_request_with_retry(method: str, url: str, max_retries: int = 3, **kwargs) -> dict:
    for attempt in range(max_retries):
        response = requests.request(method, url, headers=headers, **kwargs)

        if response.ok:
            return response.json()

        if response.status_code == 429:
            retry_after = response.json().get("error", {}).get("retry_after", 30)
            time.sleep(retry_after)
            continue

        if response.status_code >= 500:
            time.sleep(2 ** attempt)
            continue

        response.raise_for_status()

    raise RuntimeError("Maximum retries exceeded")

Ratenlimits und Kontingente

Ratenlimits variieren je nach Plan und gelten für gleichzeitige Anfragen, nicht für das tägliche Gesamtvolumen.

PlanGleichzeitige AnfragenAnfragen/MinuteTageslimit
Kostenlos2105 Generierungen
Pro1060100 Generierungen
Business50+IndividuellUnbegrenzt

Ratenlimit-Header: Jede API-Antwort enthält Ratenlimit-Informationen:

X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1707654321

Überwachen Sie diese Header, um Ihre Anfragerate proaktiv zu verwalten und Limits während Spitzennutzung zu vermeiden.

Produktions-Workflows aufbauen

Für Produktionssysteme, die Video in großem Maßstab generieren, implementieren Sie warteschlangenbasierte Verarbeitung, um die Parallelität zu verwalten, Fehler elegant zu behandeln und den Durchsatz zu optimieren.

Batch-Verarbeitungsmuster

async function processBatch(prompts) {
  const concurrencyLimit = 5
  const results = []

  for (let i = 0; i < prompts.length; i += concurrencyLimit) {
    const batch = prompts.slice(i, i + concurrencyLimit)

    const batchResults = await Promise.allSettled(
      batch.map(async (prompt) => {
        const taskId = await generateTextToVideo(prompt)
        const videoUrl = await pollForResult(taskId)
        return { prompt, videoUrl }
      })
    )

    const settled = batchResults.map((result) =>
      result.status === 'fulfilled'
        ? result.value
        : { error: result.reason.message }
    )

    results.push(...settled)
  }

  return results
}

Warteschlangenbasierte Architektur

Für Anwendungen mit hohem Volumen verwenden Sie eine Nachrichtenwarteschlange, um Übermittlung von Verarbeitung zu entkoppeln:

Client → API Gateway → Nachrichtenwarteschlange → Worker Pool → Seedance API

                                       Status Store → Webhook / Polling

Empfohlene Warteschlangendienste: Bull (Redis), AWS SQS, Google Cloud Tasks oder RabbitMQ.

Kostenüberwachung

Verfolgen Sie API-Ausgaben programmatisch über den Account-Endpunkt:

async function checkUsage() {
  const response = await fetch('https://api.seedance.ai/v2/account', {
    headers,
  })
  const data = await response.json()

  return {
    plan: data.data.plan,
    usedToday: data.data.generations_today,
    limitToday: data.data.generations_limit,
    billingCycleSpend: data.data.current_spend,
  }
}

Für detaillierte Preisinformationen einschließlich Mengenrabatten siehe unseren Seedance-Preisleitfaden.

FAQ

Wie erhalte ich einen Seedance API-Schlüssel?

Erstellen Sie ein Konto im Seedance-Entwicklerportal (Dreamina-Plattform), navigieren Sie zu Ihrem Dashboard und generieren Sie einen API-Schlüssel. API-Zugang über die kostenlose Stufe ist verfügbar.

Welche Programmiersprachen unterstützt die Seedance API?

Die Seedance API ist eine REST API, die mit jeder Sprache funktioniert, die HTTP-Anfragen stellen kann. Offizielle Beispiele werden in JavaScript, Python und cURL bereitgestellt.

Wie lange dauert die Seedance API-Generierung?

Die Generierung dauert typischerweise 30-120 Sekunden, abhängig von Auflösungs- und Dauereinstellungen. Die API verwendet asynchrones Polling zur Statusprüfung der Generierung.

Was ist das Seedance API-Ratenlimit?

Ratenlimits hängen von Ihrem Plan ab. Die kostenlose Stufe erlaubt ungefähr 2 gleichzeitige Anfragen, Pro erlaubt bis zu 10 und Business-Pläne haben individuelle Limits.

Unterstützt die Seedance API Webhooks?

Ja. Sie können eine Webhook-URL konfigurieren, um Benachrichtigungen zu erhalten, wenn die Videogenerierung abgeschlossen ist, wodurch das Status-Polling entfällt.

Kann ich die Seedance API für kommerzielle Projekte nutzen?

Ja. Die API-Nutzung im Pro- und Business-Plan umfasst kommerzielle Lizenzierung. Prüfen Sie die Nutzungsbedingungen für spezifische Nutzungsrechte.

Verwandte Artikel

AIVidPipeline

Redaktionsteam

AIVidPipeline veröffentlicht Tutorials, Modellvergleiche und Workflow-Guides für KI-Video-, Bild- und Musik-Creator. Unser Redaktionsteam verfolgt Produktupdates, prüft Funktions- und Preisangaben und überführt diese Recherche in praxisnahe Empfehlungen.

pages.blog.messages.cta_title

pages.blog.messages.cta_description

Seedance 2.0 API: Vollständiger Integrationsleitfaden (2026)