Referencia de API
Autenticación
Todas las solicitudes API requieren una API key. Puedes obtenerla en Settings > API Keys.
Formatos compatibles:
| Método | Formato |
|---|---|
| Bearer Token | Authorization: Bearer sk-xxx |
| Token Header | Authorization: Token sk-xxx |
| X-API-Key | X-API-Key: sk-xxx |
| Query Parameter | ?api_key=sk-xxx |
Recordatorio de seguridad:
- nunca expongas tu API key en código cliente
- realiza siempre las llamadas API desde tu servidor
Resumen de endpoints
| Método | Endpoint | Uso |
|---|---|---|
| POST | /api/v1/video | Crear una tarea de video permanente |
| GET | /api/v1/video | Listar tareas de video |
| GET | /api/v1/video/:taskId | Leer detalles de una tarea |
| DELETE | /api/v1/video/:taskId | Eliminar una tarea de video |
| POST | /api/v1/video/:taskId/render | Lanzar el renderizado |
| POST | /api/v1/upload | Subir assets |
| GET | /api/v1/files | Listar archivos |
| DELETE | /api/v1/files/:fileId | Eliminar un archivo |
| GET | /api/v1/credits | Consultar saldo de créditos |
| POST | /api/v1/preview | Crear una preview temporal |
| GET | /api/v1/preview/:tempId | Leer la configuración de preview |
| DELETE | /api/v1/preview/:tempId | Eliminar una preview |
| POST | /api/v1/preview/:tempId/convert | Convertir una preview en tarea permanente |
| POST | /api/v1/preview/:tempId/render | Convertir una preview y renderizarla |
POST /api/v1/video
Crea una tarea de video permanente a partir de tu configuración. Esta operación todavía no inicia el render.
Campos importantes:
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
config | object | Sí | Esquema de video conforme al JSON Schema |
metadata | object | No | Metadatos personalizados adjuntos a la tarea |
Campos de respuesta más útiles:
taskIdvideoTaskIdpreviewUrlviewerUrlconfigUrlstatusqualitywidthheightduration
GET /api/v1/video
Lista todas las tareas de video de la cuenta actual.
Parámetros de consulta:
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
page | integer | 1 | Número de página |
limit | integer | 20 | Elementos por página, máximo 100 |
status | string | - | Filtra por el estado más reciente |
La respuesta contiene una lista tasks y un objeto pagination.
GET /api/v1/video/:taskId
Recupera los detalles completos de una tarea de video concreta.
Campos de retorno útiles:
taskIdvideoTaskIdstatusvideoUrlpreviewUrlviewerUrlconfigUrlcostCreditscreatedAtcompletedAtmetadata
Valores de estado:
| Estado | Significado |
|---|---|
created | Tarea creada, render todavía no iniciado |
rendering | Render en curso |
completed | Render finalizado con éxito |
failed | Render fallido |
DELETE /api/v1/video/:taskId
Elimina de forma permanente una tarea y sus registros locales de render. La API también intenta eliminar la tarea remota upstream.
Campos de respuesta importantes:
deletedremoteDeletedmessage
Si la eliminación upstream falla, la eliminación local puede seguir siendo correcta.
POST /api/v1/video/:taskId/render
Inicia o reinicia el render de una tarea existente.
Cuerpo de la solicitud:
| Campo | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
webhook_url | string | No | - | URL para la notificación final |
num_workers | integer | No | 5 | Número de workers de render |
Resultados posibles:
- un nuevo render con
status: rendering - una respuesta reutilizando un render ya terminado con
alreadyRendered: true
Errores frecuentes:
NOT_FOUNDALREADY_RENDERINGINSUFFICIENT_CREDITSRENDER_TRIGGER_FAILED
Webhooks
webhook_url está disponible en:
POST /api/v1/video/:taskId/renderPOST /api/v1/preview/:tempId/render
Flujo de funcionamiento:
- tu
webhook_urlse guarda junto a la tarea de render - el renderer upstream devuelve
completedofailed - el proyecto actualiza primero la base local
- después envía un
POSTa tuwebhook_url
El payload reenviado suele incluir:
taskIdrenderTaskIdstatusvideoUrlerrortimestamp
Limitaciones actuales:
- solo se reenvían
completedyfailed webhook_urldebe ser una URL absoluta válida- todavía no existe firma de webhook
- todavía no existe cola de reintentos ni log de entrega
POST /api/v1/upload
Permite subir imágenes, videos y audios para usarlos después en configuraciones de video.
Campos de formulario:
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
file | File | No* | Archivo único |
files | File[] | No* | Varios archivos |
*Al menos uno de file o files es obligatorio.
Familias MIME compatibles:
image/*video/*audio/*
Límites de almacenamiento por plan:
| Plan | Límite |
|---|---|
| Free | 512 MB |
| Starter | 10 GB |
| Standard | 20 GB |
| Pro | 50 GB |
La respuesta de éxito incluye count y una lista assets.
GET /api/v1/files
Lista los archivos subidos para el propietario actual de la API key.
Parámetros de consulta:
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
page | integer | 1 | Número de página |
limit | integer | 20 | Elementos por página |
type | string | - | image, video o audio |
La respuesta incluye files y pagination.
DELETE /api/v1/files/:fileId
Elimina de forma permanente un archivo de la biblioteca. Se eliminan tanto el objeto almacenado como el registro del archivo.
Campos de respuesta útiles:
fileIddeletedmessage
GET /api/v1/credits
Recupera el saldo actual de créditos de la cuenta.
Respuesta típica:
{
"success": true,
"credits": 985,
"currency": "credits"
}POST /api/v1/preview
Crea una preview temporal sin consumir créditos.
Reglas importantes:
- el esquema de video completo se envía directamente en el body
- los enlaces de preview duran 7 días
- la preview no consume créditos
- la preview no genera un archivo descargable de video
Campos de respuesta:
tempIdpreviewUrlviewerUrlexpiresIn
GET /api/v1/preview/:tempId
Lee la configuración detrás de un enlace temporal de preview.
Campos de retorno:
tempIdconfig
DELETE /api/v1/preview/:tempId
Elimina un enlace temporal de preview.
Campos de retorno:
tempIddeletedmessage
POST /api/v1/preview/:tempId/convert
Clona una preview temporal en una tarea de video permanente. La preview temporal sigue disponible.
Cuerpo opcional:
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
category | string | No | Categoría asociada a la nueva tarea |
Campos de retorno más útiles:
convertedtaskIdvideoTaskIdpreviewUrlviewerUrlconfigUrl
POST /api/v1/preview/:tempId/render
Clona una preview temporal en una tarea permanente y lanza inmediatamente el render.
Cuerpo de la solicitud:
| Campo | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
category | string | No | api | Categoría de la nueva tarea |
webhook_url | string | No | - | Webhook para el resultado del render |
num_workers | integer | No | 5 | Número de workers de render |
Respuesta de éxito típica:
converted: truetaskIdrenderTaskIdstatus: renderingcostremainingCreditspreviewUrlviewerUrl
Cálculo de créditos
La regla de coste es:
- coste = duración del video en segundos × multiplicador de calidad
| Calidad | Lado corto | Multiplicador |
|---|---|---|
| 720p | <= 720px | 1.0 |
| 1080p | <= 1080px | 1.5 |
| 2K | <= 1440px | 2.0 |
La calidad se determina automáticamente a partir de la dimensión más corta del video.
Formato de errores
Todas las respuestas de error siguen este formato:
{
"success": false,
"error": "Human-readable error message",
"code": "ERROR_CODE",
"details": {
"field": "additional context"
}
}Códigos de error frecuentes:
MISSING_API_KEYINVALID_API_KEYINVALID_API_KEY_FORMATAPI_KEY_INACTIVEUSER_NOT_FOUNDINVALID_REQUESTINVALID_CONFIGINSUFFICIENT_CREDITSNOT_FOUNDALREADY_RENDERINGREMOTE_ERRORRENDER_TRIGGER_FAILEDINTERNAL_ERROR