Cut.ProDocs

Renderiza y descarga el video

Aplica una plantilla, genera el MP4 final, sigue el render y descarga un archivo o cientos en un zip.

El clip que corta la IA es crudo. El render convierte el clip en un MP4 vertical con plantilla, subtítulos y efectos, listo para publicar.

apply_template (opcional)  →  POST .../render  →  GET /renders/{id}  →  GET /renders/{id}/download
      edición                   202 queued          hasta completed         URL de 1 hora

Aplica una plantilla

Las plantillas son ediciones guardadas en Cut.Pro: encuadre, estilo de subtítulos, efectos. Lista las tuyas:

curl "https://api.cut.pro/api/v1/templates?filter=mine" \
  -H "X-Api-Key: $CUTPRO_API_KEY"

Cada elemento trae id, name, aspect_ratio y auto_add_captions. filter=public lista las de Cut.Pro.

Para editar de una vez los clips de un envío:

curl -X POST https://api.cut.pro/api/v1/clips/7412908365112823/submissions/7412908371004912/apply_template \
  -H "X-Api-Key: $CUTPRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "template_id": "7398110254410021", "clip_ids": ["7412908412887301"] }'
202 Accepted
{ "clips_count": 1 }

Sin clip_ids, vale para todos los clips. Corre en segundo plano: cada clip recibe edit_id en GET .../clips cuando termina. Un lote por cuenta a la vez; otro responde 429 BATCH_ALREADY_RUNNING.

Más simple: envía template_id ya en POST /clips y todo clip sale editado.

Renderiza un clip

curl -X POST https://api.cut.pro/api/v1/clips/7412908365112823/submissions/7412908371004912/clips/7412908412887301/render \
  -H "X-Api-Key: $CUTPRO_API_KEY"
202 Accepted
{
  "id": "7412910087712256",
  "edit_id": "7412910087700001",
  "status": "queued",
  "has_watermark": false,
  "output_resolution": "1080p",
  "from_cache": false,
  "download_url": null
}

Con plantilla aplicada, el render usa la edición. Sin plantilla, usa el diseño predeterminado. Guarda el edit_id: es el que publica el video y el que genera un archivo nuevo después.

Si un render idéntico ya está listo, la respuesta es 200 con from_cache: true y download_url completo. No hay cola ni costo de espera. Pedir el mismo clip mientras se renderiza responde 409 RENDER_ALREADY_IN_PROGRESS.

El clip de una transmisión en vivo tiene su propia ruta: POST /monitors/{id}/broadcasts/{broadcastId}/clips/{clipId}/render.

Sigue el render

curl https://api.cut.pro/api/v1/renders/7412910087712256 \
  -H "X-Api-Key: $CUTPRO_API_KEY"

Consulta cada 5 a 10 segundos. progress va de 0 a 100, útil para una barra de progreso.

statusSignifica
waiting_qualityEsperando que la fuente esté disponible en la mejor calidad. Sigue solo, sin nueva llamada.
queuedEn la cola. El plan define cuántos renders corren al mismo tiempo.
activeRenderizando.
completedListo para descargar.
failedFalló. Pídelo de nuevo con POST /renders.
cancelledCancelado con DELETE.
expiredEl archivo salió del storage. La edición sigue: renderiza de nuevo.

Descarga el MP4

curl https://api.cut.pro/api/v1/renders/7412910087712256/download \
  -H "X-Api-Key: $CUTPRO_API_KEY"
200 OK
{ "url": "https://...", "filename": "El estribillo que todo el mundo conoce.mp4" }

La URL dura 1 hora. Pide una nueva en cada descarga en lugar de guardarla. El archivo queda en el storage durante el tiempo de render_expiry_hours del plan; después, la ruta responde 410 RENDER_FILE_EXPIRED.

Renderiza de nuevo

La edición nunca expira. Para tener el MP4 de un clip de hace meses, renderiza el edit_id:

curl -X POST https://api.cut.pro/api/v1/renders \
  -H "X-Api-Key: $CUTPRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "edit_id": "7412910087700001" }'

Vale el edit_id de un render, de un clip o de un elemento de post. La respuesta tiene el mismo formato que al renderizar un clip.

Descarga varios en un zip

curl -X POST https://api.cut.pro/api/v1/renders/bulk-download \
  -H "X-Api-Key: $CUTPRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "render_ids": ["7412910087712256", "7412910087712257"] }'

curl https://api.cut.pro/api/v1/renders/bulk-download/$JOB_ID \
  -H "X-Api-Key: $CUTPRO_API_KEY"
  • Hasta 500 renders por zip. Más que eso responde 400 TOO_MANY_RENDERS.
  • Los ids de otro workspace se ignoran. Si no queda ninguno, 404 NO_VALID_RENDERS.
  • download_url aparece en completed y dura 1 hora. El zip desaparece en expires_at; después de eso, 410 JOB_EXPIRED.

Lista y elimina

RutaQué hace
GET /rendersLista los renders, del más nuevo al más antiguo. Filtra con status: processing, completed, failed o expired.
DELETE /renders/{renderId}Cancela un render en cola o corriendo. En un render terminado, elimina el registro y el archivo.
GET /renders/limitsRenders corriendo y en cola, resolución, marca de agua y retención del plan. Ver Límites.

Errores

CodeCuándo
CLIP_RESULT_NOT_FOUNDEl clip no existe en este envío.
EDIT_NOT_FOUNDEl edit_id no es de este workspace.
RENDER_ALREADY_IN_PROGRESSEl mismo clip o edición ya se está renderizando. Sigue el render existente.
RENDER_FILE_EXPIREDEl MP4 salió del storage. Renderiza el edit_id de nuevo.
RENDER_FAILED, RENDER_SETUP_FAILEDFalla nuestra al encolar. Inténtalo de nuevo.

En esta página