API de Seedance 3.0 para desarrolladores / v1

Seedance 2.5.
Dentro de tu producto.

Convierte texto, imágenes y archivos de referencia en vídeo con una sola API. Utiliza tus créditos de Seedance 3.0, conserva tu flujo de trabajo e integra la generación con un proceso claro desde la solicitud hasta el resultado.

Créditos compartidos de la cuentaTareas de vídeo asíncronasSolicitudes idempotentes
POST /api/v1/videos
{
  "model": "seedance-2.5",
  "mode": "text-to-video",
  "prompt": "A paper boat drifting into the morning light",
  "duration": 5,
  "resolution": "720p",
  "aspectRatio": "16:9"
}
Tu clave. Tus créditos. Tu aplicación.
01 / EMPIEZA A DESARROLLAR

Tu primer vídeo en unas pocas solicitudes.

Guarda tu clave como SEADANCE_API_KEY en el servidor. Asigna a SEADANCE_REQUEST_KEY un valor único para este vídeo (por ejemplo, con uuidgen) y conserva ese valor para los reintentos. Asegúrate de que tu cuenta tenga suficientes créditos. Este ejemplo reserva 350 créditos para un vídeo de 5 segundos a 720p. Copia el id devuelto para consultar su estado.

Terminal
export SEADANCE_API_KEY="sd_live_your_key"
# Keep this value for retries; choose a new value for a new video.
export SEADANCE_REQUEST_KEY="${SEADANCE_REQUEST_KEY:-$(uuidgen)}"

curl --fail-with-body "https://seedance3ai.dev/api/v1/videos" \
  -H "Authorization: Bearer $SEADANCE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SEADANCE_REQUEST_KEY" \
  --data '{
  "model": "seedance-2.5",
  "mode": "text-to-video",
  "prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
  "aspectRatio": "16:9",
  "resolution": "720p",
  "duration": 5
}'

Esta documentación nunca inicia una generación automáticamente. Enviar una solicitud de creación consume tus créditos.

Autentícate desde tu servidor.

Cada llamada a la API utiliza Authorization: Bearer sd_live_…. No incluyas las claves en navegadores, aplicaciones móviles, repositorios públicos ni código del cliente. La clave completa se muestra una sola vez; puedes revocarla desde el panel de la API.

URL basehttps://seedance3ai.dev/api/v1

Permisos predeterminados de las claves: videos:write para subidas y generación; videos:read para modelos y estado de las tareas; account:read para créditos. El acceso y los límites de la cuenta se aplican a todas las claves.

Crea una tarea de vídeo.

POST/api/v1/videos

Utiliza Content-Type: application/json y un Idempotency-Key único para cada generación prevista. El servidor puede tardar en obtener la aceptación de la tarea por parte del proveedor. Si la conexión agota el tiempo de espera, repite el mismo cuerpo con la misma clave. HTTP 202 significa que la tarea se ha aceptado, no que haya terminado. Idempotency-Key admite entre 1 y 128 caracteres ASCII imprimibles sin espacios.

ParámetroValores y requisitos
modelstringseedance-2.5

Obligatorio. Actualmente, la API admite Seedance 2.5.

modestringtext-to-video | image-to-video | reference-to-video

Obligatorio. Elige el modo de entrada; los campos multimedia deben corresponder a ese modo.

promptstring3–30.000 caracteres

Obligatorio. Describe la escena, el movimiento y el audio.

durationinteger4, 5, 6, 8, 10, 12, 15, 20, 25, 29, 30

Obligatorio, en segundos. La edición utiliza la duración del vídeo original, redondeada hacia arriba para la facturación.

resolutionstring480p | 720p | 1080p

Obligatorio. Determina la tarifa en créditos.

aspectRatiostring1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 21:9

Obligatorio. La generación a partir de una imagen utiliza la relación de aspecto del primer fotograma.

firstFrameUrl / lastFrameUrlstringpublicObjectUrl del archivo subido

La generación a partir de una imagen requiere un primer fotograma. El último fotograma es opcional.

referenceImageUrlsstring[]Hasta 30 imágenes

Para reference-to-video. Sube primero cada archivo a tu cuenta.

referenceVideoUrls / referenceAudioUrlsstring[]Hasta 10 vídeos / 10 archivos de audio

Cada grupo puede sumar como máximo 30 segundos. El servidor valida los archivos antes de generar el vídeo.

referenceTaskTypestringreference | edit | extend

Opcional; el valor predeterminado es reference. edit y extend requieren reference-to-video con exactamente un vídeo original.

generateAudiobooleantrue

Opcional. Seedance 2.5 incluye audio nativo; se rechaza false.

batchCountinteger1

Opcional. Un vídeo por solicitud.

Mediante estos campos, Seedance 2.5 admite texto, fotogramas iniciales y finales, referencias multimodales, edición y extensión de vídeo. GET /models es la referencia actualizada de las funciones y los precios disponibles.

Ejemplo de solicitud de imagen a vídeo
request.json
{
  "model": "seedance-2.5",
  "mode": "image-to-video",
  "prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
  "aspectRatio": "16:9",
  "resolution": "720p",
  "duration": 5,
  "firstFrameUrl": "YOUR_UPLOADED_PUBLIC_OBJECT_URL"
}
Ejemplo de solicitud con referencias
request.json
{
  "model": "seedance-2.5",
  "mode": "reference-to-video",
  "prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
  "aspectRatio": "16:9",
  "resolution": "720p",
  "duration": 5,
  "referenceImageUrls": [
    "YOUR_UPLOADED_IMAGE_URL"
  ],
  "referenceVideoUrls": [
    "YOUR_UPLOADED_VIDEO_URL"
  ]
}
APORTA TUS REFERENCIAS

Sube una vez. Utiliza la URL como referencia.

Envía POST /uploads con fileName, contentType, size (en bytes) y kind (image, video o audio). Antes de expiresAt, envía los bytes originales del archivo a uploadUrl mediante PUT y las cabeceras requiredHeaders. Tras completar la subida, utiliza publicObjectUrl en la solicitud de generación. Las referencias deben pertenecer a la misma cuenta; no se aceptan URL externas arbitrarias ni entradas en base64.

upload.mjs
// Node.js 20+ · upload once, then use publicObjectUrl
import { readFile } from "node:fs/promises";

const bytes = await readFile("./first-frame.jpg");
const signed = await fetch("https://seedance3ai.dev/api/v1/uploads", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.SEADANCE_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    fileName: "first-frame.jpg", contentType: "image/jpeg",
    size: bytes.length, kind: "image",
  }),
});
const upload = await signed.json();
if (!signed.ok) throw new Error(JSON.stringify(upload));
const stored = await fetch(upload.uploadUrl, {
  method: "PUT", headers: upload.requiredHeaders, body: bytes,
});
if (!stored.ok) throw new Error("Upload failed");
console.log(upload.publicObjectUrl);
// Use this URL as firstFrameUrl in an image-to-video request.

El tamaño y el tipo de contenido declarados deben coincidir con el archivo subido. Las URL de subida caducan; solicita otra si es necesario. La duración, las dimensiones y el formato de los archivos se validan antes de la generación.

Sigue la tarea hasta que termine.

GET /videos/:id devuelve la tarea actual. Consulta cada 5–10 segundos, detente al recibir succeeded o failed y respeta la espera indicada por Retry-After cuando esté presente. Las consultas se limitan a las tareas de API de tu cuenta. La integración actual utiliza consultas periódicas.

GET /api/v1/videos/:id
curl --fail-with-body "https://seedance3ai.dev/api/v1/videos/TASK_ID" \
  -H "Authorization: Bearer $SEADANCE_API_KEY"
queuedprocessingsucceeded / failed
Ejemplo de tarea completada
{
  "id": "a1b2c3d4-1234-4567-8901-abcdef123456",
  "status": "succeeded",
  "credits_reserved": 350,
  "created_at": "2026-10-27T00:00:00.000Z",
  "output": {
    "url": "https://your-result-host.example/video.mp4"
  },
  "error": null,
  "refund_status": "not_applicable"
}

output es null hasta que el vídeo está disponible. Una tarea fallida incluye un error; consulta refund_status para conocer el estado del reembolso de créditos. Descarga cuanto antes los resultados completados. Eliminar un vídeo no restablece su solicitud: repetir ese Idempotency-Key devuelve 410 video_deleted y no puede volver a crearlo.

UNA CUENTA, UN SALDO

Conoce el coste en créditos antes de integrar.

La generación mediante la API utiliza los mismos créditos de la cuenta y las mismas tarifas de Seedance 2.5 que el sitio web. Los créditos se reservan al aceptar una solicitud. Si la generación falla, esos créditos se devuelven al saldo de créditos de compra única. Un error de validación anterior a la creación de la tarea no genera un vídeo facturable.

480p

30créditos / segundo de salida

+ 20 créditos / segundo de vídeo de referencia

720p

70créditos / segundo de salida

+ 50 créditos / segundo de vídeo de referencia

1080p

160créditos / segundo de salida

+ 90 créditos / segundo de vídeo de referencia

Coste = duración de salida × tarifa de salida, más la duración de cualquier vídeo de referencia × tarifa de referencia. La duración de los vídeos de referencia se mide en el servidor; el total se redondea hacia abajo a segundos enteros para la facturación. El audio nativo está incluido. Por ejemplo, 5 segundos a 720p cuestan 350 créditos, o 600 créditos con un vídeo de referencia de 5 segundos.

Consultar modelos, precios y saldo
curl --fail-with-body "https://seedance3ai.dev/api/v1/models" \
  -H "Authorization: Bearer $SEADANCE_API_KEY"

curl --fail-with-body "https://seedance3ai.dev/api/v1/credits" \
  -H "Authorization: Bearer $SEADANCE_API_KEY"

Consulta los créditos disponibles, el historial de solicitudes y los límites de la cuenta en el panel de la API. Añade créditos desde la página de precios del sitio web con la misma cuenta; no existe un saldo independiente ni un endpoint de recarga de la API. No necesitas una suscripción activa si dispones de créditos suficientes. La caducidad de las suscripciones y las reglas de los créditos de compra única son las mismas que en el sitio web.

Añadir créditos no aumenta los límites de frecuencia, concurrencia o uso diario de la API ni reactiva una cuenta desactivada. El límite diario cuenta todos los créditos reservados, incluidos los de generaciones fallidas reembolsadas, y se restablece a las 00:00 UTC. Contacta con soporte si tu aplicación necesita límites más altos.

Ver planes y añadir créditos

Reintenta de forma segura. Evita cargos duplicados.

Utiliza un Idempotency-Key por cada vídeo previsto y consérvalo junto con el cuerpo exacto de la solicitud hasta conocer el resultado. Las claves nuevas representan generaciones nuevas. Las respuestas de error contienen error.code, error.message y request_id; incluye el ID de la solicitud al contactar con soporte.

HTTPSignificadoSiguiente paso
400Solicitud no válidaRevisa el mensaje de error, los campos y las restricciones de los archivos antes de reintentar.
401Clave de API no válidaComprueba la cabecera Bearer. Las claves revocadas no se pueden volver a utilizar.
402Créditos insuficientesAñade créditos a la misma cuenta de Seedance 3.0.
403Acceso denegadoEl acceso a la API está desactivado o la clave no tiene el permiso necesario.
404Vídeo no encontradoUtiliza el ID de una tarea creada por tu cuenta a través de esta API.
409Conflicto de solicitudSi recibes request_in_progress, espera y reintenta con el mismo cuerpo y la misma clave. idempotency_conflict indica que la clave se reutilizó con un cuerpo diferente. request_expired o request_previously_failed confirma que no se envió ningún vídeo: corrige el problema indicado y utiliza una clave nueva.
410Vídeo eliminadovideo_deleted indica que se procesó la solicitud original, pero se eliminó su vídeo. Su clave no puede volver a generar el vídeo. Deja de reintentar; utiliza una clave nueva solo si quieres iniciar deliberadamente una nueva generación facturable.
429Límite de la cuentaRespeta Retry-After. Los límites de frecuencia, tareas simultáneas y créditos diarios se comparten entre todas las claves. Los presupuestos diarios se restablecen a las 00:00 UTC.
500 / 503Error temporal del servicioConserva el Idempotency-Key. Reintenta el mismo envío; no crees una clave nueva cuando el resultado sea incierto.

Si el envío devuelve request_in_progress, espera y repite la misma solicitud. No cambies nunca a una clave nueva solo para evitar un tiempo de espera agotado. Si el reembolso de una tarea fallida sigue pendiente, conserva su ID y contacta con soporte.

¿Listo para conectar tu aplicación?

Crea una clave y desarrolla tu primera integración.

Abrir el panel de la API