Saltar a la documentación
En esta página

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ónValores admitidos
Resolución de salida720p · 1080p
Duración de salida3–30 s
Relación de aspectoauto, 16:9, 9:16, 1:1, 21:9
Imágenes de referenciaHasta 10 imágenes
Videos de referenciaHasta 5 videos
Audios de referenciaHasta 3 archivos de audio
Suma de referenciasHasta 15 archivos de referencia en total
Videos de referencia (Σ)30 segundos
seedNo 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 salidaSin video de referenciaCon video de referencia
720p13 créditos/segundo8 créditos/segundo
1080p20 créditos/segundo13 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.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": "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/generations

Enví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

CampoTipoRequeridoDescripción y restricciones
model
stringSí

ID del modelo. Para utilizar Kling 4.0, establece este campo como kling-4-0.

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í

Parámetros de entrada

Parámetros de entrada

CampoTipoPor defectoDescripción y restricciones
input.generation_typestringtext-to-videotext-to-video | image-to-video | reference-to-video
input.promptstring—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.durationinteger53–30 s
input.resolutionstring720p720p | 1080p
input.aspect_ratiostringSegún el modo
Valores admitidosauto16:99:161:121:9

Una 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_urlsstring[][]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_urlsstring[][]Fotogramas intermedios en orden para generar desde imágenes. Hasta 9 sin fotograma final u 8 con él.
input.video_urlsstring[][]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_urlsstring[][]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_soundbooleanfalseSi 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

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": "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"
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.
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 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