Remotion Studio API
API Key
Requerida para probarIngresa tu API Key una sola vez. Se usará automáticamente al probar cualquier endpoint protegido.
Endpoints
Salud
GET /health — Estado del servicio (público)
Ejemplo sin cuerpo: ejecuta GET /health. Estado del servicio (público).
https://remotion.ceballosleon.com/api/health
Request
{
"url": "{{baseUrl}}\/health",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"ok": true,
"time": "2026-10-04T00:00:00.000Z",
"service": "remotion-studio"
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Auth
POST /auth/register — Crea cuenta (contraseña 12+)
Ejemplo de solicitud incluido en el cuerpo. Crea cuenta (contraseña 12+).
https://remotion.ceballosleon.com/api/auth/register
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"email": "yo@correo.com",
"password": "…12 caracteres…"
}Request
{
"url": "{{baseUrl}}\/auth\/register",
"body": {
"raw": "{\n \"email\": \"yo@correo.com\",\n \"password\": \"…12 caracteres…\"\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "POST",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
201{
"body": {
"user": {
"id": 12,
"name": "yo",
"role": "user",
"email": "yo@correo.com",
"active": true
}
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
POST /auth/login — Inicia sesión
Ejemplo de solicitud incluido en el cuerpo. Inicia sesión.
https://remotion.ceballosleon.com/api/auth/login
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"email": "yo@correo.com",
"password": "…"
}Request
{
"url": "{{baseUrl}}\/auth\/login",
"body": {
"raw": "{\n \"email\": \"yo@correo.com\",\n \"password\": \"…\"\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "POST",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
200{
"body": {
"user": {
"id": 12,
"name": "yo",
"role": "user",
"email": "yo@correo.com",
"active": true
}
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
POST /auth/logout — Cierra sesión
Ejemplo sin cuerpo: ejecuta POST /auth/logout. Cierra sesión.
https://remotion.ceballosleon.com/api/auth/logout
Request
{
"url": "{{baseUrl}}\/auth\/logout",
"body": null,
"method": "POST",
"headers": []
}
Response
204{
"body": null,
"headers": []
}
GET /me — Usuario actual
Ejemplo sin cuerpo: ejecuta GET /me. Usuario actual.
https://remotion.ceballosleon.com/api/me
Request
{
"url": "{{baseUrl}}\/me",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"user": {
"id": 12,
"name": "yo",
"role": "user",
"email": "yo@correo.com",
"active": true
}
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
PUT /profile — Edita nombre/correo/clave
Ejemplo de solicitud incluido en el cuerpo. Edita nombre/correo/clave.
https://remotion.ceballosleon.com/api/profile
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"name": "Nombre",
"email": "yo@correo.com",
"currentPassword": "…",
"newPassword": ""
}Request
{
"url": "{{baseUrl}}\/profile",
"body": {
"raw": "{\n \"name\": \"Nombre\",\n \"email\": \"yo@correo.com\",\n \"currentPassword\": \"…\",\n \"newPassword\": \"\"\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "PUT",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
200{
"body": {
"user": {
"id": 12,
"name": "Nombre",
"role": "user",
"email": "yo@correo.com",
"active": true
}
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Playgrounds
GET /v1/playgrounds — Lista tus composiciones
Ejemplo sin cuerpo: ejecuta GET /v1/playgrounds. Lista tus composiciones.
https://remotion.ceballosleon.com/api/v1/playgrounds
Request
{
"url": "{{baseUrl}}\/v1\/playgrounds",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"data": [
{
"id": 7,
"name": "Campaña",
"props": {
"clips": [],
"durationInSeconds": 8
},
"updatedAt": "2026-10-04 00:00:00"
}
]
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
POST /v1/playgrounds — Guarda ProductAd
Ejemplo de solicitud incluido en el cuerpo. Guarda ProductAd.
https://remotion.ceballosleon.com/api/v1/playgrounds
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"name": "Campaña",
"props": {
"durationInSeconds": 8,
"clips": []
}
}Request
{
"url": "{{baseUrl}}\/v1\/playgrounds",
"body": {
"raw": "{\n \"name\": \"Campaña\",\n \"props\": {\n \"durationInSeconds\": 8,\n \"clips\": []\n }\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "POST",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
201{
"body": {
"data": [
{
"id": 7,
"name": "Campaña",
"props": {
"clips": [],
"durationInSeconds": 8
},
"updatedAt": "2026-10-04 00:00:00"
}
]
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
PUT /v1/playgrounds/{id} — Edita una composición
Ejemplo de solicitud incluido en el cuerpo. Edita una composición.
https://remotion.ceballosleon.com/api/v1/playgrounds/{id}
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"name": "Campaña",
"props": {}
}Request
{
"url": "{{baseUrl}}\/v1\/playgrounds\/{id}",
"body": {
"raw": "{\n \"name\": \"Campaña\",\n \"props\": {}\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "PUT",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
200{
"body": {
"id": 7,
"name": "Campaña",
"props": {
"clips": [],
"durationInSeconds": 8
}
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
DELETE /v1/playgrounds/{id} — Elimina una composición
Ejemplo sin cuerpo: ejecuta DELETE /v1/playgrounds/{id}. Elimina una composición.
https://remotion.ceballosleon.com/api/v1/playgrounds/{id}
Request
{
"url": "{{baseUrl}}\/v1\/playgrounds\/{id}",
"body": null,
"method": "DELETE",
"headers": []
}
Response
204{
"body": null,
"headers": []
}
Generación IA (01)
POST /v1/ideas/options — Generar video desde idea con selección automática opcional
Ejemplo del body para generar desde una idea. idea es texto; duracionSegundos es número; los cuatro controles son booleanos. estiloId='random' elige estilo automáticamente; para fijarlo usa un ID como testimonial_card. archivosAdjuntos acepta IDs de archivos subidos. Deja propuestaExacta vacío para pedir una propuesta automática; escribe ahí el contenido deseado para usar una propuesta exacta.
https://remotion.ceballosleon.com/api/v1/ideas/options
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"idea": "Crea un video vertical emotivo sobre una familia que comparte una oración antes de dormir.",
"duracionSegundos": 45,
"estiloId": "random",
"seleccionarPropuestaAutomatica": true,
"seleccionarImagenesWebAutomaticas": true,
"generarTtsExterno": false,
"usarImagenesWeb": true,
"archivosAdjuntos": [
"uuid-del-archivo-subido"
],
"propuestaExacta": ""
}Request
{
"url": "{{baseUrl}}\/v1\/ideas\/options",
"body": {
"raw": "{\n \"idea\": \"Crea un video vertical emotivo sobre una familia que comparte una oración antes de dormir.\",\n \"duracionSegundos\": 45,\n \"estiloId\": \"random\",\n \"seleccionarPropuestaAutomatica\": true,\n \"seleccionarImagenesWebAutomaticas\": true,\n \"generarTtsExterno\": false,\n \"usarImagenesWeb\": true,\n \"archivosAdjuntos\": [\n \"uuid-del-archivo-subido\"\n ],\n \"propuestaExacta\": \"\"\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "POST",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
202{
"body": {
"jobId": "b19fc8b6-3029-4e79-8b1a-2e7088c4549a"
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
GET /v1/ideas/options/{jobId} — Consulta el lote de propuestas
Paso 2. Repite esta consulta mientras estado sea corriendo. Cuando sea listo, el test guarda el diálogo recomendado, su estilo y el guion separado en escenas compatible con 01.
https://remotion.ceballosleon.com/api/v1/ideas/options/{{optionsJobId}}
Request
{
"url": "{{baseUrl}}\/v1\/ideas\/options\/{{optionsJobId}}",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"tono": {
"id": "oracion",
"label": "Oración"
},
"largo": {
"id": "largo",
"label": "Largo"
},
"estado": "listo",
"duracion": 45,
"opciones": [
{
"id": "opcion-1-demo",
"estilo": {
"id": "testimonial_card",
"label": "Testimonial Card"
},
"titulo": "Una noche en familia",
"dialogo": "Una oración en familia nos recuerda que podemos acompañarnos.",
"enfoque": "Fe y acompañamiento",
"estiloId": "testimonial_card",
"palabras": 10,
"confianza": 80,
"porcentaje": 40,
"porqueEstilo": "Refuerza el tono cercano."
}
],
"recomendadoId": "opcion-1-demo"
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
POST /v1/ideas/media — Reúne recursos (adjuntos+MIIA+web)
Ejemplo: idea y guion son texto, estiloId es texto, referencias es una lista de IDs, imagenes es número y buscarWeb es booleano.
https://remotion.ceballosleon.com/api/v1/ideas/media
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"idea": "Oración en familia para la noche, algo íntimo",
"guion": "En una noche tranquila, una oración en familia nos recuerda que siempre podemos acompañarnos.",
"estiloId": "testimonial_card",
"referencias": [
"uuid-del-archivo-subido"
],
"imagenes": 4,
"buscarWeb": true,
"descartar": []
}Request
{
"url": "{{baseUrl}}\/v1\/ideas\/media",
"body": {
"raw": "{\n \"idea\": \"Oración en familia para la noche, algo íntimo\",\n \"guion\": \"En una noche tranquila, una oración en familia nos recuerda que siempre podemos acompañarnos.\",\n \"estiloId\": \"testimonial_card\",\n \"referencias\": [\n \"uuid-del-archivo-subido\"\n ],\n \"imagenes\": 4,\n \"buscarWeb\": true,\n \"descartar\": []\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "POST",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
200{
"body": {
"notas": [],
"medios": [
{
"medio": "https:\/\/cdn.example.com\/familia.jpg",
"nombre": "Familia reunida",
"origen": "web",
"media_type": "image"
}
],
"videos": 0,
"busqueda": {
"ok": true,
"resultados": 1
},
"estiloId": "testimonial_card",
"imagenes": 1
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
GET /v1/tts/voices — Voces del TTS para 01 (llave oculta)
Opcional. Lista las voces externas ya configuradas en Remotion; usa una de sus id en vozTts cuando usarTts=true.
https://remotion.ceballosleon.com/api/v1/tts/voices
Request
{
"url": "{{baseUrl}}\/v1\/tts\/voices",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"data": [
{
"id": "builtin:voice-id",
"kind": "builtin",
"name": "Voz de ejemplo"
}
],
"configured": true
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Videos
POST /v1/videos/from-idea — Genera el MP4 desde 01 (envía musicId para elegir la pista). El guion.escenas admite de 3 a 100 escenas; si se excede, responde 422 con el límite.
Ejemplo con datos ficticios tipados: duración y volumen son números, usarTts es booleano, guion.escenas y medios son arreglos de objetos. Acepta de 3 a 100 escenas; los 422 distinguen too_many_scenes, too_few_scenes y validation_error con campo y detalle. musicId acepta una pista de GET /v1/music, random o none. La respuesta incluye outputUrl (https://remotion.ceballosleon.com/jobs/{jobId}/out/final.mp4), statusUrl, downloadUrl, music y nombre/tipo de archivo.
https://remotion.ceballosleon.com/api/v1/videos/from-idea
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"idea": "Oración en familia para la noche, algo íntimo",
"guion": {
"escenas": [
{
"voz": "En una noche tranquila, una oración en familia nos recuerda que siempre podemos acompañarnos.",
"pantalla": "",
"tipo": ""
},
{
"voz": "Compartir un momento de fe puede traer calma y esperanza.",
"pantalla": "",
"tipo": ""
},
{
"voz": "Haz de la unión y la gratitud parte de cada día.",
"pantalla": "",
"tipo": ""
}
]
},
"estiloId": "testimonial_card",
"musicId": "gymnopedie_no_1",
"musicVolume": 0.2,
"videoLength": 45,
"medios": [
{
"medio": "https://images.unsplash.com/photo-1511895426328-dc8714191300?w=1600",
"media_type": "image",
"origen": "web",
"nombre": "Familia reunida"
}
],
"usarTts": false,
"vozTts": ""
}Request
{
"url": "{{baseUrl}}\/v1\/videos\/from-idea",
"body": {
"raw": "{\n \"idea\": \"Oración en familia para la noche, algo íntimo\",\n \"guion\": {\n \"escenas\": [\n {\n \"voz\": \"En una noche tranquila, una oración en familia nos recuerda que siempre podemos acompañarnos.\",\n \"pantalla\": \"\",\n \"tipo\": \"\"\n },\n {\n \"voz\": \"Compartir un momento de fe puede traer calma y esperanza.\",\n \"pantalla\": \"\",\n \"tipo\": \"\"\n },\n {\n \"voz\": \"Haz de la unión y la gratitud parte de cada día.\",\n \"pantalla\": \"\",\n \"tipo\": \"\"\n }\n ]\n },\n \"estiloId\": \"testimonial_card\",\n \"musicId\": \"gymnopedie_no_1\",\n \"musicVolume\": 0.2,\n \"videoLength\": 45,\n \"medios\": [\n {\n \"medio\": \"https:\/\/images.unsplash.com\/photo-1511895426328-dc8714191300?w=1600\",\n \"media_type\": \"image\",\n \"origen\": \"web\",\n \"nombre\": \"Familia reunida\"\n }\n ],\n \"usarTts\": false,\n \"vozTts\": \"\"\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "POST",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
202{
"body": {
"ok": true,
"jobId": "b19fc8b6-3029-4e79-8b1a-2e7088c4549a",
"music": {
"id": "gymnopedie_no_1",
"mood": "Piano tranquilo",
"title": "Gymnopedie No. 1",
"artist": "Erik Satie (arreglo de Kevin MacLeod)",
"credit": "Crédito de ejemplo",
"license": "CC BY 3.0"
},
"videos": 0,
"styleId": "testimonial_card",
"fileName": "final.mp4",
"imagenes": 1,
"outputUrl": "https:\/\/remotion.ceballosleon.com\/jobs\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/out\/final.mp4",
"statusUrl": "https:\/\/remotion.ceballosleon.com\/api\/v1\/videos\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/status",
"contentType": "video\/mp4",
"descartados": 0,
"downloadUrl": "https:\/\/remotion.ceballosleon.com\/api\/v1\/videos\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/download",
"musicVolume": 0.2,
"videoLength": 45
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
POST /v1/videos/from-url — Genera el MP4 desde URL de producto
Elige una pista enviando su id en musicId (consulta GET /v1/music); random asigna una pista y none genera sin música. La respuesta indica la pista exacta que se usará y contiene outputUrl, statusUrl y downloadUrl absolutos.
https://remotion.ceballosleon.com/api/v1/videos/from-url
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"productUrl": "https://…",
"styleId": "random",
"musicId": "random",
"musicVolume": 0.3,
"videoLength": 21
}Request
{
"url": "{{baseUrl}}\/v1\/videos\/from-url",
"body": {
"raw": "{\n \"productUrl\": \"https:\/\/…\",\n \"styleId\": \"random\",\n \"musicId\": \"random\",\n \"musicVolume\": 0.3,\n \"videoLength\": 21\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "POST",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
202{
"body": {
"ok": true,
"jobId": "b19fc8b6-3029-4e79-8b1a-2e7088c4549a",
"music": {
"id": "gymnopedie_no_1",
"mood": "Piano tranquilo",
"title": "Gymnopedie No. 1",
"artist": "Erik Satie (arreglo de Kevin MacLeod)",
"credit": "Crédito de ejemplo",
"license": "CC BY 3.0"
},
"styleId": "testimonial_card",
"fileName": "final.mp4",
"outputUrl": "https:\/\/remotion.ceballosleon.com\/jobs\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/out\/final.mp4",
"statusUrl": "https:\/\/remotion.ceballosleon.com\/api\/v1\/videos\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/status",
"contentType": "video\/mp4",
"downloadUrl": "https:\/\/remotion.ceballosleon.com\/api\/v1\/videos\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/download",
"musicVolume": 0.2,
"videoLength": 22
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
POST /v1/videos/guion — Guion + medios desde URL (sin render)
Ejemplo de solicitud incluido en el cuerpo. Guion + medios desde URL (sin render).
https://remotion.ceballosleon.com/api/v1/videos/guion
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"productUrl": "https://…",
"styleId": "random",
"videoLength": 21
}Request
{
"url": "{{baseUrl}}\/v1\/videos\/guion",
"body": {
"raw": "{\n \"productUrl\": \"https:\/\/…\",\n \"styleId\": \"random\",\n \"videoLength\": 21\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "POST",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
200{
"body": {
"guion": {
"escenas": []
},
"medios": [],
"product": {
"title": "Producto de ejemplo"
}
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
GET /v1/videos — Lista y filtra tus tareas de video por API con paginación
Lista los jobs de video propios ordenados de más reciente a más antiguo. La interfaz pagina de 5 en 5; la API admite page, q (ID/idea/URL), state y source. Esta peticion muestra 5 resultados.
https://remotion.ceballosleon.com/api/v1/videos?page=1&limit=5
Request
{
"url": "{{baseUrl}}\/v1\/videos?page=1&limit=5",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"data": [
{
"idea": "Oración en familia para la noche",
"step": 5,
"jobId": "b19fc8b6-3029-4e79-8b1a-2e7088c4549a",
"music": {
"id": "gymnopedie_no_1",
"title": "Gymnopedie No. 1"
},
"state": "done",
"steps": 6,
"message": "5\/6 Video renderizado.",
"styleId": "testimonial_card",
"createdAt": "2026-10-05T06:44:30.240Z",
"outputUrl": "https:\/\/remotion.ceballosleon.com\/jobs\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/out\/final.mp4",
"statusUrl": "https:\/\/remotion.ceballosleon.com\/api\/v1\/videos\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/status",
"productUrl": "",
"downloadUrl": "https:\/\/remotion.ceballosleon.com\/api\/v1\/videos\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/download",
"musicVolume": 0.2,
"videoLength": 22
}
],
"page": 1,
"limit": 5,
"total": 1,
"totalPages": 1
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
GET /v1/videos/{id}/requests — Inspecciona el JSON recibido por Remotion y enviado al TTS
Inspecciona el JSON que Remotion recibió y el cuerpo exacto que envió al TTS externo. Jobs anteriores al registro pueden mostrar datos reconstruidos.
https://remotion.ceballosleon.com/api/v1/videos/{{videoJobId}}/requests
Request
{
"url": "{{baseUrl}}\/v1\/videos\/{{videoJobId}}\/requests",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"jobId": "b19fc8b6-3029-4e79-8b1a-2e7088c4549a",
"sentRequest": {
"note": "",
"method": "POST",
"payload": {
"input": "Texto de ejemplo.",
"model": "xtts-v2",
"speed": 1,
"voice": "cloned:jarvis",
"language": "es",
"response_format": "mp3"
},
"captured": true,
"endpoint": "\/v1\/audio\/speech"
},
"receivedRequest": {
"note": "",
"payload": {
"idea": "Oración en familia para la noche",
"usarTts": true
},
"captured": true
}
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
GET /v1/videos/{id}/status — Estado del job y metadatos del MP4
Paso 5. Repite hasta state=done; si state=failed revisa message. Al terminar, output/outputUrl es una URL pública autenticada, nunca una ruta local. Incluye fileSizeBytes, durationSeconds, música y estilo.
https://remotion.ceballosleon.com/api/v1/videos/{{videoJobId}}/status
Request
{
"url": "{{baseUrl}}\/v1\/videos\/{{videoJobId}}\/status",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"ok": true,
"step": 5,
"jobId": "b19fc8b6-3029-4e79-8b1a-2e7088c4549a",
"music": {
"id": "gymnopedie_no_1",
"mood": "Piano tranquilo",
"title": "Gymnopedie No. 1",
"artist": "Erik Satie (arreglo de Kevin MacLeod)",
"credit": "Crédito de ejemplo",
"license": "CC BY 3.0"
},
"state": "done",
"steps": 6,
"output": "https:\/\/remotion.ceballosleon.com\/jobs\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/out\/final.mp4",
"message": "Video renderizado.",
"styleId": "testimonial_card",
"fileName": "final.mp4",
"createdAt": "2026-10-05T06:44:30.240Z",
"outputUrl": "https:\/\/remotion.ceballosleon.com\/jobs\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/out\/final.mp4",
"statusUrl": "https:\/\/remotion.ceballosleon.com\/api\/v1\/videos\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/status",
"completedAt": "2026-10-05T06:45:12.000Z",
"contentType": "video\/mp4",
"downloadUrl": "https:\/\/remotion.ceballosleon.com\/api\/v1\/videos\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/download",
"musicVolume": 0.2,
"videoLength": 22,
"fileSizeBytes": 18432000,
"durationSeconds": 22
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
GET /v1/videos/{id}/download — Descarga el MP4
Paso 6. Descarga el MP4 cuando el estado del job sea done.
https://remotion.ceballosleon.com/api/v1/videos/{{videoJobId}}/download
Request
{
"url": "{{baseUrl}}\/v1\/videos\/{{videoJobId}}\/download",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": null,
"headers": [
{
"key": "Content-Type",
"value": "video\/mp4",
"enabled": true,
"description": ""
}
]
}
GET /v1/videos/{id}/files — Archivos del job
Ejemplo sin cuerpo: ejecuta GET /v1/videos/{id}/files. Archivos del job.
https://remotion.ceballosleon.com/api/v1/videos/{id}/files
Request
{
"url": "{{baseUrl}}\/v1\/videos\/{id}\/files",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"files": [
{
"url": "\/api\/v1\/videos\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/download",
"name": "final.mp4"
}
]
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
PUT /v1/videos/{id}/props — Edita props y re-renderiza
Ejemplo de solicitud incluido en el cuerpo. Edita props y re-renderiza.
https://remotion.ceballosleon.com/api/v1/videos/{id}/props
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"props": {}
}Request
{
"url": "{{baseUrl}}\/v1\/videos\/{id}\/props",
"body": {
"raw": "{\n \"props\": {}\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "PUT",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
202{
"body": {
"ok": true,
"jobId": "b19fc8b6-3029-4e79-8b1a-2e7088c4549a",
"music": {
"id": "gymnopedie_no_1",
"title": "Gymnopedie No. 1",
"artist": "Erik Satie (arreglo de Kevin MacLeod)"
},
"styleId": "testimonial_card",
"fileName": "final.mp4",
"outputUrl": "https:\/\/remotion.ceballosleon.com\/jobs\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/out\/final.mp4",
"statusUrl": "https:\/\/remotion.ceballosleon.com\/api\/v1\/videos\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/status",
"contentType": "video\/mp4",
"downloadUrl": "https:\/\/remotion.ceballosleon.com\/api\/v1\/videos\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a\/download",
"musicVolume": 0.2,
"videoLength": 22
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Proyectos guardados
GET /v1/idea-projects — Lista configuraciones de 01
Ejemplo sin cuerpo: ejecuta GET /v1/idea-projects. Lista configuraciones de 01.
https://remotion.ceballosleon.com/api/v1/idea-projects
Request
{
"url": "{{baseUrl}}\/v1\/idea-projects",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"data": [
{
"id": 4,
"idea": "Oración en familia",
"name": "Oración — 04\/10",
"jobId": "b19fc8b6-3029-4e79-8b1a-2e7088c4549a",
"titulo": "Una noche en familia",
"folderId": 12,
"updatedAt": "2026-10-04T00:00:00.000Z"
}
],
"folders": [
{
"id": 12,
"name": "Campaña de verano",
"createdAt": "2026-10-04T00:00:00.000Z",
"projectCount": 1
}
]
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
GET /v1/idea-project-folders — Lista tus carpetas de configuraciones
Ejemplo sin cuerpo: ejecuta GET /v1/idea-project-folders. Lista tus carpetas de configuraciones.
https://remotion.ceballosleon.com/api/v1/idea-project-folders
Request
{
"url": "{{baseUrl}}\/v1\/idea-project-folders",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"data": [
{
"id": 12,
"name": "Campaña de verano",
"createdAt": "2026-10-04T00:00:00.000Z",
"projectCount": 1
}
]
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
POST /v1/idea-project-folders — Crea una carpeta
Ejemplo de solicitud incluido en el cuerpo. Crea una carpeta.
https://remotion.ceballosleon.com/api/v1/idea-project-folders
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"name": "Campaña de verano"
}Request
{
"url": "{{baseUrl}}\/v1\/idea-project-folders",
"body": {
"raw": "{\n \"name\": \"Campaña de verano\"\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "POST",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
201{
"body": {
"id": 12,
"name": "Campaña de verano",
"projectCount": 0
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
PUT /v1/idea-project-folders/{id} — Renombra una carpeta
Ejemplo de solicitud incluido en el cuerpo. Renombra una carpeta.
https://remotion.ceballosleon.com/api/v1/idea-project-folders/{id}
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"name": "Campaña verano 2026"
}Request
{
"url": "{{baseUrl}}\/v1\/idea-project-folders\/{id}",
"body": {
"raw": "{\n \"name\": \"Campaña verano 2026\"\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "PUT",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
200{
"body": {
"id": 12,
"name": "Campaña verano 2026"
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
DELETE /v1/idea-project-folders/{id} — Elimina carpeta; conserva los videos sin carpeta
Ejemplo sin cuerpo: ejecuta DELETE /v1/idea-project-folders/{id}. Elimina carpeta; conserva los videos sin carpeta.
https://remotion.ceballosleon.com/api/v1/idea-project-folders/{id}
Request
{
"url": "{{baseUrl}}\/v1\/idea-project-folders\/{id}",
"body": null,
"method": "DELETE",
"headers": []
}
Response
204{
"body": null,
"headers": []
}
POST /v1/idea-projects — Guarda todo lo usado (idea, guion, estilo, medios, música)
Ejemplo de solicitud incluido en el cuerpo. Guarda todo lo usado (idea, guion, estilo, medios, música).
https://remotion.ceballosleon.com/api/v1/idea-projects
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"name": "Oración — 04/10",
"jobId": "uuid (opcional)",
"folderId": null,
"snapshot": {
"idea": "…",
"tono": "oracion",
"largo": "largo",
"opcion": {
"titulo": "…",
"dialogo": "…"
},
"opciones": [],
"ideaStyle": "",
"medios": [],
"musicId": "",
"usarTts": false
}
}Request
{
"url": "{{baseUrl}}\/v1\/idea-projects",
"body": {
"raw": "{\n \"name\": \"Oración — 04\/10\",\n \"jobId\": \"uuid (opcional)\",\n \"folderId\": null,\n \"snapshot\": {\n \"idea\": \"…\",\n \"tono\": \"oracion\",\n \"largo\": \"largo\",\n \"opcion\": {\n \"titulo\": \"…\",\n \"dialogo\": \"…\"\n },\n \"opciones\": [],\n \"ideaStyle\": \"\",\n \"medios\": [],\n \"musicId\": \"\",\n \"usarTts\": false\n }\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "POST",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
201{
"body": {
"id": 4,
"name": "Oración — 04\/10",
"jobId": "b19fc8b6-3029-4e79-8b1a-2e7088c4549a"
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
GET /v1/idea-projects/{id} — Trae snapshot completo
Ejemplo sin cuerpo: ejecuta GET /v1/idea-projects/{id}. Trae snapshot completo.
https://remotion.ceballosleon.com/api/v1/idea-projects/{id}
Request
{
"url": "{{baseUrl}}\/v1\/idea-projects\/{id}",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"snapshot": {
"idea": "Oración en familia",
"tono": "oracion",
"largo": "largo",
"medios": [],
"opcion": {
"titulo": "Una noche en familia",
"dialogo": "Una oración en familia nos recuerda que podemos acompañarnos."
},
"musicId": "gymnopedie_no_1",
"usarTts": false
}
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
PUT /v1/idea-projects/{id} — Actualiza una configuración guardada
Ejemplo de solicitud incluido en el cuerpo. Actualiza una configuración guardada.
https://remotion.ceballosleon.com/api/v1/idea-projects/{id}
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"name": "Oración — 04/10",
"jobId": "uuid (opcional)",
"folderId": 12,
"snapshot": {
"idea": "Oración en familia",
"tono": "oracion",
"largo": "largo",
"opcion": {
"titulo": "Una noche en familia",
"dialogo": "Una oración en familia nos recuerda que podemos acompañarnos."
},
"opciones": [],
"ideaStyle": "testimonial_card",
"medios": [],
"musicId": "gymnopedie_no_1",
"usarTts": false
}
}Request
{
"url": "{{baseUrl}}\/v1\/idea-projects\/{id}",
"body": {
"raw": "{\n \"name\": \"Oración — 04\/10\",\n \"jobId\": \"uuid (opcional)\",\n \"folderId\": 12,\n \"snapshot\": {\n \"idea\": \"Oración en familia\",\n \"tono\": \"oracion\",\n \"largo\": \"largo\",\n \"opcion\": {\n \"titulo\": \"Una noche en familia\",\n \"dialogo\": \"Una oración en familia nos recuerda que podemos acompañarnos.\"\n },\n \"opciones\": [],\n \"ideaStyle\": \"testimonial_card\",\n \"medios\": [],\n \"musicId\": \"gymnopedie_no_1\",\n \"usarTts\": false\n }\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "PUT",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
200{
"body": {
"id": 4,
"name": "Oración — 04\/10",
"folderId": 12
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
PATCH /v1/idea-projects/{id}/folder — Mueve una configuración a una carpeta o a Sin carpeta
Ejemplo de solicitud incluido en el cuerpo. Mueve una configuración a una carpeta o a Sin carpeta.
https://remotion.ceballosleon.com/api/v1/idea-projects/{id}/folder
| Header | Valor |
|---|---|
| Content-Type | application/json |
{
"folderId": 12
}Request
{
"url": "{{baseUrl}}\/v1\/idea-projects\/{id}\/folder",
"body": {
"raw": "{\n \"folderId\": 12\n}",
"mode": "raw",
"options": {
"raw": {
"language": "json"
}
}
},
"method": "PATCH",
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Response
200{
"body": {
"id": 4,
"folderId": 12
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
DELETE /v1/idea-projects/{id} — Elimina configuración
Ejemplo sin cuerpo: ejecuta DELETE /v1/idea-projects/{id}. Elimina configuración.
https://remotion.ceballosleon.com/api/v1/idea-projects/{id}
Request
{
"url": "{{baseUrl}}\/v1\/idea-projects\/{id}",
"body": null,
"method": "DELETE",
"headers": []
}
Response
204{
"body": null,
"headers": []
}
Medios
POST /v1/media/upload — Sube imagen/video (raw, 30 MB/archivo, 500 MB/cuenta)
Opcional. Sube primero tus recursos visuales para que el flujo de 01 los priorice. En Body selecciona el archivo y ajusta Content-Type a image/jpeg, image/png, image/webp, image/gif, video/mp4, video/webm o video/quicktime.
https://remotion.ceballosleon.com/api/v1/media/upload
| Header | Valor |
|---|---|
| Content-Type | image/jpeg |
| X-File-Name | referencia.jpg |
Request
{
"url": "{{baseUrl}}\/v1\/media\/upload",
"body": {
"file": {
"src": null
},
"mode": "file"
},
"method": "POST",
"headers": [
{
"key": "Content-Type",
"value": "image\/jpeg",
"enabled": true,
"description": ""
},
{
"key": "X-File-Name",
"value": "referencia.jpg",
"enabled": true,
"description": ""
}
]
}
Response
201{
"body": {
"id": "b19fc8b6-3029-4e79-8b1a-2e7088c4549a",
"url": "\/api\/media\/b19fc8b6-3029-4e79-8b1a-2e7088c4549a",
"name": "referencia.jpg",
"size": 248000,
"mimeType": "image\/jpeg"
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
GET /v1/media/{id} — Descarga recurso propio
Ejemplo sin cuerpo: ejecuta GET /v1/media/{id}. Descarga recurso propio.
https://remotion.ceballosleon.com/api/v1/media/{id}
Request
{
"url": "{{baseUrl}}\/v1\/media\/{id}",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": null,
"headers": [
{
"key": "Content-Type",
"value": "image\/jpeg",
"enabled": true,
"description": ""
}
]
}
DELETE /v1/media/{id} — Elimina recurso propio
Ejemplo sin cuerpo: ejecuta DELETE /v1/media/{id}. Elimina recurso propio.
https://remotion.ceballosleon.com/api/v1/media/{id}
Request
{
"url": "{{baseUrl}}\/v1\/media\/{id}",
"body": null,
"method": "DELETE",
"headers": []
}
Response
204{
"body": null,
"headers": []
}
Estilos
GET /v1/styles — Catálogo de estilos clásicos
Ejemplo sin cuerpo: ejecuta GET /v1/styles. Catálogo de estilos clásicos.
https://remotion.ceballosleon.com/api/v1/styles
Request
{
"url": "{{baseUrl}}\/v1\/styles",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"data": [
{
"id": "social_ad",
"label": "Social Ad",
"description": "Anuncio social vertical"
}
]
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
GET /v1/videos/styles — Estilos, música, tonos y bandas de 01
Ejemplo sin cuerpo: ejecuta GET /v1/videos/styles. Estilos, música, tonos y bandas de 01.
https://remotion.ceballosleon.com/api/v1/videos/styles
Request
{
"url": "{{baseUrl}}\/v1\/videos\/styles",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"data": [],
"music": [
{
"id": "gymnopedie_no_1",
"mood": "Piano tranquilo",
"title": "Gymnopedie No. 1",
"artist": "Erik Satie (arreglo de Kevin MacLeod)",
"credit": "Crédito de ejemplo",
"license": "CC BY 3.0"
}
],
"tonos": [
{
"id": "motivacional",
"label": "Motivacional"
}
],
"largos": [
{
"id": "largo",
"max": 60,
"min": 30,
"label": "Largo",
"target": 45
}
]
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
Música
GET /v1/music — Pistas disponibles para seleccionar en la generación de videos
Consulta el catálogo antes de generar. Cada pista incluye previewUrl para reproducirla. Copia el id de una pista en musicId del endpoint /v1/videos/from-idea; también acepta random o none.
https://remotion.ceballosleon.com/api/v1/music
Request
{
"url": "{{baseUrl}}\/v1\/music",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": {
"data": [
{
"id": "gymnopedie_no_1",
"mood": "Piano tranquilo",
"title": "Gymnopedie No. 1",
"artist": "Erik Satie (arreglo de Kevin MacLeod)",
"credit": "Crédito de ejemplo",
"license": "CC BY 3.0",
"previewUrl": "\/api\/v1\/music\/gymnopedie_no_1\/preview"
}
]
},
"headers": [
{
"key": "Content-Type",
"value": "application\/json",
"enabled": true,
"description": ""
}
]
}
GET /v1/music/{id}/preview — Reproduce el archivo de audio de una pista
Devuelve el MP3 autenticado; permite solicitudes Range para reproducción parcial.
https://remotion.ceballosleon.com/api/v1/music/{id}/preview
Request
{
"url": "{{baseUrl}}\/v1\/music\/{id}\/preview",
"body": null,
"method": "GET",
"headers": []
}
Response
200{
"body": null,
"headers": [
{
"key": "Content-Type",
"value": "audio\/mpeg",
"enabled": true,
"description": ""
}
]
}