DEV Community

Cover image for Cómo Usar la API Seedance 2.0 en 2026
Roobia
Roobia

Posted on • Originally published at apidog.com

Cómo Usar la API Seedance 2.0 en 2026

En resumen

La API de Seedance 2.0 se lanzó el 2 de abril de 2026 a través de Volcengine Ark. Para generar un video, envía una tarea con una solicitud POST y luego consulta un endpoint GET hasta que el estado sea "succeeded". La API soporta texto a video, imagen a video, control de primer y último fotograma, referencias multimodales y generación de audio nativo. Un video de 5 segundos en 1080p cuesta aproximadamente $0.93. Descargue el video en las primeras 24 horas: la URL caduca después de ese tiempo.

Prueba Apidog hoy

Hypereal AI

Hypereal AI

Probar Hypereal AI

Introducción

El 2 de abril de 2026, la plataforma Volcengine Ark de ByteDance lanzó la API oficial de Seedance 2.0. Antes solo podía usarse desde la consola web. Si has visto tutoriales previos, probablemente muestran la interfaz gráfica. Este artículo aborda la API real para automatizar la generación de video desde código.

💡La API sigue el patrón de tarea asíncrona: POST para crear, obtienes un ID, luego haces polling con GET hasta terminar. Es recomendable probar este flujo de punta a punta antes de integrarlo en producción. Los escenarios de prueba de Apidog permiten encadenar el envío POST, extraer el ID, hacer polling con GET y validar que la respuesta final tenga la URL de video. Instala Apidog gratis para seguir los ejemplos de la sección correspondiente.

Este artículo cubre entradas soportadas, cómo leer el costo desde la respuesta y cómo manejar errores comunes en producción.

¿Qué es Seedance 2.0?

Seedance 2.0 es el modelo de generación de video de ByteDance en Volcengine Ark bajo los IDs doubao-seedance-2-0-260128 (estándar) y doubao-seedance-2-0-fast-260128 (rápido, menor calidad).

Novedades respecto a la v1.5:

  • Control de primer y último fotograma (proporciona imagen inicial y final)
  • Entradas multimodales: puedes enviar imágenes, videoclips y audio en la misma solicitud
  • Generación de audio nativo: diálogos, efectos, música, sonido ambiente
  • Sincronización labial en 8+ idiomas
  • Control de movimiento de cámara vía prompt (dolly, tracking, grúa)
  • Salida de hasta 15s, hasta 2K

Produce videos a 24 fps, con relación de aspecto 1:1 a 21:9 y resolución configurable.

Qué cambió: guía vs API oficial

Guías anteriores, como la de febrero 2026, explicaban la consola web. Desde abril 2026, puedes llamar la API desde cualquier lenguaje, automatizar pipelines y conectar Seedance con tus propias apps. Esta guía reemplaza el flujo manual de la interfaz para desarrolladores.

Requisitos previos

  1. Abre una cuenta en volcengine.com.
  2. Desde la consola de Ark, genera una clave API en:
   https://console.volcengine.com/ark/region:ark+cn-beijing/apikey
Enter fullscreen mode Exit fullscreen mode
  1. Exporta tu clave como variable de entorno:
   export ARK_API_KEY="tu-api-key-aquí"
Enter fullscreen mode Exit fullscreen mode
  1. Usa la clave como Bearer Token en cada solicitud:
   Authorization: Bearer YOUR_ARK_API_KEY
Enter fullscreen mode Exit fullscreen mode

Las cuentas nuevas reciben créditos gratuitos (alcanza para unas 8 generaciones de 15s a 1080p).

Texto a video: su primera solicitud

La URL base de la API es:

https://ark.cn-beijing.volces.com/api/v3
Enter fullscreen mode Exit fullscreen mode

Para enviar una tarea T2V, haz un POST a /v1/contents/generations/tasks.

Ejemplo cURL

curl -X POST "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "doubao-seedance-2-0-260128",
    "content": [
      {
        "type": "text",
        "text": "A golden retriever running through a sunlit wheat field, wide tracking shot, cinematic"
      }
    ],
    "resolution": "1080p",
    "ratio": "16:9",
    "duration": 5,
    "watermark": false
  }'
Enter fullscreen mode Exit fullscreen mode

La API responde con un ID de tarea:

{"id": "cgt-2025xxxxxxxx-xxxx"}
Enter fullscreen mode Exit fullscreen mode

Ejemplo en Python (SDK oficial)

Instala el SDK:

pip install volcenginesdkarkruntime
Enter fullscreen mode Exit fullscreen mode

Envia una tarea:

import os
from volcenginesdkarkruntime import Ark

client = Ark(api_key=os.environ.get("ARK_API_KEY"))

resp = client.content_generation.tasks.create(
    model="doubao-seedance-2-0-260128",
    content=[
        {
            "type": "text",
            "text": "A golden retriever running through a sunlit wheat field, wide tracking shot, cinematic"
        }
    ],
    resolution="1080p",
    ratio="16:9",
    duration=5,
    watermark=False,
)

print(resp.id)
Enter fullscreen mode Exit fullscreen mode

Guarda el ID para el polling.

El patrón de tarea asíncrona: enviar, sondear, descargar

La generación toma entre 60 y 120 segundos para un video de 5s a 1080p. El ciclo de vida de la tarea es:

queued -> running -> succeeded
                  -> failed
                  -> expired
                  -> cancelled
Enter fullscreen mode Exit fullscreen mode

Haz polling al endpoint GET hasta que el estado cambie.

Bucle de polling completo en Python

import os
import time
import requests
from volcenginesdkarkruntime import Ark

client = Ark(api_key=os.environ.get("ARK_API_KEY"))

# Paso 1: Enviar tarea
resp = client.content_generation.tasks.create(
    model="doubao-seedance-2-0-260128",
    content=[
        {"type": "text", "text": "Aerial shot of a mountain lake at sunrise, slow dolly forward"}
    ],
    resolution="1080p",
    ratio="16:9",
    duration=5,
    watermark=False,
)

task_id = resp.id
print(f"Task submitted: {task_id}")

# Paso 2: Polling con backoff exponencial
wait = 10
while True:
    result = client.content_generation.tasks.get(task_id=task_id)
    status = result.status
    print(f"Status: {status}")

    if status == "succeeded":
        video_url = result.content.video_url
        print(f"Video URL: {video_url}")
        break
    elif status in ("failed", "expired", "cancelled"):
        print(f"Task ended with status: {status}")
        break

    time.sleep(wait)
    wait = min(wait * 2, 60)  # máximo 60s

# Paso 3: Descargar el video
if status == "succeeded":
    response = requests.get(video_url, stream=True)
    with open("output.mp4", "wb") as f:
        for chunk in response.iter_content(chunk_size=8192):
            f.write(chunk)
    print("Downloaded: output.mp4")
Enter fullscreen mode Exit fullscreen mode

El backoff exponencial evita saturar la API; el límite de 60s mantiene el flujo práctico.

Imagen a video (I2V): animando una imagen estática

Para animar una imagen:

resp = client.content_generation.tasks.create(
    model="doubao-seedance-2-0-260128",
    content=[
        {
            "type": "text",
            "text": "The woman slowly turns her head and smiles at the camera"
        },
        {
            "type": "image_url",
            "image_url": {"url": "https://example.com/portrait.jpg"}
        }
    ],
    ratio="adaptive",
    duration=5,
    watermark=False,
)
Enter fullscreen mode Exit fullscreen mode

Usa ratio: "adaptive" para conservar la relación de aspecto de la imagen. Máximo 30 MB por imagen y hasta 9 imágenes por solicitud.

Primer y último fotograma: controlando los puntos de inicio y fin

Seedance 2.0 soporta control de fotogramas de inicio y fin. Proporciona ambas imágenes y un prompt:

resp = client.content_generation.tasks.create(
    model="doubao-seedance-2-0-260128",
    content=[
        {
            "type": "text",
            "text": "The flower blooms from bud to full open, macro lens, soft light"
        },
        {
            "type": "image_url",
            "image_url": {"url": "https://example.com/flower-bud.jpg"}
        },
        {
            "type": "image_url",
            "image_url": {"url": "https://example.com/flower-open.jpg"}
        }
    ],
    ratio="adaptive",
    duration=8,
    watermark=False,
)
Enter fullscreen mode Exit fullscreen mode

Incluye las imágenes en orden: primera, luego última. Usa return_last_frame: true para obtener el último fotograma y encadenar secuencias.

Referencia multimodal: combinando imágenes, video y audio

Puedes enviar múltiples tipos de entrada en el array content:

  • {"type": "text", "text": "..."}
  • {"type": "image_url", "image_url": {"url": "..."}}
  • {"type": "video_url", "video_url": {"url": "..."}}
  • {"type": "audio_url", "audio_url": {"url": "..."}}

Límites:

  • Hasta 9 imágenes (≤30MB c/u)
  • Hasta 3 videos (2–15s, ≤50MB c/u)
  • Hasta 3 audios (MP3, ≤15MB c/u)

Ejemplo:

resp = client.content_generation.tasks.create(
    model="doubao-seedance-2-0-260128",
    content=[
        {
            "type": "text",
            "text": "Match the visual style of the reference clip and add the provided background audio"
        },
        {
            "type": "image_url",
            "image_url": {"url": "https://example.com/style-reference.jpg"}
        },
        {
            "type": "video_url",
            "video_url": {"url": "https://example.com/motion-reference.mp4"}
        },
        {
            "type": "audio_url",
            "audio_url": {"url": "https://example.com/background-music.mp3"}
        }
    ],
    duration=10,
    ratio="16:9",
    watermark=False,
)
Enter fullscreen mode Exit fullscreen mode

Si incluyes referencia de video la tarifa baja a V2V (~$3.90/millón tokens).

Generación de audio nativo

Para que Seedance genere audio junto con el video:

resp = client.content_generation.tasks.create(
    model="doubao-seedance-2-0-260128",
    content=[
        {
            "type": "text",
            "text": "A street musician plays guitar outside a cafe in Paris, crowds passing by, city sounds"
        }
    ],
    resolution="1080p",
    ratio="16:9",
    duration=10,
    generate_audio=True,
    watermark=False,
)
Enter fullscreen mode Exit fullscreen mode

La generación conjunta de audio y video incrementa ligeramente el consumo de tokens.

Controlando la resolución, la relación de aspecto y la duración

  • resolution: "480p", "720p", "1080p", "2K" (default: "1080p")
  • ratio: "16:9", "9:16", "4:3", "3:4", "21:9", "1:1", "adaptive"
  • duration: entero de 4 a 15 (segundos, default: 5)

El modelo rápido (doubao-seedance-2-0-fast-260128) es útil para pruebas rápidas con menor calidad.

Elige Seedance 2.0 si necesitas audio+video nativo, control de fotogramas o entradas multimodales. Para tareas simples y bajo costo, usa el modelo rápido a 480p.

Leyendo el costo de la respuesta

Cuando una tarea termina, la respuesta incluye el campo usage:

{
  "usage": {
    "completion_tokens": 246840,
    "total_tokens": 246840
  }
}
Enter fullscreen mode Exit fullscreen mode

Ejemplos:

  • 15s 1080p ≈ 308,880 tokens
  • 5s 1080p ≈ 102,960 tokens

Precios:

  • T2V/I2V 1080p: 46 yuanes/millón tokens (~$6.40)
  • V2V: 28 yuanes/millón tokens (~$3.90)

Calcula tu costo multiplicando completion_tokens por la tarifa correspondiente.

Importante: descargue el video en un plazo de 24 horas

La video_url caduca a las 24h de completada la tarea. Después, devuelve error 403 y el archivo se elimina. Descarga el archivo tan pronto como el estado sea "succeeded".

El campo execution_expires_after indica la expiración en segundos (registro de tarea: hasta 48h, pero la URL del video solo 24h). El historial de tareas está limitado a 7 días.

Cómo probar la API de Seedance con Apidog

El flujo asíncrono requiere múltiples pasos encadenados. Los escenarios de prueba de Apidog permiten automatizar todo el ciclo:

Escenario Apidog

Paso 1: Crea un escenario de prueba

  • En Apidog, abre el módulo Pruebas y crea un escenario "Seedance 2.0 video generation".
  • Define ARK_API_KEY como variable de entorno.
  • Usa {{ARK_API_KEY}} donde corresponda.

Paso 2: Agrega la solicitud de envío

  • POST a https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks con el Bearer Token y el JSON del modelo.
  • Extrae el ID usando JSONPath $.id y guárdalo en TASK_ID.

Paso 3: Agrega un procesador de Espera

  • Añade un delay de 30s para dar tiempo al modelo.

Paso 4: Agrega la solicitud de polling en bucle For

  • Crea un bucle de máximo 20 iteraciones.
    1. GET a /api/v3/contents/generations/tasks/{{TASK_ID}} con autorización.
    2. Espera 10s.
    3. Condición de ruptura: $.status == "succeeded" o $.status == "failed".

Paso 5: Agrega afirmaciones

  • Verifica que $.status sea "succeeded" y que $.content.video_url no esté vacío.

Al ejecutar el escenario, Apidog muestra cada paso, el ID, los estados y si las afirmaciones pasaron. Puedes importar endpoints Seedance desde un comando cURL.

Desglose de precios: lo que cuesta un video de 10 segundos

Seedance usa un modelo de pago por tokens. No hay mensualidades, solo pagas según consumo.

Tipo de tarea Tarifa (por 1M tokens)
T2V / I2V a 1080p 46 yuanes (~$6.40)
V2V (referencia video) 28 yuanes (~$3.90)

Costos aproximados a 1080p:

Duración Tokens aprox. Costo (T2V/I2V)
5 segundos ~103,000 ~0.66 yuanes / ~$0.93
10 segundos ~206,000 ~9.48 yuanes / ~$1.32
15 segundos ~309,000 ~14.21 yuanes / ~$1.97

Las cuentas nuevas tienen créditos de prueba para unos 8 videos de 15s. Usa esta cuota para experimentar. Menor resolución reduce mucho el consumo de tokens.

Errores comunes y soluciones

429 Demasiadas Solicitudes

  • Es límite de concurrencia, no de requests/minuto. Usa backoff exponencial (espera 10s, duplica en cada intento, máximo 60s).

estado: "failed"

  • Prompt prohibido, imagen dañada, archivo demasiado grande o parámetros inválidos. Revisa entradas y vuelve a enviar.

estado: "expired"

  • La tarea estuvo en cola demasiado tiempo. Reenvía la tarea.

403 en video_url

  • La URL caducó (más de 24h). El registro aún existe, pero debes regenerar el video.

Reproducibilidad de la semilla

  • Si guardas el parámetro seed, úsalo para intentar reproducir el mismo resultado.

Conclusión

La API de Seedance 2.0 permite automatizar generación de video avanzada: POST para crear tarea, polling hasta éxito, descarga inmediata. Entradas multimodales, audio nativo y control de fotogramas son ventajas clave. Configura tus tests en Apidog para detectar errores de lógica, extracción o expiración antes de ir a producción.

Preguntas Frecuentes (FAQ)

P: ¿Cuál es la diferencia entre doubao-seedance-2-0-260128 y doubao-seedance-2-0-fast-260128?

  • El modelo estándar da mayor calidad, recomendado para producción. El rápido es más veloz pero con menor calidad, ideal para iterar prompts.

P: ¿Puedo usar Seedance 2.0 fuera de China?

  • El endpoint está en Beijing. Puedes llamarlo desde fuera, pero la latencia será mayor. Revisa restricciones de tu cuenta Volcengine.

P: ¿Cómo encadeno varios clips en un video largo?

  • Usa return_last_frame: true para obtener el último fotograma y pásalo como primer fotograma de la siguiente solicitud. Une los clips con una herramienta de edición.

P: ¿La generación de audio nativo cuesta más?

  • Sí, incrementa ligeramente el consumo de tokens.

P: ¿Puedo establecer un webhook en lugar de polling?

  • Sí, proporciona callback_url en la solicitud. El API enviará el resultado cuando cambie el estado.

P: ¿Qué pasa si envío más de 9 imágenes?

  • Recibirás un error 400 de validación.

P: ¿La semilla garantiza reproducción exacta?

  • Acerca la salida, pero no es 100% garantizado si cambian parámetros o versión del modelo.

P: ¿Cómo hago seguimiento de gasto en varias tareas?

  • Lee completion_tokens en cada respuesta, multiplícalo por la tarifa y almacena el dato. No hay panel de costos, así que gestiona el seguimiento en tu app.

Top comments (0)