Kling 4.0
Genera videos con Kling 4.0 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: kling-4-0
La generación es asíncrona. Guarda el taskId devuelto al crear una tarea, luego consulta su estado o recibe un webhook.
Capacidades
| Función | Valores admitidos |
|---|---|
| Resolución de salida | 720p · 1080p |
| Duración de salida | 3–30 s |
| Relación de aspecto | auto, 16:9, 9:16, 1:1, 21:9 |
| Imágenes de referencia | Hasta 10 imágenes |
| Videos de referencia | Hasta 5 videos |
| Audios de referencia | Hasta 3 archivos de audio |
| Suma de referencias | Hasta 15 archivos de referencia en total |
| Videos de referencia (Σ) | 30 segundos |
| seed | No admitido |
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.
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 salida | Sin video de referencia | Con video de referencia |
|---|---|---|
720p | 13 créditos/segundo | 8 créditos/segundo |
1080p | 20 créditos/segundo | 13 créditos/segundo |
- Sin video de referencia: segundos de salida × tarifa sin video.
- Con vídeo de entrada, T es la duración total de los vídeos de referencia en segundos medida por el servidor. Redondea los créditos finales hacia arriba.
ceil((duration + max(duration, T)) × rate) - 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 × 13 = 65 créditos.
Video de salida de 5 segundos con un video de referencia de 5 segundos: (5 + 5) × 8 = 80 créditos.
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.
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.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonDefine 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": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video"
}
}'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": 65
}Crear una tarea
POST https://api.seevio.ai/v1/videos/generationsEnvía un objeto JSON que contenga model e input, además de una callback_url opcional. Especifica siempre el model ID que se muestra en esta página; si se omite, se seleccionará por defecto seedance-2-0.
Cuerpo de la petición
| Campo | Tipo | Requerido | Descripción y restricciones |
|---|---|---|---|
model | string | Sí | ID del modelo. Para utilizar Kling 4.0, establece este campo como kling-4-0. |
callback_url | string | No | 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 | object | Sí | Parámetros de entrada |
Parámetros de entrada
| Campo | Tipo | Por defecto | Descripción y restricciones |
|---|---|---|---|
input.generation_type | string | text-to-video | text-to-video | image-to-video | reference-to-video |
input.prompt | string | — | Hasta 8000 caracteres. Opcional solo al generar desde imágenes. Numera las referencias por tipo y orden de la lista desde @Image1, @Video1 y @Audio1. |
input.duration | integer | 5 | 3–30 s |
input.resolution | string | 720p | 720p | 1080p |
input.aspect_ratio | string | Según el modo | Valores admitidos auto16:99:161:121:9Una proporción fija determina el formato de salida. Si omites el campo o eliges auto, el modo de texto usa 16:9 y el de imagen sigue el primer fotograma. El modo de referencia determina la proporción a partir de las imágenes o vídeos de referencia. |
input.image_urls | string[] | [] | Para generar desde imágenes, envía el primer fotograma y después el último si lo necesitas. En modo de referencia se admiten hasta 10 imágenes. |
input.keyframe_urls | string[] | [] | Fotogramas intermedios en orden para generar desde imágenes. Hasta 9 sin fotograma final u 8 con él. |
input.video_urls | string[] | [] | Solo para el modo de referencia. Envía las URL HTTPS de los vídeos que guiarán la acción o el movimiento de cámara. Se admiten hasta 5 vídeos de 2 a 30 segundos cada uno y hasta 30 segundos en total. |
input.audio_urls | string[] | [] | Solo para el modo de referencia. Envía las URL HTTPS de los clips de audio que guiarán la voz o el sonido generados. Se admiten hasta 3 clips de 5 a 30 segundos cada uno. |
input.keep_original_sound | boolean | false | Si video_urls contiene un vídeo de referencia, true conserva su audio original y false (valor predeterminado) genera audio nuevo. Sin vídeo de referencia, se ignora este parámetro. |
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": 65
}Modos de generación y ejemplos
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": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video"
}
}'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": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/first.jpg"
]
}
}'Primer y último fotograma
Para generar desde imágenes, envía el primer fotograma y después el último si lo necesitas. En modo de referencia se admiten hasta 10 imágenes.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling-4-0",
"input": {
"prompt": "",
"duration": 5,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/first.jpg",
"https://example.com/last.jpg"
]
}
}'Ejemplo con fotogramas clave: una rosa que se abre
Crea una secuencia acelerada de 8 segundos con cuatro fotos tomadas desde el mismo ángulo. En image_urls coloca el capullo cerrado y la rosa abierta como primer y último fotograma. En keyframe_urls coloca primero los pétalos que empiezan a abrirse y después la rosa entreabierta. El vídeo pasa del capullo a los primeros pétalos, luego a la flor entreabierta y finalmente a la rosa abierta. La lista fija el orden y el modelo decide cuándo aparece cada etapa.
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.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling-4-0",
"input": {
"prompt": "A time-lapse of a rose opening. Keep the camera still and the light soft as the petals unfold.",
"duration": 8,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/rose-bud.jpg",
"https://example.com/rose-full-bloom.jpg"
],
"keyframe_urls": [
"https://example.com/rose-opening.jpg",
"https://example.com/rose-half-open.jpg"
]
}
}'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": "kling-4-0",
"input": {
"prompt": "Animate @Image1 with the movement of @Video1 and ambience from @Audio1.",
"duration": 5,
"resolution": "720p",
"generation_type": "reference-to-video",
"image_urls": [
"https://example.com/character.jpg"
],
"video_urls": [
"https://example.com/motion.mp4"
],
"audio_urls": [
"https://example.com/surf.mp3"
],
"keep_original_sound": false
}
}'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"| Estado | Descripción y restricciones |
|---|---|
queued | Aceptada y en cola para procesamiento. |
generating | Generación en curso. |
completed | Finalizada correctamente. Descarga el archivo de data.results antes de que expire. |
failed | Error al procesar. Revisa failed_reason y billing_status. |
| Campo | Tipo | Descripción y restricciones |
|---|---|---|
id | string | Identificador de la tarea. Corresponde al taskId de la respuesta de creación. |
created_at | number | Fecha de creación de la tarea en formato de tiempo Unix (segundos). |
model | string | El ID del modelo público utilizado para esta tarea. |
billing_status | string | reserved, charged, refunded o refund_failed. |
credits | number | 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_reason | string | null | Razón del fallo en tareas fallidas; de lo contrario null. Las respuestas de consulta fallidas omiten el objeto data. |
data | object | Presente en consultas de tareas que no han fallado. Contiene los detalles de procesamiento y el resultado. |
data.results | string[] | Array de URL del video. Vacío hasta que finalice la generación o si el video ha expirado. |
data.video_expires_at | string | 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_url | string | null | URL del último fotograma si se solicitó y está disponible; de lo contrario null. |
data.processing_time | number | null | Duración del procesamiento de la tarea 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": "kling-4-0",
"is_draft": false,
"draft_task_id": null,
"status": "completed",
"billing_status": "charged",
"credits": 65,
"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": "kling-4-0",
"is_draft": false,
"draft_task_id": null,
"status": "failed",
"billing_status": "refunded",
"credits": 65,
"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": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video"
},
"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": "kling-4-0",
"status": "completed",
"task_created_at": 1788652800,
"billing_status": "charged",
"credits": 65,
"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": "kling-4-0",
"status": "failed",
"task_created_at": 1788652800,
"billing_status": "refunded",
"credits": 65,
"failed_reason": "provider_failed",
"credits_refunded": 65
}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.
- Cada video no debe superar los 100 MB.
- Cada archivo de audio no debe superar los 15 MB.
- Hasta 15 archivos de referencia en total