API
Autenticación
Base URL:
https://api.bgless.video/v1Los puntos finales de migración no compatibles con Screen están disponibles en:
https://api.bgless.video/v1.0/videosUtilice una clave API de /settings/apikeys.
Authorization: Bearer sk_...También se acepta X-Api-Key.
Las claves API pueden tener opcionalmente una etiqueta de proyecto y una cuota de crédito mensual. Cuando una clave excede su cuota, la creación de empleo devuelve "429 rate_limited" antes de enviar el trabajo del proveedor.
Los créditos se reservan cuando se crea un trabajo. Los trabajos RGBA fallidos o cancelados restauran el saldo reservado y escriben una entrada de crédito de "reembolso" para el historial de auditoría.
Subir
Solicite una carga prefirmada URL:
curl -X POST https://api.bgless.video/v1/uploads \
-H "Authorization: Bearer $BGLESS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filename": "input.mp4",
"contentType": "video/mp4",
"sizeBytes": 123456
}'Respuesta:
{
"data": {
"uploadUrl": "https://storage.example.com/presigned-put-url",
"fileUrl": "https://cdn.example.com/uploads/source/file.mp4",
"method": "PUT",
"headers": {
"Content-Type": "video/mp4"
},
"fileUrlExpiresAt": "2026-05-08T12:00:00.000Z",
"sizeBytes": 123456,
"uploaded": false,
"directUpload": true
}
}Luego cargue el archivo con PUT a data.uploadUrl usando los encabezados devueltos. Utilice data.fileUrl al crear un trabajo. Las URL de archivos R2 del mismo origen están firmadas y caducan después de 24 horas.
Para archivos ya alojados, envíe { "url": "https://example.com/input.mp4" } y use la fileUrl devuelta.
Estimar trabajo
Calcule los créditos, la ETA y el saldo actual antes de enviar el trabajo del proveedor. Este punto final no crea un trabajo y no gasta KIE créditos.
curl -X POST https://api.bgless.video/v1/jobs/estimate \
-H "Authorization: Bearer $BGLESS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": {
"mode": "text",
"prompt": "a floating product bottle rotating slowly",
"durationSec": 3,
"resolution": "720p"
},
"options": {
"outputs": ["webm-vp9-alpha"],
"preset": "web-app"
}
}'Respuesta:
{
"data": {
"provider": "kie",
"model": "kie.kling-3-video",
"credits": 48,
"etaSec": 120,
"remainingCredits": 100,
"quota": null,
"canAfford": true
}
}Para los archivos seleccionados por el navegador que aún no se han cargado, la aplicación web puede realizar estimaciones a partir del modo, la duración, la resolución, los resultados y el modelo antes de la carga directa.
Modelos
Lista de modelos públicos RGBA disponibles:
curl https://api.bgless.video/v1/modelsLa respuesta tiene la forma "data.providers" y "data.models". Cada modelo incluye su identificación, proveedor, nombre para mostrar, modos admitidos, capacidades y tipo de salida. Utilice la identificación del modelo devuelto como "modelo" al crear o estimar un trabajo. Los flujos de trabajo de carga de video exponen el transcodificador local como "local.ffmpeg-encoder".
SDK de nodo
La fuente del SDK de Node.js escrita reside en sdk/node y se publica como
@bgless/nodo.
pnpm sdk:node:typecheck
pnpm sdk:node:buildimport { createBglessClient } from '@bgless/node';
const bgless = createBglessClient({
apiKey: process.env.BGLESS_API_KEY!,
});
const job = await bgless.createJob({
input: {
mode: 'video',
videoUrl: 'https://cdn.example.com/input.mp4',
resolution: '1080p',
},
options: {
outputs: ['webm-vp9-alpha'],
callbackUrl: 'https://example.com/webhooks/bgless',
},
});
console.log(job.data.id, job.pollUrl);Ejemplo de Python
El SDK de Python está previsto para después de M0. Hasta entonces, utilice "solicitudes" directamente contra el DESCANSO API.
import os
import requests
response = requests.post(
"https://api.bgless.video/v1/jobs",
headers={
"Authorization": f"Bearer {os.environ['BGLESS_API_KEY']}",
"Content-Type": "application/json",
},
json={
"input": {
"mode": "video",
"videoUrl": "https://cdn.example.com/input.mp4",
"resolution": "1080p",
},
"options": {
"outputs": ["webm-vp9-alpha", "mov-prores4444"],
"callbackUrl": "https://example.com/webhooks/bgless",
},
},
timeout=30,
)
response.raise_for_status()
job = response.json()["data"]
print(job["id"], job["status"])Crear trabajo
curl -X POST https://api.bgless.video/v1/jobs \
-H "Authorization: Bearer $BGLESS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": {
"mode": "video",
"videoUrl": "https://cdn.example.com/input.mp4",
"resolution": "1080p",
"refineEdges": true
},
"options": {
"outputs": ["webm-vp9-alpha", "mov-prores4444"],
"preset": "web-app",
"callbackUrl": "https://example.com/webhooks/bgless",
"callbackSecret": "replace-with-your-secret"
}
}'La respuesta es "202 Aceptada" con un trabajo en cola y "pollUrl".
/api/v1/alpha-videos es un alias de /api/v1/jobs para clientes que prefieren el nombre de recurso alpha-video.
Los valores de salida admitidos son webm-vp9-alpha, mov-prores4444, animated-webp, gif, apng, png-sequence y matte-grayscale-mp4.
Compatibilidad sin pantalla
Para migraciones desde la forma Unscreen API anterior, use X-Api-Key y POST /v1.0/videos con video_url o video_file.
curl -X POST https://api.bgless.video/v1.0/videos \
-H "X-Api-Key: $BGLESS_API_KEY" \
-F "video_url=https://cdn.example.com/input.mp4" \
-F "format=pro_bundle" \
-F "webhook_url=https://example.com/webhooks/unscreen"La capa de compatibilidad asigna pro_bundle a bgless WebM alpha más un MP4 mate alpha, devuelve respuestas data.type = "video" estilo Unscreen y admite GET /v1.0/videos/:id y DELETE /v1.0/videos/:id.
Para trabajos cortos, puede solicitar espera síncrona limitada:
curl -X POST "https://api.bgless.video/v1/jobs?wait=true&timeout=30" \
-H "Authorization: Bearer $BGLESS_API_KEY" \
-H "Content-Type: application/json" \
-d '{ ... }'API devuelve 200 cuando el trabajo alcanza un estado de terminal dentro del tiempo de espera. Todavía devuelve 202 con pollUrl cuando el trabajo todavía está en cola, procesándose o transcodificando.
Para flujos de trabajo de video cargados, auto, preserve-source-alpha, chroma-key y ai-matting se dirigen al transcodificador local (local.ffmpeg-encoder) de forma predeterminada y no envían una tarea de generación KIE. Las estimaciones y creaciones explícitas de "ai-matting" se bloquean antes de la creación del trabajo hasta que el transcodificador informe sobre un proveedor de matting configurado.
Consulta de trabajo
curl https://api.bgless.video/v1/jobs/job_id \
-H "Authorization: Bearer $BGLESS_API_KEY"Los trabajos transcodificados exitosos incluyen outputAssets, previewAssets para vistas previas de tablero de ajedrez/oscuro/claro y qaReport. Los artefactos de control de calidad JSON también se enumeran en previewAssets con kind: "qa".
Estados:
en colaenviadoprocesamientotranscodificaciónéxitofallidocancelado
Descargar
curl -L "https://api.bgless.video/v1/jobs/job_id/download?format=webm-vp9-alpha" \
-H "Authorization: Bearer $BGLESS_API_KEY"Eliminar
curl -X DELETE https://api.bgless.video/v1/jobs/job_id \
-H "Authorization: Bearer $BGLESS_API_KEY"Al eliminar un trabajo en ejecución, primero se cancela y luego se oculta del historial de trabajos. Para los activos respaldados por R2, la eliminación también hace el mejor esfuerzo para eliminar los objetos de fuente, salida, vista previa y control de calidad almacenados.
Ganchos web
Cuando se configura options.callbackUrl, los trabajos de terminal se envían al webhook del usuario. Si se configura options.callbackSecret, la entrega incluye:
X-Bgless-Signature: t=unix_timestamp,v1=hmac_sha256(secret, t + "." + body)Los eventos son job.completed, job.failed y job.canceled.
Los webhooks del proveedor de KIE deben apuntar a:
https://bgless.video/api/v1/webhooks/kieConfigure KIE_WEBHOOK_HMAC_KEY en producción.