Documentación
Desarrolla con la API de Seevio
Añade la generación de video a tu producto. Elige un modelo, envía una petición y obtén el resultado mediante consulta o webhook.
Elige un modelo
La referencia de cada modelo incluye sus parámetros completos, precios y ejemplos. Puedes completar la integración directamente desde la página del modelo.
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
Este ejemplo genera un video de 5 segundos a 720p con Seedance 2.5. Abre la referencia del modelo para ver todos los modos de generación y límites de parámetros.
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
}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 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",
"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",
"status": "failed",
"billing_status": "refunded",
"credits": 100,
"failed_reason": "provider_failed"
}Webhooks
Para integraciones de producción, proporciona una callback_url al crear la tarea. La referencia de cada modelo incluye el contenido de callback y un ejemplo de receptor.
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"
}'Los datos del webhook difieren de las respuestas de consulta de tareas: omiten billing_status y credits; los detalles del fallo se encuentran en data.failed_reason y data.credits_refunded. El campo created_at del webhook es la hora de creación del evento en segundos Unix.
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.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "completed",
"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, data.failed_reason para conocer el motivo del fallo y data.credits_refunded para ver la cantidad de créditos reembolsados.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "failed",
"data": {
"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.data;
// 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.
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."
}
}| HTTP | Campo | Qué hacer |
|---|---|---|
| 400 | invalid_request | Corrige el JSON, el prompt faltante, el rango de parámetros o la URL del archivo multimedia antes de reintentar. |
| 401 | invalid_api_key | Verifica el Bearer token y asegúrate de que la clave API esté activa. |
| 402 | insufficient_credits | Añade créditos o reduce el costo de la tarea. La respuesta puede indicar la cantidad de créditos requeridos y disponibles. |
| 403 | forbidden | Revisa la restricción de cuenta detallada en el mensaje de error. |
| 404 | not_found | Verifica el ID de la tarea y que la clave pertenezca al usuario que la creó. |
| 429 | rate_limited | Espera a que transcurra el intervalo indicado en Retry-After antes de intentarlo de nuevo. |
| 500 | internal_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. |