Descripción General

Utiliza tu clave API para generar vídeos a través de la API de Seedance. La API admite tanto la generación de texto a vídeo como de imagen a vídeo. La generación de vídeo es asíncrona: envías una tarea y luego consultas los resultados.

Endpoints

Generar Vídeo

  • Método: POST
  • URL: https://api.seedanceapi.dev/v1/video/generate

Consultar Tarea

  • Método: POST
  • URL: https://api.seedanceapi.dev/v1/video/query

Autenticación

Incluye tu clave API en el encabezado Authorization:

Authorization: Bearer TU_CLAVE_API
Content-Type: application/json

Solicitud de Generación de Vídeo

{
  "prompt": "Un gato con gafas de sol caminando por una playa con palmeras de fondo",
  "model": "seedance-pro-5s",
  "image": "https://example.com/reference-image.jpg"
}

Parámetros

ParámetroTipoObligatorioDescripción
promptstringSí*Descripción textual del vídeo
modelstringNoModelo a utilizar (por defecto: seedance-pro-5s)
imagestringNo*URL de imagen de referencia para imagen a vídeo

*Se requiere prompt o image.

Modelos Disponibles

ModeloResoluciónDuraciónCréditos
seedance-lite-5s720p5s12
seedance-lite-10s720p10s24
seedance-pro-5s1080p5s35
seedance-pro-10s1080p10s70
seedance-1.5-pro-5s1080p + Audio5s50
seedance-1.5-pro-10s1080p + Audio10s100

Respuesta de Generación

{
  "code": 0,
  "message": "ok",
  "data": {
    "task_id": "abc123-def456-789",
    "status": "pending",
    "model": "seedance-pro-5s",
    "scene": "text-to-video"
  }
}

Solicitud de Consulta de Tarea

{
  "task_id": "abc123-def456-789"
}

Respuesta de Consulta

{
  "code": 0,
  "message": "ok",
  "data": {
    "task_id": "abc123-def456-789",
    "status": "success",
    "model": "seedance-pro-5s",
    "scene": "text-to-video",
    "videos": [
      {
        "url": "https://cdn.seedanceapi.dev/videos/abc123.mp4"
      }
    ],
    "error": null
  }
}

Valores de Estado de la Tarea

EstadoDescripción
pendingTarea en cola
processingVídeo en generación
successGeneración completada
failedGeneración fallida

Ejemplos

cURL - Generar Vídeo

curl -X POST "https://api.seedanceapi.dev/v1/video/generate" \
  -H "Authorization: Bearer TU_CLAVE_API" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Un gato con gafas de sol caminando por una playa",
    "model": "seedance-pro-5s"
  }'

cURL - Consultar Tarea

curl -X POST "https://api.seedanceapi.dev/v1/video/query" \
  -H "Authorization: Bearer TU_CLAVE_API" \
  -H "Content-Type: application/json" \
  -d '{
    "task_id": "abc123-def456-789"
  }'

Node.js

async function generateVideo() {
  // Paso 1: Enviar tarea de generación de vídeo
  const genRes = await fetch('https://api.seedanceapi.dev/v1/video/generate', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer TU_CLAVE_API',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      prompt: 'Un gato con gafas de sol caminando por una playa',
      model: 'seedance-pro-5s',
    }),
  });

  const genResult = await genRes.json();
  if (genResult.code !== 0) throw new Error(genResult.message);

  const taskId = genResult.data.task_id;
  console.log('Tarea enviada:', taskId);

  // Paso 2: Consultar resultados periódicamente
  while (true) {
    await new Promise((r) => setTimeout(r, 15000)); // Esperar 15 segundos

    const queryRes = await fetch('https://api.seedanceapi.dev/v1/video/query', {
      method: 'POST',
      headers: {
        Authorization: 'Bearer TU_CLAVE_API',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ task_id: taskId }),
    });

    const queryResult = await queryRes.json();
    if (queryResult.code !== 0) throw new Error(queryResult.message);

    const { status, videos, error } = queryResult.data;

    if (status === 'success') {
      console.log('Vídeo listo:', videos[0].url);
      return videos[0].url;
    }

    if (status === 'failed') {
      throw new Error(error || 'La generación del vídeo ha fallado');
    }

    console.log('Estado:', status);
  }
}

Python

import requests
import time


def generate_video():
    headers = {
        'Authorization': 'Bearer TU_CLAVE_API',
        'Content-Type': 'application/json',
    }

    # Paso 1: Enviar tarea de generación de vídeo
    gen_res = requests.post(
        'https://api.seedanceapi.dev/v1/video/generate',
        headers=headers,
        json={
            'prompt': 'Un gato con gafas de sol caminando por una playa',
            'model': 'seedance-pro-5s',
        },
        timeout=60
    )
    gen_result = gen_res.json()
    if gen_result.get('code') != 0:
        raise Exception(gen_result.get('message'))

    task_id = gen_result['data']['task_id']
    print(f'Tarea enviada: {task_id}')

    # Paso 2: Consultar resultados periódicamente
    while True:
        time.sleep(15)  # Esperar 15 segundos

        query_res = requests.post(
            'https://api.seedanceapi.dev/v1/video/query',
            headers=headers,
            json={'task_id': task_id},
            timeout=60
        )
        query_result = query_res.json()
        if query_result.get('code') != 0:
            raise Exception(query_result.get('message'))

        data = query_result['data']
        status = data['status']

        if status == 'success':
            video_url = data['videos'][0]['url']
            print(f'Vídeo listo: {video_url}')
            return video_url

        if status == 'failed':
            raise Exception(data.get('error') or 'La generación del vídeo ha fallado')

        print(f'Estado: {status}')


if __name__ == '__main__':
    generate_video()

Respuestas de Error

{
  "code": 400,
  "message": "Insufficient credits"
}

Códigos de error comunes:

  • 400: Parámetros de solicitud inválidos o créditos insuficientes
  • 401: Clave API inválida
  • 403: Sin permiso para acceder a la tarea
  • 404: Tarea no encontrada
  • 500: Error del servidor