Saltar a la documentación
En esta página

Seedance 2.5

Genera videos con Seedance 2.5 utilizando texto, primer y último fotograma o referencias multimodales. Esta página cubre el flujo completo de trabajo, desde la petición hasta el resultado final.

ID de modelo de la API: seedance-2-5

La generación es asíncrona. Guarda el taskId devuelto al crear una tarea, luego consulta su estado o recibe un webhook.

Capacidades

FunciónValores admitidos
Resolución de salida480p · 720p · 1080p
Duración de salida4 a 30 segundos
Relación de aspecto16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Imágenes de referenciaHasta 30 imágenes
Videos de referenciaHasta 10 videos
Audios de referenciaHasta 10 archivos de audio
Suma de referenciasHasta 50 archivos de referencia en total
Duración total por grupo de video/audio30 segundos
seedNo admitido
También admite duration=-1 en el modo de referencia a video; consulta los detalles de edición y precios de video más abajo. image-to-video solo admite adaptive; omite este campo o configúralo como adaptive.

Precios y créditos

La generación de video se cobra en créditos según la duración facturable en segundos. Sin video de entrada, la duración facturable equivale a la del video generado; si se incluye un video de entrada, también se contabiliza la duración del video de referencia.

Los borradores aplican las tarifas de 480p indicadas anteriormente, incluyendo la entrada de vídeo de referencia si corresponde. Las versiones finales aplican la tarifa exclusiva de salida en 1080p de 30 créditos/segundo (no se vuelve a cobrar por la entrada del vídeo de referencia). Por ejemplo, un borrador de 5 segundos sin vídeo de referencia cuesta 50 créditos y la versión final de 5 segundos cuesta 150 créditos adicionales.

La siguiente tabla muestra los créditos cobrados por segundo, no el costo total de la tarea. La tarifa varía según el modelo, la resolución de salida y si se proporcionan videos de referencia en el modo de referencia a video. Para saber cómo calcular el costo total, consulta las fórmulas y los ejemplos que aparecen debajo de la tabla.

Resolución de salidaSin video de referenciaCon video de referencia
480p10 créditos/segundo6 créditos/segundo
720p20 créditos/segundo12 créditos/segundo
1080p30 créditos/segundo20 créditos/segundo
  • Sin video de referencia: segundos de salida × tarifa sin video.
  • Con video de referencia: (segundos de salida + segundos del video de referencia medidos) × tarifa con video. El servidor mide la duración total del video de referencia y la redondea al entero superior en segundos antes de facturar.
  • Las referencias de imagen o de audio por sí solas usan la tarifa sin video. La tarifa con video de referencia solo se aplica en el modo de referencia a video cuando se proporcionan archivos de video.

Ejemplos de cálculo del coste

Video a partir de texto de 5 segundos a 720p: 5 × 20 = 100 créditos.

Video de salida de 5 segundos con un video de referencia de 5 segundos: (5 + 5) × 12 = 120 créditos.

Estos créditos se deducen por adelantado al crear la tarea. Si la tarea se completa correctamente, este monto será el cargo final; no se incrementará ni se reembolsará parcialmente en función de la duración real del resultado. Las tareas fallidas o que superen el tiempo de espera entrarán en proceso de reembolso.

Los créditos se reservan al enviar la petición y se cobran al completarse con éxito. Las tareas que fallen o expiren entran en el proceso de reembolso. El estado refund_failed significa que el reembolso no se completó; revisa los registros de la API o contacta al soporte técnico.

Cómo se cobran los créditos cuando duration=-1

Si la duración se establece en -1, la duración del resultado final no será fija, sino que la determinará el propio modelo.

En la mayoría de los casos, es mejor configurar la duración exacta que necesitas en lugar de -1. Te recomendamos usar -1 únicamente para la edición de video y no para otros escenarios de generación.

Entradas de referenciaCómo se calcula el cargoEjemplo
Con videos de referenciaSe suman las duraciones de todos los videos de referencia y el total se redondea al siguiente segundo completo (este valor se llamará T). El cargo es (T + T) × la tarifa con video: una T representa la duración estimada del resultado y la otra representa la duración del video de entrada.720p con un video de referencia de 5 segundos: (5 + 5) × 12 = 120 créditos.
Sin videos de referencia (solo imágenes o audio)Se toman 30 segundos como la duración estimada del resultado. El cargo es 30 × la tarifa sin video.720p sin videos de referencia: 30 × 20 = 600 créditos.

Autenticación

Crea una clave de API en el panel de control. La clave completa se mostrará una sola vez. Almacénala de forma segura en tu servidor y envíala como Bearer token en cada petición.

URL base

https://api.seevio.ai
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json

Define la variable de entorno SEEVIO_API_KEY antes de ejecutar estos ejemplos. Los ejemplos en JavaScript se ejecutan en tu servidor con Node.js; los de Python usan el paquete requests.

Inicio rápido

Envía esta petición mínima, guarda el taskId recibido y usa el ejemplo de consulta de tarea más abajo. El valor de créditos en la respuesta de creación es el monto reservado.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }
}'

Ejemplo de respuesta de creación de tarea

Una vez aceptada la solicitud anterior, la API devuelve esta respuesta JSON. El parámetro taskId es el identificador de la tarea que se utilizará para las consultas de estado posteriores; credits representa la cantidad de créditos reservados para esta tarea. Esta respuesta confirma la creación de la tarea, pero no significa que el video esté listo. Deberá realizar consultas periódicas del estado de la tarea (polling) o utilizar un Webhook para recibir los resultados del video.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 100
}

Crear una tarea

POST https://api.seevio.ai/v1/videos/generations

Envía un objeto JSON con el modelo, los datos de entrada y una callback_url opcional. Especifica siempre el ID de modelo indicado en esta página; omitir el modelo seleccionará seedance-2-0.

Cuerpo de la petición

CampoTipoRequeridoDescripción y restricciones
model
stringSí

ID del modelo. Para utilizar Seedance 2.5, establece este campo como seedance-2-5.

callback_url
stringNo

Endpoint público HTTPS para recibir callbacks POST en caso de éxito o fallo. No se permiten redes privadas ni localhost.

Ejemplo: https://example.com/webhooks/seevio
input
objectSí

Ajustes de generación. Debe contener un prompt que no esté vacío.

Parámetros de entrada

image_urls es obligatorio en image-to-video. El modo reference-to-video requiere al menos una referencia en image_urls, video_urls o audio_urls.
Cuando draft_task_id esté presente, omite los campos prompt, generation_type, image_urls, video_urls, audio_urls, duration, aspect_ratio, seed, generate_audio, web_search y omni_reference_task_type, incluso si sus valores coinciden con los del borrador. Estos ajustes se heredan automáticamente. No combines draft=true con draft_task_id.

Proporcione image_urls, video_urls y audio_urls como arrays de cadenas de URL (string[]). Todas las URL facilitadas deben ser accesibles públicamente a través de HTTPS, incluidos los archivos multimedia omitidos por el modo seleccionado.

CampoTipoRequeridoPor defectoDescripción y restricciones
input.draft
booleanNofalse

Crea una vista previa del borrador en 480p. Exclusivo de Seedance 2.5. Mutuamente excluyente con draft_task_id.

Valores admitidos
true | false
input.draft_task_id
stringNo—

Crea una versión final en 1080p a partir de un borrador de la API completado de tu propiedad y creado hace menos de 7 días. Proporciona el taskId devuelto por esta API y omite los campos de generación heredados.

Ejemplo: 3f2aK9mR7xQp4TnZ8bLc6YwH
input.output_format
stringNomp4

Contenedor de salida de vídeo. Admite mp4 y mov, tanto para solicitudes de borradores como de versiones finales.

Valores admitidos
mp4 | mov
input.prompt
stringCondicional—

Obligatorio para la generación normal y para la creación de un borrador. No lo envíes al generar una versión final con draft_task_id; el prompt del borrador se hereda automáticamente.

Ejemplo: A cat surfing at sunset
input.generation_type
stringNotext-to-video

text-to-video usa solo el prompt; image-to-video usa 1 o 2 imágenes; reference-to-video admite referencias de imagen, video o audio.

Valores admitidos
text-to-video | image-to-video | reference-to-video
input.image_urls
string[]Condicional[]

image-to-video: 1 imagen para el primer fotograma, o 2 en orden para el primer y último fotograma. reference-to-video: hasta 30 imágenes. Se ignora en text-to-video.

Ejemplo: ["https://example.com/first-frame.jpg"]
input.video_urls
string[]Condicional[]

Solo se procesan en reference-to-video; hasta 10 videos con un máximo combinado de 30 segundos. Se ignora en los demás modos.

Ejemplo: ["https://example.com/source.mp4"]
input.audio_urls
string[]Condicional[]

Solo se procesan en reference-to-video; hasta 10 archivos de audio con un máximo combinado de 30 segundos. Se ignora en los demás modos.

Ejemplo: ["https://example.com/music.mp3"]
input.duration
integerNo5

Duración de salida: de 4 a 30 segundos, por defecto 5. Se admite duration=-1 para borradores y en el modo reference-to-video. Para una versión final, omite el campo duration; se hereda directamente del borrador.

Valores admitidos
-1 | 4–30
Ejemplo: 5
input.aspect_ratio
stringNoadaptive

Relación de aspecto del video de salida. adaptive permite que el modelo defina la relación automáticamente. image-to-video solo admite adaptive; omite este campo o configúralo como adaptive.

Valores admitidos
16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Ejemplo: adaptive
input.resolution
stringNo720p

La generación ordinaria se establece de forma predeterminada en 720p. Los borradores solo admiten 480p (el valor predeterminado del borrador). Las versiones finales solo admiten 1080p (el valor predeterminado de la versión final).

Valores admitidos
480p | 720p | 1080p
Ejemplo: 720p
input.generate_audio
booleanNotrue

Solicita la generación de audio sincronizado.

Valores admitidos
true | false
Ejemplo: true
input.watermark
booleanNofalse

Solicita una marca de agua de IA en el video generado.

Valores admitidos
true | false
Ejemplo: false
input.web_search
booleanNofalse

Permite realizar búsquedas web si el modelo lo admite.

Valores admitidos
true | false
Ejemplo: false
input.return_last_frame
booleanNofalse

Solicita el último fotograma. El resultado de la consulta contendrá data.last_frame_url cuando el fotograma esté disponible; de lo contrario será null.

Valores admitidos
true | false
Ejemplo: true

Los campos booleanos deben ser true o false en formato JSON, no strings ni números.

Respuesta de creación

HTTP 200 devuelve taskId (string) y credits (number). Esto confirma que la tarea se creó correctamente, no que haya finalizado. El monto de ejemplo corresponde al inicio rápido de 5 segundos a 720p.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 100
}

Borrador de prueba → Versión final en 1080p

Seedance 2.5 admite un flujo de trabajo en dos pasos: primero, genera un borrador (Draft) en 480p para comprobar los aspectos visuales y el movimiento; después, reutilízalo para crear la versión final en 1080p. Ambos pasos utilizan POST /v1/videos/generations y crean tareas independientes y facturables.

El modo borrador te ayuda a reducir costes mientras pruebas diferentes ideas. En lugar de generar cada intento en 1080p, puedes crear varios borradores económicos en 480p, elegir el que más te guste y utilizar ese borrador específico para generar la versión final en 1080p. Esto te permite explorar diferentes resultados con un coste menor antes de pagar por la versión elegida en alta definición.

Usa un borrador completado dentro de los 7 días posteriores a su creación para generar el vídeo final. El borrador debe pertenecer a la misma cuenta de la API. Utiliza el taskId devuelto por esta API.

1. Generar un borrador en 480p

Establece input.draft=true y proporciona el prompt habitual, las referencias y los ajustes de generación. La resolución por defecto es 480p en el modo borrador; se rechazarán otras resoluciones. Puedes activar return_last_frame para el borrador, tal como se muestra abajo.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "draft": true,
    "duration": 5,
    "resolution": "480p",
    "return_last_frame": true
  }
}'
{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 50
}

2. Esperar a que se complete el borrador

Guarda el taskId de la respuesta de creación y consulta GET /v1/tasks/TASK_ID hasta que status sea completed. La respuesta de la consulta tendrá is_draft=true; puedes previsualizar el vídeo en data.results. El último fotograma solicitado estará en data.last_frame_url cuando esté disponible.

También puedes recibir un Webhook cuando finalice el borrador. Define el parámetro callback_url en el nivel superior de la solicitud al crear el borrador. Una vez que el borrador se complete, se enviará una notificación a esa URL para que tu servicio procese la retrollamada, guarde el resultado, actualice el estado de la tarea o active tus propios procesos de seguimiento. Consulta el formato de la retrollamada en la sección de Webhooks de esta página.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": true,
  "draft_task_id": null,
  "status": "completed",
  "billing_status": "charged",
  "credits": 50,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": "https://cdn.seevio.ai/api/images/draft-last-frame.jpg",
    "processing_time": 48
  }
}

3. Generar la versión final en 1080p

Reemplaza draft_task_id en este ejemplo por el taskId de tu borrador completado. La versión final hereda el contenido y la duración del borrador. La resolución predeterminada es 1080p y no se admite ninguna otra. Los parámetros output_format, watermark y return_last_frame se pueden configurar de manera independiente para cada versión final; callback_url se mantiene en el nivel superior de la solicitud.

Cuando draft_task_id esté presente, omite los campos prompt, generation_type, image_urls, video_urls, audio_urls, duration, aspect_ratio, seed, generate_audio, web_search y omni_reference_task_type, incluso si sus valores coinciden con los del borrador. Estos ajustes se heredan automáticamente. No combines draft=true con draft_task_id.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "draft_task_id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
    "resolution": "1080p",
    "output_format": "mp4",
    "watermark": false,
    "return_last_frame": true
  }
}'

La respuesta contiene un nuevo taskId para la versión final. Realiza sondeos sobre ese nuevo ID o espera a su correspondiente webhook. La respuesta de consulta de la versión final tiene is_draft=false y el campo draft_task_id coincidirá con el ID de tarea original del borrador en la API. El borrador original seguirá estando disponible. Cada solicitud de versión final aceptada crea una nueva tarea facturada de forma independiente.

{
  "taskId": "final_7mQx2pN8kR4vT9cL6bW3",
  "credits": 150
}

Facturación de borradores y versiones finales

Los borradores aplican las tarifas de 480p indicadas anteriormente, incluyendo la entrada de vídeo de referencia si corresponde. Las versiones finales aplican la tarifa exclusiva de salida en 1080p de 30 créditos/segundo (no se vuelve a cobrar por la entrada del vídeo de referencia). Por ejemplo, un borrador de 5 segundos sin vídeo de referencia cuesta 50 créditos y la versión final de 5 segundos cuesta 150 créditos adicionales.

Para duration=-1, tanto el borrador como su versión final reservan créditos para un máximo de 30 segundos de salida cada uno (además del vídeo de referencia de entrada solo para el borrador). Al finalizar, el cobro se ajusta a la duración real de la salida cuando sea posible determinarla, y se devuelven los créditos reservados que no se hayan utilizado. Una versión final puede reservar hasta 900 créditos.

Si el recurso de origen no está finalizado, ha expirado, no es un borrador o no es accesible, se rechazará con un error HTTP 400 (invalid_request). El uso de una resolución no válida, campos heredados o parámetros de borrador en conflicto también generará un error HTTP 400. Si no hay créditos suficientes, se devolverá un error HTTP 402.

Modos de generación y ejemplos

Reemplaza las URL de ejemplo de example.com con tus propios archivos públicos accesibles mediante HTTPS. Estas URL de ejemplo ilustran el formato de la petición y no son archivos descargables.

Texto a video

Genera video a partir de una descripción de texto. Las URL multimedia no se procesan en este modo.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }
}'

Primer fotograma

Proporciona una imagen como primer fotograma y describe el movimiento deseado en el prompt.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first-frame.jpg"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Primer y último fotograma

Proporciona dos URL de imagen en orden: primero el fotograma inicial y luego el final. Este ejemplo también solicita el último fotograma del video generado.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first-frame.jpg",
      "https://example.com/last-frame.jpg"
    ],
    "aspect_ratio": "adaptive",
    "return_last_frame": true
  }
}'

Referencia multimodal

Combina referencias de imagen, video y audio. El prompt sigue siendo obligatorio. El video de referencia cambia la fórmula de facturación.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Follow the reference camera movement and keep the character consistent. Use the audio for ambience.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "image_urls": [
      "https://example.com/character.jpg"
    ],
    "video_urls": [
      "https://example.com/camera.mp4"
    ],
    "audio_urls": [
      "https://example.com/ambience.mp3"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Referencia de audio

Utiliza audio como única referencia, junto con un prompt de texto obligatorio que describa el video deseado.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Create a coastal sunrise scene matching the rhythm of this audio.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "audio_urls": [
      "https://example.com/music.mp3"
    ]
  }
}'

Edición de video

Para la edición de video en Seedance 2.5, la duración debe establecerse en -1 y la relación de aspecto en adaptive. Ambos ajustes son obligatorios; de lo contrario, no se podrá realizar la generación.

Describe la edición y proporciona el video de origen. Configura duration=-1 y usa una relación de aspecto adaptive. Usa un clip de origen de al menos 4 segundos para este flujo de trabajo. La regla de facturación para duration=-1 se detalla arriba.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Edit the source video: change the character’s coat to blue and preserve the camera movement.",
    "duration": -1,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "video_urls": [
      "https://example.com/source.mp4"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Extensión de video

Para la extensión de video de Seedance 2.5, la relación de aspecto (aspect_ratio) debe establecerse en adaptive; de lo contrario, la generación podría fallar. Configura la duración (duration) de forma habitual para obtener la longitud de video deseada dentro del rango admitido; no es necesario usar -1.

Describe cómo debe continuar el video de origen. Usa una relación de aspecto adaptive y define una duración de salida normal dentro del rango permitido del modelo.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Continue the camera movement from the source video, revealing a forest clearing.",
    "duration": 8,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "video_urls": [
      "https://example.com/source.mp4"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Consultar una tarea

GET https://api.seevio.ai/v1/tasks/{taskId}

Reemplaza el ID de ejemplo por el taskId obtenido al crear la tarea. Las consultas solo devuelven tareas que pertenecen al usuario de la clave API; los ID inaccesibles o desconocidos devuelven HTTP 404.

Realiza consultas cada 10 o 20 segundos como punto de partida, reduce la frecuencia si recibes un HTTP 429 y detente cuando el estado sea completed o failed. Para entornos de producción, se recomienda usar webhooks. Cada ejemplo de código abajo realiza una sola consulta.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
EstadoDescripción y restricciones
queuedAceptada y en cola para procesamiento.
generatingGeneración en curso.
completedFinalizada correctamente. Descarga el archivo de data.results antes de que expire.
failedError al procesar. Revisa failed_reason y billing_status.
CampoTipoDescripción y restricciones
idstring
Identificador de la tarea. Corresponde al taskId de la respuesta de creación.
created_atnumber
Fecha de creación de la tarea en formato de tiempo Unix (segundos).
modelstring
El ID del modelo público utilizado para esta tarea.
is_draftboolean
true para un borrador en 480p; false para una versión final o un vídeo normal.
draft_task_idstring | null
El ID de tarea del borrador de origen en la API para una versión final; null para borradores y vídeos normales.
billing_statusstring
reserved, charged, refunded o refund_failed.
creditsnumber
Créditos reservados para la tarea. Este valor se mantiene tras un reembolso; revisa billing_status para conocer el estado final de la facturación.
failed_reasonstring | null
Razón del fallo en tareas fallidas; de lo contrario null. Las respuestas de consulta fallidas omiten el objeto data.
dataobject
Presente en consultas de tareas que no han fallado. Contiene los detalles de procesamiento y el resultado.
data.resultsstring[]
Array de URL del video. Vacío hasta que finalice la generación o si el video ha expirado.
data.video_expires_atstring | null
Fecha de expiración del video en formato ISO 8601, o null antes de estar disponible. Guarda el resultado antes de esta fecha.
data.last_frame_urlstring | null
URL del último fotograma si se solicitó y está disponible; de lo contrario null.
data.processing_timenumber | null
Duración de procesamiento del proveedor en segundos si está disponible; de lo contrario null.

Tarea completada: respuesta de consulta con resultados del video

Cuando la consulta devuelve status=completed, significa que la generación del video ha finalizado. Puede obtener las URL de los videos desde data.results y descargarlos antes de la fecha indicada en data.video_expires_at. El estado billing_status=charged indica que se han cobrado los créditos reservados.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": false,
  "draft_task_id": null,
  "status": "completed",
  "billing_status": "charged",
  "credits": 100,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Tarea fallida: respuesta de consulta con detalles del error y facturación

Cuando la consulta devuelve status=failed, significa que el proceso de generación ha fallado. Consulte failed_reason para conocer el motivo del error y billing_status para saber si se ha realizado el reembolso. En este ejemplo, refunded indica que se han devuelto los créditos. El campo credits conserva el valor reservado originalmente y la respuesta no incluye data.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": false,
  "draft_task_id": null,
  "status": "failed",
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed"
}

Webhooks

Configura callback_url en la petición de creación para recibir un POST con formato JSON cuando la tarea se complete o falle. Responde con un código 2xx en menos de 15 segundos. Los envíos fallidos se reintentan; procesa los envíos repetidos de forma idempotente usando el ID de la tarea.

Tu endpoint de callback debe aceptar solicitudes POST con un cuerpo en formato JSON (Content-Type: application/json).

Crear una tarea con callback

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  },
  "callback_url": "https://example.com/webhooks/seevio"
}'

Tarea completada: carga útil del callback exitosa

Si la generación se realiza correctamente, el callback devolverá status=completed. Usa el id para identificar la tarea y data.results para obtener las URL de los videos. Asegúrate de descargar y guardar los resultados antes de la fecha indicada en data.video_expires_at.

created_at es la fecha de creación del evento; task_created_at es la de la tarea, en segundos Unix. Los ejemplos muestran los campos recomendados; las respuestas pueden incluir campos adicionales.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652848,
  "model": "seedance-2-5",
  "status": "completed",
  "task_created_at": 1788652800,
  "billing_status": "charged",
  "credits": 100,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Tarea fallida: carga útil del callback con error

Si la generación falla, el callback devolverá status=failed. Usa el id para identificar la tarea, failed_reason para conocer el motivo del fallo y credits_refunded para ver la cantidad de créditos reembolsados.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652848,
  "model": "seedance-2-5",
  "status": "failed",
  "task_created_at": 1788652800,
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed",
  "credits_refunded": 100
}

Ejemplo de receptor

export async function POST(request: Request) {
  const callbackData = await request.json();

  if (callbackData.status === "completed") {
    const videoUrls = callbackData.data.results;
    // Save the video URLs and mark this task as completed in your application.
    console.log(callbackData.id, videoUrls);
  }

  if (callbackData.status === "failed") {
    const { failed_reason, credits_refunded } = callbackData;
    // Record the failure reason and refunded credits for this task.
    console.error(callbackData.id, failed_reason, credits_refunded);
  }

  return new Response(null, { status: 200 });
}

Este ejemplo de Next.js lee el cuerpo de la llamada JSON y procesa directamente las tareas completadas y fallidas. Te recomendamos implementar persistencia y deduplicación de ID de tareas en tu aplicación, así como encolar las tareas lentas antes de confirmar la recepción del callback.

Requisitos y límites de archivos multimedia

  • Todos los archivos multimedia y las URL de callback deben ser direcciones HTTPS públicas. Evita localhost, IP privadas y archivos que requieran cookies o inicio de sesión. Las URL de referencia de video o audio deben enlazar directamente al archivo multimedia.
  • En el modo reference-to-video, proporciona al menos una referencia, con un límite de 30 imágenes, 10 videos, 10 archivos de audio y un total de 50 elementos combinados. La duración total del video y la del audio no pueden superar los 30 segundos cada una.
  • El modo text-to-video ignora todas las referencias multimedia. image-to-video solo procesa la primera y última imagen, ignorando las referencias de video y audio. Usa reference-to-video para combinar archivos multimedia.
  • Cada archivo de video y audio de referencia debe durar entre 2 y 30 segundos. Para los ejemplos de edición de video, utiliza clips de origen de al menos 4 segundos.

Requisitos de las imágenes

  • Cada imagen debe pesar menos de 30 MB.
  • Formatos admitidos: jpeg, png, webp, bmp, tiff y gif.
  • Relación de aspecto (ancho ÷ alto): entre 0,4 y 2,5, ambos inclusive.
  • El ancho y el alto deben estar entre 300 y 6.000 píxeles, ambos inclusive.

Requisitos de los videos

  • Formatos admitidos: mp4 y mov.
  • Cada video no debe superar los 100 MB.
  • Velocidad de fotogramas: entre 24 y 60 FPS, ambos inclusive.
  • Relación de aspecto (ancho ÷ alto): entre 0,4 y 2,5, ambos inclusive.
  • Píxeles totales (ancho × alto): entre 407.696 y 8.295.044, ambos inclusive. Por ejemplo: 614 × 664 = 407.696 y 3.326 × 2.494 = 8.295.044. Estos valores son ejemplos de resolución total, no requisitos de ancho y alto fijos.

Requisitos de los audios

  • Formatos admitidos: wav y mp3.
  • Cada archivo de audio no debe superar los 15 MB.

Errores

Los errores HTTP contienen un objeto error con un código (code) y un mensaje (message). Una tarea aceptada con éxito puede fallar más tarde; consulta su estado o gestiona el callback de fallo.

{
  "error": {
    "code": "invalid_request",
    "message": "input.prompt is required."
  }
}
HTTPCampoQué hacer
400invalid_request
Corrige el JSON, el prompt faltante, el rango de parámetros o la URL del archivo multimedia antes de reintentar.
401invalid_api_key
Verifica el Bearer token y asegúrate de que la clave API esté activa.
402insufficient_credits
Añade créditos o reduce el costo de la tarea. La respuesta puede indicar la cantidad de créditos requeridos y disponibles.
403forbidden
Revisa la restricción de cuenta detallada en el mensaje de error.
404not_found
Verifica el ID de la tarea y que la clave pertenezca al usuario que la creó.
429rate_limited
Espera a que transcurra el intervalo indicado en Retry-After antes de intentarlo de nuevo.
500internal_error
Revisa el mensaje de error y los registros de la API. Reintenta con precaución; reenviar una petición de creación puede generar otra tarea facturable.

Límites de peticiones

Creación de tareas: cada clave de API permite de forma predeterminada un máximo de 100 solicitudes por minuto. Actualmente no están disponibles los límites de tarifa personalizados.

Consulta de tareas: cada clave de API permite de forma predeterminada un máximo de 120 solicitudes por minuto. Las solicitudes de consulta y las de creación de tareas se contabilizan de forma independiente.

HTTP 429 incluye la cabecera Retry-After: 60 para creación y Retry-After: 5 para consultas. Usa un margen de espera y evita realizar consultas con demasiada frecuencia.