Referencia Técnica de
VideoStack API
Descubre cómo integrar procesamiento de video y audio acelerado por IA en tus aplicaciones con nuestra infraestructura escalable multi-GPU.
Endpoints Síncronos: ¿Archivo o URL?
Los endpoints marcados como SÍNCRONO procesan tareas inmediatas (ej. extraer audio, descargas). Por defecto, estos endpoints devuelven el archivo resultante como una descarga directa (FileResponse).
Si prefieres recibir una URL alojada en S3 en lugar de descargar el archivo inmediatamente, puedes enviar el parámetro return_type=url en tu JSON body o como Query Param.
Por Defecto (return_type=file)
HTTP/1.1 200 OK Content-Type: audio/mpeg Content-Disposition: attachment <binary_data_stream>
Con return_type=url
HTTP/1.1 200 OK
Content-Type: application/json
{
"message": "Éxito",
"url": "https://cdn.videostack.app/..."
}Endpoints Asíncronos: Webhooks y Polling
Los endpoints marcados como ASÍNCRONO se utilizan para tareas pesadas. La API siempre responderá de forma inmediata con un 202 Accepted y un job_id. Tienes dos formas de obtener el resultado final:
Opción 1: Webhooks (Recomendado)
Envía el parámetro webhook_url en tu petición. Cuando el trabajo termine, haremos un POST a tu URL:
{
"job_id": "8f3a5b...",
"status": "success",
"output_url": "https://cdn.videostack.app/uploads/...",
"error": null,
"timestamp": "2023-11-20T15:35:00Z"
}Opción 2: Polling
Si no puedes recibir webhooks, puedes consultar repetidamente el estado de tu trabajo usando el endpoint GET /jobs/{job_id}.
curl -X GET "https://api.videostack.app/jobs/8f3a5b..." \
-H "X-API-Key: tu_api_key"Mientras Procesa
{
"job_id": "8f3a5b...",
"status": "processing",
"endpoint": "/video/dub",
"output_url": null,
"created_at": "..."
}Al Finalizar
{
"job_id": "8f3a5b...",
"status": "success",
"endpoint": "/video/dub",
"output_url": "https://cdn...",
"created_at": "..."
}/SÍNCRONOAutenticación
La API requiere autenticación mediante API Key en todos los endpoints privados. Debes incluir tu clave en el header `X-API-Key`.
curl -X GET "https://api.videostack.app/" \
-H "X-API-Key: tu_api_key"HTTP/1.1 200 OK
Content-Type: application/json
{
"message": "API de Procesamiento de Video - Multi-GPU Optimizada",
"gpus": ["NVIDIA RTX 4090"]
}/health/metricsSÍNCRONOHealth & Metrics
Obtén estadísticas globales de uso de recursos, RAM, CPU y número de peticiones para monitorear tu cuota.
curl -X GET "https://api.videostack.app/health/metrics" \
-H "X-API-Key: tu_api_key"HTTP/1.1 200 OK
Content-Type: application/json
{
"monitoring_enabled": true,
"total_requests": 150,
"active_requests": 2,
"endpoints": {
"POST /video/join": {
"request_count": 50,
"ram_peak_mb": 2500.5,
"cpu_avg_percent": 45.1
}
}
}/uploadSÍNCRONOSubir Archivo (Multipart)
Sube un archivo de video, audio o imagen a la nube temporal (MinIO). El archivo se guarda por 24 horas. Límite de 1GB por archivo y cuota total de 5GB por usuario.
Tip n8nCómo subir archivos desde n8n
Si el archivo proviene de un paso anterior (por ejemplo, un nodo HTTP que descargó un video o audio), n8n guarda esa información binaria en una propiedad, comúnmente llamada data.
Para enviar ese archivo a nuestro servidor, configura el nodo HTTP Request así:
- Method: POST
- URL:
https://api.videostack.app/upload - Send Body: Actívalo (True)
- Body Content Type:
Multipart-Form Data - Send Binary Data: Actívalo (esto le dice a n8n que adjunte el archivo).
- Binary Property: Escribe
data(o el nombre de la propiedad donde el nodo anterior guardó el archivo). - Form Data Property Name (o Input Data Field Name): Escribe exactamente
file. Este es el nombre del parámetro que espera nuestra API. - No olvides agregar tus Headers con el
X-API-Key.
Al ejecutarse, n8n tomará el archivo descargado de la memoria y lo enviará correctamente usando el campo 'file'. Obtendrás un JSON con la URL lista para usar en los demás endpoints.
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| file | file (multipart/form-data) | - | El archivo binario a subir. |
curl -X POST "https://api.videostack.app/upload" \
-H "X-API-Key: tu_api_key" \
-F "file=@ruta/a/tu/archivo.mp4"HTTP/1.1 200 OK
Content-Type: application/json
{
"file_id": "8f3a5b...",
"filename": "archivo.mp4",
"url": "https://cdn.videostack.app/uploads/archivo.mp4?AWSAccessKeyId=AKIA...&Expires=1700494200&Signature=...",
"size_bytes": 104857600,
"expires_at": "2023-11-20T15:30:00Z"
}/mediaSÍNCRONOListar Archivos Activos
Devuelve la lista de archivos activos subidos en las últimas 24 horas y que aún ocupan cuota de almacenamiento.
curl -X GET "https://api.videostack.app/media" \
-H "X-API-Key: tu_api_key"HTTP/1.1 200 OK
Content-Type: application/json
[
{
"file_id": "8f3a5b...",
"filename": "archivo.mp4",
"url": "https://cdn.videostack.app/uploads/archivo.mp4?AWSAccessKeyId=AKIA...&Expires=1700494200&Signature=...",
"size_bytes": 104857600,
"created_at": "2023-11-19T15:30:00Z",
"expires_at": "2023-11-20T15:30:00Z"
}
]/media/{file_id}SÍNCRONOEliminar Archivo
Elimina un archivo subido antes de que pasen sus 24 horas, útil para liberar espacio en la cuota de 5GB.
curl -X DELETE "https://api.videostack.app/media/8f3a5b..." \
-H "X-API-Key: tu_api_key"HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "deleted",
"file_id": "8f3a5b..."
}/subtitles/generateASÍNCRONO (WEBHOOK)Generar Subtítulos Animados
Genera subtítulos automáticos ultra rápidos usando Whisper V3 y los incrusta en el video con efectos altamente personalizables.
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| webhook_url | string | - | URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona). |
| video_url | string | - | URL pública del video original. |
| style_options.effect | string | karaoke_fill | Efectos soportados: simple_srt, highlight_word_by_word, karaoke_fill, fade_per_line, zoom_in_word, slide_up_line, gentle_popup_line, typewriter_word, zoom_and_highlight_word, multi_color_highlight, multi_color_zoom_highlight, neon_highlight_word, neon_zoom_highlight_word |
| style_options.max_words_per_line | number | 5 | Límite de palabras mostradas simultáneamente. |
| style_options.font_name | string | Arial | Nombre de la fuente (debe estar instalada en servidor). |
| style_options.font_size | number | 60 | Tamaño de la fuente. |
| style_options.primary_color | string | #FFFFFF | Color principal en formato HEX. |
| style_options.secondary_color | string | #808080 | Color secundario para palabras pasadas o inactivas. |
| style_options.position_alignment | number | 2 | Alineación usando teclado numérico (2 = Centro abajo, 5 = Centro medio, 8 = Centro arriba). |
curl -X POST "https://api.videostack.app/subtitles/generate" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"webhook_url": "https://tu-dominio.com/webhook",
"video_url": "https://example.com/video.mp4",
"style_options": {
"effect": "neon_zoom_highlight_word",
"font_size": 75,
"primary_color": "#00FFFF",
"secondary_color": "#FF00FF"
}
}'HTTP/1.1 202 Accepted
Content-Type: application/json
{
"job_id": "7a9b1c...",
"status": "processing"
}/transcribeASÍNCRONO (WEBHOOK)Transcribir Video
Extrae el texto de un video directo o de YouTube de forma inteligente, retornando JSON, SRT, VTT o Texto plano.
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| webhook_url | string | - | URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona). |
| video_url | string | - | URL del video (MP4) o link de YouTube. |
| language | string | auto | Código de idioma (ej: es, en). |
| output_format | string | json | json, text, srt, vtt. |
| include_timestamps | boolean | true | Incluye marcas de tiempo por segmento. |
| include_word_timestamps | boolean | false | Incluye marcas de tiempo a nivel de palabra individual. |
curl -X POST "https://api.videostack.app/transcribe" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"webhook_url": "https://tu-dominio.com/webhook",
"video_url": "https://youtube.com/watch?v=12345",
"language": "es",
"output_format": "json",
"include_word_timestamps": true
}'HTTP/1.1 202 Accepted
Content-Type: application/json
{
"job_id": "7a9b1c...",
"status": "processing"
}/subtitles/translateSÍNCRONOTraducir Transcripción
Transcribe el video y automáticamente traduce los subtítulos al idioma destino.
Idiomas de Traducción Soportados
La API de traducción utiliza los códigos de idioma estándar ISO-639-1. A continuación se muestran los idiomas más comunes.
Soporta virtualmente todos los idiomas globales de Google Translate.
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| video_url | string | - | URL del video original. |
| target_lang | string | en | Idioma destino (ej: en, fr, de). |
curl -X POST "https://api.videostack.app/subtitles/translate" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/spanish_video.mp4",
"target_lang": "en"
}'HTTP/1.1 200 OK
Content-Type: application/json
{
"text": "Hello everyone, welcome to the tutorial...",
"segments": [
{ "start": 0.0, "end": 3.5, "text": "Hello everyone, welcome to the tutorial" }
]
}/video/joinASÍNCRONO (WEBHOOK)Fusión Masiva de Videos
Une múltiples clips de video normalizando el audio y aplicando transiciones suaves entre ellos. Gestiona automáticamente la RAM (Batch Processing) para videos pesados.
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| webhook_url | string | - | URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona). |
| video_urls | string[] | - | Array de URLs de los videos (mínimo 2). |
| transition_options.global_effect | string | fade | fade, fadeblack, fadewhite, distance, wipeleft, wiperight, wipeup, wipedown, slideleft, slideright, circlecrop, rectcrop, dissolve, pixelize, radial, hblur, diagtl, diagtr. |
| transition_options.duration | number | 1.0 | Duración de la transición en segundos. |
curl -X POST "https://api.videostack.app/video/join" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"webhook_url": "https://tu-dominio.com/webhook",
"video_urls": [
"https://example.com/clip1.mp4",
"https://example.com/clip2.mp4"
],
"transition_options": {
"global_effect": "fadeblack",
"duration": 1.5
}
}'HTTP/1.1 202 Accepted
Content-Type: application/json
{
"job_id": "7a9b1c...",
"status": "processing"
}/video/editSÍNCRONOEdición Genérica (FFmpeg)
Libertad total. Envía comandos FFmpeg crudos para aplicar filtros complejos de video y audio. Soporta sintaxis de duración dinámica ('T').
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| video_url | string | - | URL del video. |
| audio_url | string | - | (Opcional) URL de audio adicional. |
| commands | object[] | - | Array de pares {option, value}. Usa 'T' en el value para referenciar la duración total (ej: 'T-5'). |
Opción 1: Descarga Directa (Por defecto)
curl -X POST "https://api.videostack.app/video/edit" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/video.mp4",
"commands": [
{"option": "-vf", "value": "scale=1920:1080,fps=30"},
{"option": "-c:v", "value": "libx264"},
{"option": "-preset", "value": "veryfast"}
]
}'HTTP/1.1 200 OK
Content-Type: video/mp4
Content-Disposition: attachment; filename="output.mp4"
Content-Length: 12053412
<binary_data>Opción 2: Obtener URL S3 (?return_type=url)
curl -X POST "https://api.videostack.app/video/edit?return_type=url" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/video.mp4",
"commands": [
{"option": "-vf", "value": "scale=1920:1080,fps=30"},
{"option": "-c:v", "value": "libx264"},
{"option": "-preset", "value": "veryfast"}
]
}'HTTP/1.1 200 OK
Content-Type: application/json
{
"message": "Video editado",
"url": "https://cdn.videostack.app/uploads/..."
}/video/jumpcutASÍNCRONO (WEBHOOK)Jumpcut Automático (Silencios)
Analiza el audio del video y elimina automáticamente los silencios, ideal para vlogs, podcasts o tutoriales para retener audiencia.
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| webhook_url | string | - | URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona). |
| video_url | string | - | URL del video. |
| silence_db | string | -30dB | Umbral de ruido para considerar silencio. |
| silence_duration | number | 0.5 | Duración mínima en segundos para cortar. |
| padding | number | 0.2 | Margen de seguridad (seg) alrededor de los cortes para evitar voces cortadas. |
curl -X POST "https://api.videostack.app/video/jumpcut" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"webhook_url": "https://tu-dominio.com/webhook",
"video_url": "https://example.com/podcast.mp4",
"silence_db": "-35dB",
"silence_duration": 0.8,
"padding": 0.25
}'HTTP/1.1 202 Accepted
Content-Type: application/json
{
"job_id": "7a9b1c...",
"status": "processing"
}/video/smartcropASÍNCRONO (WEBHOOK)Smart Crop (TikTok/Reels)
Recorta un video horizontal (16:9) al formato vertical (9:16) desenfocando los bordes u optimizando el encuadre central automáticamente.
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| webhook_url | string | - | URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona). |
| video_url | string | - | URL del video horizontal. |
curl -X POST "https://api.videostack.app/video/smartcrop" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"webhook_url": "https://tu-dominio.com/webhook",
"video_url": "https://example.com/horizontal_video.mp4"
}'HTTP/1.1 202 Accepted
Content-Type: application/json
{
"job_id": "7a9b1c...",
"status": "processing"
}/video/clipSÍNCRONOExtraer Clip de Video
Extrae un segmento específico de un video usando tiempos exactos sin recodificar (cuando es posible) para máxima velocidad.
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| video_url | string | - | URL del video. |
| start_time | string | - | Tiempo de inicio (ej: '00:01:20' o '80'). |
| end_time | string | - | Tiempo de fin (ej: '00:02:00' o '120'). |
Opción 1: Descarga Directa (Por defecto)
curl -X POST "https://api.videostack.app/video/clip" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/video.mp4",
"start_time": "00:00:15",
"end_time": "00:00:45"
}'HTTP/1.1 200 OK
Content-Type: video/mp4
Content-Disposition: attachment; filename="clip.mp4"
Content-Length: 450321
<binary_data>Opción 2: Obtener URL S3 (?return_type=url)
curl -X POST "https://api.videostack.app/video/clip?return_type=url" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/video.mp4",
"start_time": "00:00:15",
"end_time": "00:00:45"
}'HTTP/1.1 200 OK
Content-Type: application/json
{
"message": "Video recortado",
"url": "https://cdn.videostack.app/uploads/..."
}/video/thumbnailSÍNCRONOGenerar Miniatura
Extrae un fotograma exacto del video para usarlo como miniatura o portada (JPEG).
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| video_url | string | - | URL del video. |
| timestamp | string | 00:00:01 | Marca de tiempo del fotograma a extraer. |
Opción 1: Descarga Directa (Por defecto)
curl -X POST "https://api.videostack.app/video/thumbnail" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/video.mp4",
"timestamp": "00:01:30"
}'HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Disposition: attachment; filename="thumbnail.jpg"
Content-Length: 204561
<binary_data>Opción 2: Obtener URL S3 (?return_type=url)
curl -X POST "https://api.videostack.app/video/thumbnail?return_type=url" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/video.mp4",
"timestamp": "00:01:30"
}'HTTP/1.1 200 OK
Content-Type: application/json
{
"message": "Miniatura generada",
"url": "https://cdn.videostack.app/uploads/..."
}/video/watermarkASÍNCRONO (WEBHOOK)Añadir Marca de Agua
Superpone una imagen (logo) sobre el video en una posición específica.
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| webhook_url | string | - | URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona). |
| video_url | string | - | URL del video. |
| image_url | string | - | URL de la imagen (PNG transparente ideal). |
| position | string | bottom-right | top-left, top-right, bottom-left, bottom-right, center. |
curl -X POST "https://api.videostack.app/video/watermark" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"webhook_url": "https://tu-dominio.com/webhook",
"video_url": "https://example.com/video.mp4",
"image_url": "https://example.com/logo.png",
"position": "top-left"
}'HTTP/1.1 202 Accepted
Content-Type: application/json
{
"job_id": "7a9b1c...",
"status": "processing"
}/video/compressASÍNCRONO (WEBHOOK)Compresión Masiva
Reduce dramáticamente el tamaño del archivo de video optimizando su resolución y bitrate mediante codificación de hardware (QSV/NVENC).
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| webhook_url | string | - | URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona). |
| video_url | string | - | URL del video pesado. |
| resolution | string | 720 | Resolución vertical máxima (1080, 720, 480). |
| crf | string | 28 | Constant Rate Factor (Calidad). Menor valor = Más calidad/peso. (23 a 28 es óptimo). |
curl -X POST "https://api.videostack.app/video/compress" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"webhook_url": "https://tu-dominio.com/webhook",
"video_url": "https://example.com/heavy_4k.mp4",
"resolution": "720",
"crf": "26"
}'HTTP/1.1 202 Accepted
Content-Type: application/json
{
"job_id": "7a9b1c...",
"status": "processing"
}/audio/extractSÍNCRONOExtraer Audio
Separa y exporta la pista de audio de cualquier archivo de video sin pérdida de calidad (copia directa del codec).
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| video_url | string | - | URL del video. |
Opción 1: Descarga Directa (Por defecto)
curl -X POST "https://api.videostack.app/audio/extract" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/video.mp4"
}'HTTP/1.1 200 OK
Content-Type: audio/mpeg
Content-Disposition: attachment; filename="audio.mp3"
Content-Length: 4501230
<binary_data>Opción 2: Obtener URL S3 (?return_type=url)
curl -X POST "https://api.videostack.app/audio/extract?return_type=url" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/video.mp4"
}'HTTP/1.1 200 OK
Content-Type: application/json
{
"message": "Audio extraído",
"url": "https://cdn.videostack.app/uploads/..."
}/audio/enhanceLimpiar y Mejorar Audio (IA)
Aplica reducción de ruido, normalización de volumen, compresión y ecualización paramétrica para dar un tono de 'estudio' a voces caseras.
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| audio_url | string | - | URL del audio o video de origen. |
Opción 1: Descarga Directa (Por defecto)
curl -X POST "https://api.videostack.app/audio/enhance" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"audio_url": "https://example.com/voice_memo.mp3"
}'HTTP/1.1 200 OK
Content-Type: audio/mpeg
Content-Disposition: attachment; filename="enhanced_audio.mp3"
Content-Length: 3501230
<binary_data>Opción 2: Obtener URL S3 (?return_type=url)
curl -X POST "https://api.videostack.app/audio/enhance?return_type=url" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"audio_url": "https://example.com/voice_memo.mp3"
}'HTTP/1.1 200 OK
Content-Type: application/json
{
"message": "Audio mejorado",
"url": "https://cdn.videostack.app/uploads/..."
}/audio/ttsSÍNCRONOTexto a Voz (TTS)
Genera audio de alta calidad a partir de texto usando redes neuronales profundas de Edge TTS.
Catálogo de Voces e Idiomas Soportados
La API soporta traducciones a más de 100 idiomas (código ISO-639-1) y síntesis de voz con redes neuronales. Aquí listamos las voces de mayor calidad para los idiomas más populares.
Español (es) 🇪🇸 🇲🇽
- es-ES-AlvaroNeural (M)
- es-ES-ElviraNeural (F)
- es-MX-DaliaNeural (F)
- es-MX-JorgeNeural (M)
Inglés (en) 🇺🇸 🇬🇧
- en-US-AriaNeural (F)
- en-US-GuyNeural (M)
- en-GB-SoniaNeural (F)
- en-GB-RyanNeural (M)
Francés (fr) 🇫🇷
- fr-FR-DeniseNeural (F)
- fr-FR-HenriNeural (M)
Alemán (de) 🇩🇪
- de-DE-KatjaNeural (F)
- de-DE-ConradNeural (M)
Italiano (it) 🇮🇹
- it-IT-IsabellaNeural (F)
- it-IT-DiegoNeural (M)
Portugués (pt) 🇧🇷 🇵🇹
- pt-BR-FranciscaNeural (F)
- pt-BR-AntonioNeural (M)
- pt-PT-DuarteNeural (M)
Ver catálogo completo de 322 voces soportadas
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| text | string | - | Texto a sintetizar. |
| voice | string | es-ES-AlvaroNeural | Identificador de la voz. |
Opción 1: Descarga Directa (Por defecto)
curl -X POST "https://api.videostack.app/audio/tts" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"text": "Bienvenidos al tutorial oficial de VideoStack.",
"voice": "es-ES-ElviraNeural"
}'HTTP/1.1 200 OK
Content-Type: audio/mpeg
Content-Disposition: attachment; filename="tts_output.mp3"
Content-Length: 150123
<binary_data>Opción 2: Obtener URL S3 (?return_type=url)
curl -X POST "https://api.videostack.app/audio/tts?return_type=url" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"text": "Bienvenidos al tutorial oficial de VideoStack.",
"voice": "es-ES-ElviraNeural"
}'HTTP/1.1 200 OK
Content-Type: application/json
{
"message": "Audio generado",
"url": "https://cdn.videostack.app/uploads/..."
}/animate/imageASÍNCRONO (WEBHOOK)Animar Imagen Estática
Transforma una simple imagen JPG/PNG en un clip de video dinámico usando paneos y zooms automatizados, ideal para B-Roll o slideshows.
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| webhook_url | string | - | URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona). |
| image_url | string | - | URL de la imagen. |
| effect | string | zoom_in | zoom_in, zoom_out, pan_right, pan_left, pan_up, pan_down. |
| duration | number | 5 | Duración en segundos (1-60). |
| zoom_level | number | 1.5 | Intensidad del zoom (1.0 a 3.0). |
curl -X POST "https://api.videostack.app/animate/image" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"webhook_url": "https://tu-dominio.com/webhook",
"image_url": "https://example.com/photo.jpg",
"effect": "pan_right",
"duration": 8,
"zoom_level": 1.2
}'HTTP/1.1 202 Accepted
Content-Type: application/json
{
"job_id": "7a9b1c...",
"status": "processing"
}/video/dubASÍNCRONO (WEBHOOK)Doblaje Automático IA
El pipeline definitivo: Transcribe el video, traduce el texto, genera el nuevo audio con TTS ajustando velocidades, aplica Audio Ducking al audio original y une todo en un nuevo video final.
Catálogo de Voces e Idiomas Soportados
La API soporta traducciones a más de 100 idiomas (código ISO-639-1) y síntesis de voz con redes neuronales. Aquí listamos las voces de mayor calidad para los idiomas más populares.
Español (es) 🇪🇸 🇲🇽
- es-ES-AlvaroNeural (M)
- es-ES-ElviraNeural (F)
- es-MX-DaliaNeural (F)
- es-MX-JorgeNeural (M)
Inglés (en) 🇺🇸 🇬🇧
- en-US-AriaNeural (F)
- en-US-GuyNeural (M)
- en-GB-SoniaNeural (F)
- en-GB-RyanNeural (M)
Francés (fr) 🇫🇷
- fr-FR-DeniseNeural (F)
- fr-FR-HenriNeural (M)
Alemán (de) 🇩🇪
- de-DE-KatjaNeural (F)
- de-DE-ConradNeural (M)
Italiano (it) 🇮🇹
- it-IT-IsabellaNeural (F)
- it-IT-DiegoNeural (M)
Portugués (pt) 🇧🇷 🇵🇹
- pt-BR-FranciscaNeural (F)
- pt-BR-AntonioNeural (M)
- pt-PT-DuarteNeural (M)
Ver catálogo completo de 322 voces soportadas
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| webhook_url | string | - | URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona). |
| video_url | string | - | URL del video en idioma original. |
| target_lang | string | es | Idioma destino (ej: es, fr, en). |
| voice | string | es-ES-AlvaroNeural | Voz neuronal a utilizar en el nuevo idioma. |
curl -X POST "https://api.videostack.app/video/dub" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"webhook_url": "https://tu-dominio.com/webhook",
"video_url": "https://example.com/english_video.mp4",
"target_lang": "es",
"voice": "es-ES-AlvaroNeural"
}'HTTP/1.1 202 Accepted
Content-Type: application/json
{
"job_id": "7a9b1c...",
"status": "processing"
}/download/mediaSÍNCRONODescarga Universal de RRSS
Extrae el MP4 o MP3 subyacente de URLs de plataformas de redes sociales (YouTube, TikTok, Twitter, Instagram, etc) utilizando yt-dlp.
Parámetros de la Petición
| Nombre | Tipo | Default | Descripción |
|---|---|---|---|
| url | string | - | Enlace al post de la red social. |
| media_type | string | video | video o audio. |
Opción 1: Descarga Directa (Por defecto)
curl -X POST "https://api.videostack.app/download/media" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.tiktok.com/@user/video/123456",
"media_type": "video"
}'HTTP/1.1 200 OK
Content-Type: video/mp4
Content-Disposition: attachment; filename="tiktok_video.mp4"
Content-Length: 8450123
<binary_data>Opción 2: Obtener URL S3 (?return_type=url)
curl -X POST "https://api.videostack.app/download/media?return_type=url" \
-H "X-API-Key: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.tiktok.com/@user/video/123456",
"media_type": "video"
}'HTTP/1.1 200 OK
Content-Type: application/json
{
"message": "Descarga completada",
"url": "https://cdn.videostack.app/uploads/..."
}