Generación de vídeo con Seedance 2.0 Mini (asíncrona): el nivel de entrada, el más barato por segundo de la plataforma; la duración es cualquier entero de 5 a 15 segundos, resolución 480P / 720P (por defecto 720P), cinco relaciones de aspecto, y audio activa o desactiva la banda sonora (por defecto true); incluye image para imagen a vídeo. Devuelve un id de trabajo (HTTP 202); consulta GET /v1/videos/jobs/{id}. Se factura por segundo (incluidos los segundos de los vídeos de referencia) y se reembolsa íntegramente si falla.
Probar en el Playground →Autenticación
Authorization: Bearer YOUR_API_KEY Content-Type: application/json
Crea una clave API en la consola para empezar.
Cuerpo de la petición
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| model | string | Sí | ID del modelo; aquí seedance-2.0-mini. |
| prompt | string | Sí | Prompt de texto que describe el vídeo, la cámara y el movimiento. Máximo 5000 bytes (UTF-8; un carácter chino cuenta como 3). Con varias imágenes de referencia puedes mencionarlas como @Image1 / @Image2 en el prompt, por ejemplo «el personaje de @Image1 en la escena de @Image2»; sin esas marcas, el modelo decide por su cuenta. |
| duration | integer | No | Duración en segundos, cualquier entero de 5 a 15 (por defecto 5); alias seconds. Se factura por segundo. |
| resolution | string | No | Resolución: 480P / 720P (por defecto 720P; cada nivel tiene su propia tarifa, consulta la página del modelo). |
| size | string | No | Relación de aspecto: 16:9 / 9:16 / 1:1 / 4:3 / 3:4 (por defecto 16:9); alias aspect_ratio. |
| audio | boolean | No | Cada vídeo sale con sonido (diálogo, efectos y música generados a partir del prompt); no se puede desactivar y false no tiene efecto. |
| image | string | No | Una imagen de referencia (URL pública, data: URI o base64) que llega al modelo como referencia de los personajes, los objetos, la escena o el estilo; para varias usa images. Esta línea no controla el primer fotograma, así que la imagen no tiene por qué abrir el clip. Sin ninguna referencia es texto a vídeo. |
| images | array | No | Varias imágenes de referencia. Este modelo admite hasta 9. Cada elemento puede ser una URL pública, un data: URI o base64. Si superas el límite se rechaza en lugar de recortar. Alias reference_images. Cada imagen hasta 16 MB, jpg / png / webp / gif; menciónalas en orden como @Image1, @Image2, ... en el prompt. |
| image_role | string | No | Opcional. Las imágenes de referencia se usan siempre como referencia (personajes, escena, estilo) y se mencionan como @Image1... en el prompt; el modelo no controla el primer ni el último fotograma. |
| audio_reference | string / array | No | Enlaces http(s) públicos de audio de referencia. Hasta 3, y deben acompañar a una imagen o un vídeo de referencia. Alias audio_references (no envíes ambos a la vez). También admite base64 (data:audio/mpeg;base64,...), mp3 / wav / m4a; menciónalo como @Audio1 en el prompt. |
| video_references | array | No | Vídeos de referencia, hasta 3. Cada uno puede ser una URL http(s) pública o un archivo local enviado en línea como base64 (data:video/mp4;base64,..., mp4 / mov, hasta 50 MB cada uno); lo alojamos nosotros y pasamos el enlace al proveedor. Se puede combinar con imágenes de referencia en la misma solicitud (por ejemplo, fotos para el aspecto de los personajes y un vídeo para el movimiento y la cámara); menciónalos en el prompt como @Image1 / @Video1. Cada vídeo dura como máximo 30 s, 15 s en total; las referencias que alojamos se guardan 7 días. |
Ejemplo de petición
# 1) submit -> 202 {"id":"img_...","status":"queued"}
curl https://kovapi.com/v1/videos/generations -H 'Authorization: Bearer YOUR_API_KEY' -H 'Content-Type: application/json' -d '{"model": "seedance-2.0-mini", "prompt": "a cat surfing a wave at sunset", "duration": 5, "resolution": "720P", "size": "16:9"}'
# with references: add "images": ["https://example.com/a.png"], "video_references": ["https://example.com/move.mp4"], "audio_reference": ["https://example.com/bgm.mp3"] and name them @Image1 / @Video1 / @Audio1 in the prompt
# 2) poll every ~5s until status=succeeded, then read data[0].url
curl https://kovapi.com/v1/videos/jobs/img_3f9a...c2 -H 'Authorization: Bearer YOUR_API_KEY'Respuesta
{
"id": "img_3f9a...c2",
"object": "video.generation.job",
"status": "queued",
"model": "seedance-2.0-mini"
}Trabajo de vídeo asíncrono (enviar → consultar)
Al enviar recibes al instante HTTP 202 y un id de trabajo; consulta hasta que status=succeeded y lee data[0].url (un enlace mp4). Los valores admitidos de duración, resolución y tamaño están en la tabla de parámetros de arriba; añade un parámetro image para imagen a vídeo.
curl https://kovapi.com/v1/videos/generations -H 'Authorization: Bearer YOUR_API_KEY' -H 'Content-Type: application/json' -d '{"model": "seedance-2.0-mini", "prompt": "un gato surfeando al atardecer", "size": "16:9"}'{ "id": "img_3f9a...c2", "object": "video.generation.job", "status": "queued", "model": "seedance-2.0-mini" }curl https://kovapi.com/v1/videos/jobs/img_3f9a...c2 -H 'Authorization: Bearer YOUR_API_KEY'
{
"id": "img_3f9a...c2",
"object": "video.generation.job",
"status": "succeeded",
"model": "seedance-2.0-mini",
"data": [{ "url": "https://img.kovapi.com/i/9f86d081a8....mp4" }]
}🕑 data[0].url es un enlace de nuestro alojamiento de imágenes que se conserva 15 días y después se elimina automáticamente; si necesitas seguir usándolo, descárgalo y guárdalo en tu propio almacenamiento o CDN.
Facturado por segundo ($0.046/s x duración); la retención coincide exactamente con el cargo, y un render fallido o caducado se reembolsa íntegramente de forma automática.
¿Prefieres no consultar el estado? Añade callback_url al enviar la tarea y te enviaremos el resultado a tu servidor cuando termine, o configura un endpoint por defecto en la consola. Documentación de webhooks →
Requisitos de contenido
Todos los trabajos de Seedance pasan por una revisión de contenido que cubre el prompt, los archivos de referencia y el vídeo final, tanto la imagen como el sonido. Un trabajo que no la supera termina con content_policy y no se cobra.
Cuándo se revisa
Al enviar se revisan el prompt y las referencias; cuando el vídeo está generado se revisan de nuevo la imagen y el sonido. Por eso un rechazo puede llegar segundos después de enviar o solo al terminar el renderizado (puede tardar más de media hora). Un trabajo que termina con status failed y error.code content_policy no superó la revisión; con un webhook recibes el evento video.failed.
Sin cargo
Un trabajo rechazado no cuesta nada: el importe retenido al enviarlo se devuelve íntegro cuando termina, y el registro de llamadas lo muestra como no cobrado.
Sonido
El sonido (diálogos, narración, canto y efectos) lo genera el modelo a partir de tu prompt y se revisa junto con la imagen: los diálogos, la narración y las letras del prompt se locutan o se cantan. Para un vídeo sin voces, no pongas diálogos ni letras en el prompt. Este modelo siempre añade sonido; no se puede desactivar y audio: false no tiene efecto. El audio de referencia que subas también se revisa, y la música con derechos de autor usada como referencia puede ser rechazada. Cuando el sonido no supera la revisión, error.param es audio y el mensaje indica si fue el sonido generado o tu audio de referencia.
Contenido que más se rechaza
- Contenido sexual, desnudos o insinuación sexual, incluidas imágenes generadas o compuestas con IA
- Sangre, crueldad, autolesiones y heridas violentas como disparos o hemorragias
- Armas de fuego, explosivos y drogas
- Cualquier contenido sexualizado con menores; también se rechazan menores con alcohol, tabaco, drogas o en situaciones de peligro
- Políticos, famosos, deportistas, empresarios y otras figuras públicas, por su aspecto o su voz, incluidos los parecidos
- Personajes y propiedad intelectual protegidos, como personajes de Disney o Marvel
- Contenido de odio o discriminatorio, y noticias falsas
Guiones largos
Una sola toma que incumpla las normas hace fallar el vídeo entero, y donde más ocurre es en los guiones largos: un tiroteo o un primer plano de sangre en una escena de acción, o menores bebiendo o fumando, hunden todo el vídeo. Lee el guion completo antes de enviarlo y elimina o reescribe esas tomas.
Personas reales
Para usar la foto de una persona real como referencia necesitas el derecho a usar su imagen; si un modelo admite referencias de personas reales se indica más arriba en esta página.
Tras un rechazo
Reenviar lo mismo vuelve a ser rechazado. Localiza la parte que probablemente falla, reescribe el prompt o cambia la referencia y vuelve a enviarlo.
Código de error: content_policy · status: failed
Códigos de error
Todos los errores llevan error.message / error.type / error.code / error.param; decide según code. Abajo están los más habituales; la lista completa está en Códigos de error.
| HTTP | code | Descripción |
|---|---|---|
| 401 | invalid_api_key | Falta la clave, o es inválida o está desactivada (missing_api_key, invalid_api_key). |
| 402 | insufficient_quota | Saldo insuficiente, o la clave llegó a su presupuesto (insufficient_quota). |
| 400 | invalid_request | Un parámetro incorrecto o un modelo desconocido (como model_not_found); error.param indica el campo. |
| — | content_policy | No superó la revisión de contenido: se marcó el prompt, una referencia o la imagen o el sonido generados. No se cobra; lo mismo se rechazará de nuevo, así que reescribe el prompt o cambia la referencia. En los trabajos de vídeo llega en error cuando status es failed. |
| 429 | rate_limit_exceeded | Superaste el límite por minuto de esta clave o la cuota diaria de un modelo gratuito, o el modelo está al límite de su capacidad (rate_limit_exceeded). Espera los segundos de Retry-After si viene, o unos segundos si no, y reintenta. |
| 502 | upstream_* | El proveedor falló o tardó demasiado y los reintentos automáticos no bastaron; code indica el motivo, por ejemplo upstream_timeout o upstream_unavailable. No se cobra; puedes reintentar. |