VideoStack LogoVideoStackAPI

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}.

Petición cURL
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": "..."
}
GET/SÍNCRONO

Autenticación

La API requiere autenticación mediante API Key en todos los endpoints privados. Debes incluir tu clave en el header `X-API-Key`.

Request (cURL)
curl -X GET "https://api.videostack.app/" \
  -H "X-API-Key: tu_api_key"
Response (HTTP/JSON)
HTTP/1.1 200 OK
Content-Type: application/json

{
  "message": "API de Procesamiento de Video - Multi-GPU Optimizada",
  "gpus": ["NVIDIA RTX 4090"]
}
GET/health/metricsSÍNCRONO

Health & Metrics

Obtén estadísticas globales de uso de recursos, RAM, CPU y número de peticiones para monitorear tu cuota.

Request (cURL)
curl -X GET "https://api.videostack.app/health/metrics" \
  -H "X-API-Key: tu_api_key"
Response (HTTP/JSON)
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
    }
  }
}
POST/uploadSÍNCRONO

Subir 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

NombreTipoDefaultDescripción
filefile (multipart/form-data)-El archivo binario a subir.
Request (cURL)
curl -X POST "https://api.videostack.app/upload" \
  -H "X-API-Key: tu_api_key" \
  -F "file=@ruta/a/tu/archivo.mp4"
Response (HTTP/JSON)
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"
}
GET/mediaSÍNCRONO

Listar Archivos Activos

Devuelve la lista de archivos activos subidos en las últimas 24 horas y que aún ocupan cuota de almacenamiento.

Request (cURL)
curl -X GET "https://api.videostack.app/media" \
  -H "X-API-Key: tu_api_key"
Response (HTTP/JSON)
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"
  }
]
DELETE/media/{file_id}SÍNCRONO

Eliminar Archivo

Elimina un archivo subido antes de que pasen sus 24 horas, útil para liberar espacio en la cuota de 5GB.

Request (cURL)
curl -X DELETE "https://api.videostack.app/media/8f3a5b..." \
  -H "X-API-Key: tu_api_key"
Response (HTTP/JSON)
HTTP/1.1 200 OK
Content-Type: application/json

{
  "status": "deleted",
  "file_id": "8f3a5b..."
}
POST/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

NombreTipoDefaultDescripción
webhook_urlstring-URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona).
video_urlstring-URL pública del video original.
style_options.effectstringkaraoke_fillEfectos 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_linenumber5Límite de palabras mostradas simultáneamente.
style_options.font_namestringArialNombre de la fuente (debe estar instalada en servidor).
style_options.font_sizenumber60Tamaño de la fuente.
style_options.primary_colorstring#FFFFFFColor principal en formato HEX.
style_options.secondary_colorstring#808080Color secundario para palabras pasadas o inactivas.
style_options.position_alignmentnumber2Alineación usando teclado numérico (2 = Centro abajo, 5 = Centro medio, 8 = Centro arriba).
Request (cURL)
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"
    }
  }'
Response (HTTP/JSON)
HTTP/1.1 202 Accepted
Content-Type: application/json

{
  "job_id": "7a9b1c...",
  "status": "processing"
}
POST/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

NombreTipoDefaultDescripción
webhook_urlstring-URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona).
video_urlstring-URL del video (MP4) o link de YouTube.
languagestringautoCódigo de idioma (ej: es, en).
output_formatstringjsonjson, text, srt, vtt.
include_timestampsbooleantrueIncluye marcas de tiempo por segmento.
include_word_timestampsbooleanfalseIncluye marcas de tiempo a nivel de palabra individual.
Request (cURL)
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
  }'
Response (HTTP/JSON)
HTTP/1.1 202 Accepted
Content-Type: application/json

{
  "job_id": "7a9b1c...",
  "status": "processing"
}
POST/subtitles/translateSÍNCRONO

Traducir 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.

es (Español)
en (Inglés)
fr (Francés)
de (Alemán)
it (Italiano)
pt (Portugués)
zh-CN (Chino)
ja (Japonés)
ru (Ruso)
ar (Árabe)
ko (Coreano)
hi (Hindi)

Parámetros de la Petición

NombreTipoDefaultDescripción
video_urlstring-URL del video original.
target_langstringenIdioma destino (ej: en, fr, de).
Request (cURL)
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"
  }'
Response (HTTP/JSON)
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" }
  ]
}
POST/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

NombreTipoDefaultDescripción
webhook_urlstring-URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona).
video_urlsstring[]-Array de URLs de los videos (mínimo 2).
transition_options.global_effectstringfadefade, fadeblack, fadewhite, distance, wipeleft, wiperight, wipeup, wipedown, slideleft, slideright, circlecrop, rectcrop, dissolve, pixelize, radial, hblur, diagtl, diagtr.
transition_options.durationnumber1.0Duración de la transición en segundos.
Request (cURL)
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
    }
  }'
Response (HTTP/JSON)
HTTP/1.1 202 Accepted
Content-Type: application/json

{
  "job_id": "7a9b1c...",
  "status": "processing"
}
POST/video/editSÍNCRONO

Edició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

NombreTipoDefaultDescripción
video_urlstring-URL del video.
audio_urlstring-(Opcional) URL de audio adicional.
commandsobject[]-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)

Request (cURL)
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"}
    ]
  }'
Response (Binario)
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)

Request (cURL)
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"}
    ]
  }'
Response (JSON)
HTTP/1.1 200 OK
Content-Type: application/json

{
  "message": "Video editado",
  "url": "https://cdn.videostack.app/uploads/..."
}
POST/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

NombreTipoDefaultDescripción
webhook_urlstring-URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona).
video_urlstring-URL del video.
silence_dbstring-30dBUmbral de ruido para considerar silencio.
silence_durationnumber0.5Duración mínima en segundos para cortar.
paddingnumber0.2Margen de seguridad (seg) alrededor de los cortes para evitar voces cortadas.
Request (cURL)
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
  }'
Response (HTTP/JSON)
HTTP/1.1 202 Accepted
Content-Type: application/json

{
  "job_id": "7a9b1c...",
  "status": "processing"
}
POST/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

NombreTipoDefaultDescripción
webhook_urlstring-URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona).
video_urlstring-URL del video horizontal.
Request (cURL)
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"
  }'
Response (HTTP/JSON)
HTTP/1.1 202 Accepted
Content-Type: application/json

{
  "job_id": "7a9b1c...",
  "status": "processing"
}
POST/video/clipSÍNCRONO

Extraer 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

NombreTipoDefaultDescripción
video_urlstring-URL del video.
start_timestring-Tiempo de inicio (ej: '00:01:20' o '80').
end_timestring-Tiempo de fin (ej: '00:02:00' o '120').

Opción 1: Descarga Directa (Por defecto)

Request (cURL)
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"
  }'
Response (Binario)
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)

Request (cURL)
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"
  }'
Response (JSON)
HTTP/1.1 200 OK
Content-Type: application/json

{
  "message": "Video recortado",
  "url": "https://cdn.videostack.app/uploads/..."
}
POST/video/thumbnailSÍNCRONO

Generar Miniatura

Extrae un fotograma exacto del video para usarlo como miniatura o portada (JPEG).

Parámetros de la Petición

NombreTipoDefaultDescripción
video_urlstring-URL del video.
timestampstring00:00:01Marca de tiempo del fotograma a extraer.

Opción 1: Descarga Directa (Por defecto)

Request (cURL)
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"
  }'
Response (Binario)
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)

Request (cURL)
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"
  }'
Response (JSON)
HTTP/1.1 200 OK
Content-Type: application/json

{
  "message": "Miniatura generada",
  "url": "https://cdn.videostack.app/uploads/..."
}
POST/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

NombreTipoDefaultDescripción
webhook_urlstring-URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona).
video_urlstring-URL del video.
image_urlstring-URL de la imagen (PNG transparente ideal).
positionstringbottom-righttop-left, top-right, bottom-left, bottom-right, center.
Request (cURL)
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"
  }'
Response (HTTP/JSON)
HTTP/1.1 202 Accepted
Content-Type: application/json

{
  "job_id": "7a9b1c...",
  "status": "processing"
}
POST/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

NombreTipoDefaultDescripción
webhook_urlstring-URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona).
video_urlstring-URL del video pesado.
resolutionstring720Resolución vertical máxima (1080, 720, 480).
crfstring28Constant Rate Factor (Calidad). Menor valor = Más calidad/peso. (23 a 28 es óptimo).
Request (cURL)
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"
  }'
Response (HTTP/JSON)
HTTP/1.1 202 Accepted
Content-Type: application/json

{
  "job_id": "7a9b1c...",
  "status": "processing"
}
POST/audio/extractSÍNCRONO

Extraer 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

NombreTipoDefaultDescripción
video_urlstring-URL del video.

Opción 1: Descarga Directa (Por defecto)

Request (cURL)
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"
  }'
Response (Binario)
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)

Request (cURL)
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"
  }'
Response (JSON)
HTTP/1.1 200 OK
Content-Type: application/json

{
  "message": "Audio extraído",
  "url": "https://cdn.videostack.app/uploads/..."
}
POST/audio/enhance

Limpiar 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

NombreTipoDefaultDescripción
audio_urlstring-URL del audio o video de origen.

Opción 1: Descarga Directa (Por defecto)

Request (cURL)
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"
  }'
Response (Binario)
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)

Request (cURL)
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"
  }'
Response (JSON)
HTTP/1.1 200 OK
Content-Type: application/json

{
  "message": "Audio mejorado",
  "url": "https://cdn.videostack.app/uploads/..."
}
POST/audio/ttsSÍNCRONO

Texto 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
ID de la Voz (API)GéneroIdioma / Región
af-ZA-AdriNeural♀ Mujeraf-ZA
af-ZA-WillemNeural♂ Hombreaf-ZA
am-ET-AmehaNeural♂ Hombream-ET
am-ET-MekdesNeural♀ Mujeram-ET
ar-AE-FatimaNeural♀ Mujerar-AE
ar-AE-HamdanNeural♂ Hombrear-AE
ar-BH-AliNeural♂ Hombrear-BH
ar-BH-LailaNeural♀ Mujerar-BH
ar-DZ-AminaNeural♀ Mujerar-DZ
ar-DZ-IsmaelNeural♂ Hombrear-DZ
ar-EG-SalmaNeural♀ Mujerar-EG
ar-EG-ShakirNeural♂ Hombrear-EG
ar-IQ-BasselNeural♂ Hombrear-IQ
ar-IQ-RanaNeural♀ Mujerar-IQ
ar-JO-SanaNeural♀ Mujerar-JO
ar-JO-TaimNeural♂ Hombrear-JO
ar-KW-FahedNeural♂ Hombrear-KW
ar-KW-NouraNeural♀ Mujerar-KW
ar-LB-LaylaNeural♀ Mujerar-LB
ar-LB-RamiNeural♂ Hombrear-LB
ar-LY-ImanNeural♀ Mujerar-LY
ar-LY-OmarNeural♂ Hombrear-LY
ar-MA-JamalNeural♂ Hombrear-MA
ar-MA-MounaNeural♀ Mujerar-MA
ar-OM-AbdullahNeural♂ Hombrear-OM
ar-OM-AyshaNeural♀ Mujerar-OM
ar-QA-AmalNeural♀ Mujerar-QA
ar-QA-MoazNeural♂ Hombrear-QA
ar-SA-HamedNeural♂ Hombrear-SA
ar-SA-ZariyahNeural♀ Mujerar-SA
ar-SY-AmanyNeural♀ Mujerar-SY
ar-SY-LaithNeural♂ Hombrear-SY
ar-TN-HediNeural♂ Hombrear-TN
ar-TN-ReemNeural♀ Mujerar-TN
ar-YE-MaryamNeural♀ Mujerar-YE
ar-YE-SalehNeural♂ Hombrear-YE
az-AZ-BabekNeural♂ Hombreaz-AZ
az-AZ-BanuNeural♀ Mujeraz-AZ
bg-BG-BorislavNeural♂ Hombrebg-BG
bg-BG-KalinaNeural♀ Mujerbg-BG
bn-BD-NabanitaNeural♀ Mujerbn-BD
bn-BD-PradeepNeural♂ Hombrebn-BD
bn-IN-BashkarNeural♂ Hombrebn-IN
bn-IN-TanishaaNeural♀ Mujerbn-IN
bs-BA-GoranNeural♂ Hombrebs-BA
bs-BA-VesnaNeural♀ Mujerbs-BA
ca-ES-EnricNeural♂ Hombreca-ES
ca-ES-JoanaNeural♀ Mujerca-ES
cs-CZ-AntoninNeural♂ Hombrecs-CZ
cs-CZ-VlastaNeural♀ Mujercs-CZ
cy-GB-AledNeural♂ Hombrecy-GB
cy-GB-NiaNeural♀ Mujercy-GB
da-DK-ChristelNeural♀ Mujerda-DK
da-DK-JeppeNeural♂ Hombreda-DK
de-AT-IngridNeural♀ Mujerde-AT
de-AT-JonasNeural♂ Hombrede-AT
de-CH-JanNeural♂ Hombrede-CH
de-CH-LeniNeural♀ Mujerde-CH
de-DE-AmalaNeural♀ Mujerde-DE
de-DE-ConradNeural♂ Hombrede-DE
de-DE-FlorianMultilingualNeural♂ Hombrede-DE
de-DE-KatjaNeural♀ Mujerde-DE
de-DE-KillianNeural♂ Hombrede-DE
de-DE-SeraphinaMultilingualNeural♀ Mujerde-DE
el-GR-AthinaNeural♀ Mujerel-GR
el-GR-NestorasNeural♂ Hombreel-GR
en-AU-NatashaNeural♀ Mujeren-AU
en-AU-WilliamMultilingualNeural♂ Hombreen-AU
en-CA-ClaraNeural♀ Mujeren-CA
en-CA-LiamNeural♂ Hombreen-CA
en-GB-LibbyNeural♀ Mujeren-GB
en-GB-MaisieNeural♀ Mujeren-GB
en-GB-RyanNeural♂ Hombreen-GB
en-GB-SoniaNeural♀ Mujeren-GB
en-GB-ThomasNeural♂ Hombreen-GB
en-HK-SamNeural♂ Hombreen-HK
en-HK-YanNeural♀ Mujeren-HK
en-IE-ConnorNeural♂ Hombreen-IE
en-IE-EmilyNeural♀ Mujeren-IE
en-IN-NeerjaExpressiveNeural♀ Mujeren-IN
en-IN-NeerjaNeural♀ Mujeren-IN
en-IN-PrabhatNeural♂ Hombreen-IN
en-KE-AsiliaNeural♀ Mujeren-KE
en-KE-ChilembaNeural♂ Hombreen-KE
en-NG-AbeoNeural♂ Hombreen-NG
en-NG-EzinneNeural♀ Mujeren-NG
en-NZ-MitchellNeural♂ Hombreen-NZ
en-NZ-MollyNeural♀ Mujeren-NZ
en-PH-JamesNeural♂ Hombreen-PH
en-PH-RosaNeural♀ Mujeren-PH
en-SG-LunaNeural♀ Mujeren-SG
en-SG-WayneNeural♂ Hombreen-SG
en-TZ-ElimuNeural♂ Hombreen-TZ
en-TZ-ImaniNeural♀ Mujeren-TZ
en-US-AnaNeural♀ Mujeren-US
en-US-AndrewMultilingualNeural♂ Hombreen-US
en-US-AndrewNeural♂ Hombreen-US
en-US-AriaNeural♀ Mujeren-US
en-US-AvaMultilingualNeural♀ Mujeren-US
en-US-AvaNeural♀ Mujeren-US
en-US-BrianMultilingualNeural♂ Hombreen-US
en-US-BrianNeural♂ Hombreen-US
en-US-ChristopherNeural♂ Hombreen-US
en-US-EmmaMultilingualNeural♀ Mujeren-US
en-US-EmmaNeural♀ Mujeren-US
en-US-EricNeural♂ Hombreen-US
en-US-GuyNeural♂ Hombreen-US
en-US-JennyNeural♀ Mujeren-US
en-US-MichelleNeural♀ Mujeren-US
en-US-RogerNeural♂ Hombreen-US
en-US-SteffanNeural♂ Hombreen-US
en-ZA-LeahNeural♀ Mujeren-ZA
en-ZA-LukeNeural♂ Hombreen-ZA
es-AR-ElenaNeural♀ Mujeres-AR
es-AR-TomasNeural♂ Hombrees-AR
es-BO-MarceloNeural♂ Hombrees-BO
es-BO-SofiaNeural♀ Mujeres-BO
es-CL-CatalinaNeural♀ Mujeres-CL
es-CL-LorenzoNeural♂ Hombrees-CL
es-CO-GonzaloNeural♂ Hombrees-CO
es-CO-SalomeNeural♀ Mujeres-CO
es-CR-JuanNeural♂ Hombrees-CR
es-CR-MariaNeural♀ Mujeres-CR
es-CU-BelkysNeural♀ Mujeres-CU
es-CU-ManuelNeural♂ Hombrees-CU
es-DO-EmilioNeural♂ Hombrees-DO
es-DO-RamonaNeural♀ Mujeres-DO
es-EC-AndreaNeural♀ Mujeres-EC
es-EC-LuisNeural♂ Hombrees-EC
es-ES-AlvaroNeural♂ Hombrees-ES
es-ES-ElviraNeural♀ Mujeres-ES
es-ES-XimenaNeural♀ Mujeres-ES
es-GQ-JavierNeural♂ Hombrees-GQ
es-GQ-TeresaNeural♀ Mujeres-GQ
es-GT-AndresNeural♂ Hombrees-GT
es-GT-MartaNeural♀ Mujeres-GT
es-HN-CarlosNeural♂ Hombrees-HN
es-HN-KarlaNeural♀ Mujeres-HN
es-MX-DaliaNeural♀ Mujeres-MX
es-MX-JorgeNeural♂ Hombrees-MX
es-NI-FedericoNeural♂ Hombrees-NI
es-NI-YolandaNeural♀ Mujeres-NI
es-PA-MargaritaNeural♀ Mujeres-PA
es-PA-RobertoNeural♂ Hombrees-PA
es-PE-AlexNeural♂ Hombrees-PE
es-PE-CamilaNeural♀ Mujeres-PE
es-PR-KarinaNeural♀ Mujeres-PR
es-PR-VictorNeural♂ Hombrees-PR
es-PY-MarioNeural♂ Hombrees-PY
es-PY-TaniaNeural♀ Mujeres-PY
es-SV-LorenaNeural♀ Mujeres-SV
es-SV-RodrigoNeural♂ Hombrees-SV
es-US-AlonsoNeural♂ Hombrees-US
es-US-PalomaNeural♀ Mujeres-US
es-UY-MateoNeural♂ Hombrees-UY
es-UY-ValentinaNeural♀ Mujeres-UY
es-VE-PaolaNeural♀ Mujeres-VE
es-VE-SebastianNeural♂ Hombrees-VE
et-EE-AnuNeural♀ Mujeret-EE
et-EE-KertNeural♂ Hombreet-EE
fa-IR-DilaraNeural♀ Mujerfa-IR
fa-IR-FaridNeural♂ Hombrefa-IR
fi-FI-HarriNeural♂ Hombrefi-FI
fi-FI-NooraNeural♀ Mujerfi-FI
fil-PH-AngeloNeural♂ Hombrefil-PH
fil-PH-BlessicaNeural♀ Mujerfil-PH
fr-BE-CharlineNeural♀ Mujerfr-BE
fr-BE-GerardNeural♂ Hombrefr-BE
fr-CA-AntoineNeural♂ Hombrefr-CA
fr-CA-JeanNeural♂ Hombrefr-CA
fr-CA-SylvieNeural♀ Mujerfr-CA
fr-CA-ThierryNeural♂ Hombrefr-CA
fr-CH-ArianeNeural♀ Mujerfr-CH
fr-CH-FabriceNeural♂ Hombrefr-CH
fr-FR-DeniseNeural♀ Mujerfr-FR
fr-FR-EloiseNeural♀ Mujerfr-FR
fr-FR-HenriNeural♂ Hombrefr-FR
fr-FR-RemyMultilingualNeural♂ Hombrefr-FR
fr-FR-VivienneMultilingualNeural♀ Mujerfr-FR
ga-IE-ColmNeural♂ Hombrega-IE
ga-IE-OrlaNeural♀ Mujerga-IE
gl-ES-RoiNeural♂ Hombregl-ES
gl-ES-SabelaNeural♀ Mujergl-ES
gu-IN-DhwaniNeural♀ Mujergu-IN
gu-IN-NiranjanNeural♂ Hombregu-IN
he-IL-AvriNeural♂ Hombrehe-IL
he-IL-HilaNeural♀ Mujerhe-IL
hi-IN-MadhurNeural♂ Hombrehi-IN
hi-IN-SwaraNeural♀ Mujerhi-IN
hr-HR-GabrijelaNeural♀ Mujerhr-HR
hr-HR-SreckoNeural♂ Hombrehr-HR
hu-HU-NoemiNeural♀ Mujerhu-HU
hu-HU-TamasNeural♂ Hombrehu-HU
id-ID-ArdiNeural♂ Hombreid-ID
id-ID-GadisNeural♀ Mujerid-ID
is-IS-GudrunNeural♀ Mujeris-IS
is-IS-GunnarNeural♂ Hombreis-IS
it-IT-DiegoNeural♂ Hombreit-IT
it-IT-ElsaNeural♀ Mujerit-IT
it-IT-GiuseppeMultilingualNeural♂ Hombreit-IT
it-IT-IsabellaNeural♀ Mujerit-IT
iu-Cans-CA-SiqiniqNeural♀ Mujeriu-Cans
iu-Cans-CA-TaqqiqNeural♂ Hombreiu-Cans
iu-Latn-CA-SiqiniqNeural♀ Mujeriu-Latn
iu-Latn-CA-TaqqiqNeural♂ Hombreiu-Latn
ja-JP-KeitaNeural♂ Hombreja-JP
ja-JP-NanamiNeural♀ Mujerja-JP
jv-ID-DimasNeural♂ Hombrejv-ID
jv-ID-SitiNeural♀ Mujerjv-ID
ka-GE-EkaNeural♀ Mujerka-GE
ka-GE-GiorgiNeural♂ Hombreka-GE
kk-KZ-AigulNeural♀ Mujerkk-KZ
kk-KZ-DauletNeural♂ Hombrekk-KZ
km-KH-PisethNeural♂ Hombrekm-KH
km-KH-SreymomNeural♀ Mujerkm-KH
kn-IN-GaganNeural♂ Hombrekn-IN
kn-IN-SapnaNeural♀ Mujerkn-IN
ko-KR-HyunsuMultilingualNeural♂ Hombreko-KR
ko-KR-InJoonNeural♂ Hombreko-KR
ko-KR-SunHiNeural♀ Mujerko-KR
lo-LA-ChanthavongNeural♂ Hombrelo-LA
lo-LA-KeomanyNeural♀ Mujerlo-LA
lt-LT-LeonasNeural♂ Hombrelt-LT
lt-LT-OnaNeural♀ Mujerlt-LT
lv-LV-EveritaNeural♀ Mujerlv-LV
lv-LV-NilsNeural♂ Hombrelv-LV
mk-MK-AleksandarNeural♂ Hombremk-MK
mk-MK-MarijaNeural♀ Mujermk-MK
ml-IN-MidhunNeural♂ Hombreml-IN
ml-IN-SobhanaNeural♀ Mujerml-IN
mn-MN-BataaNeural♂ Hombremn-MN
mn-MN-YesuiNeural♀ Mujermn-MN
mr-IN-AarohiNeural♀ Mujermr-IN
mr-IN-ManoharNeural♂ Hombremr-IN
ms-MY-OsmanNeural♂ Hombrems-MY
ms-MY-YasminNeural♀ Mujerms-MY
mt-MT-GraceNeural♀ Mujermt-MT
mt-MT-JosephNeural♂ Hombremt-MT
my-MM-NilarNeural♀ Mujermy-MM
my-MM-ThihaNeural♂ Hombremy-MM
nb-NO-FinnNeural♂ Hombrenb-NO
nb-NO-PernilleNeural♀ Mujernb-NO
ne-NP-HemkalaNeural♀ Mujerne-NP
ne-NP-SagarNeural♂ Hombrene-NP
nl-BE-ArnaudNeural♂ Hombrenl-BE
nl-BE-DenaNeural♀ Mujernl-BE
nl-NL-ColetteNeural♀ Mujernl-NL
nl-NL-FennaNeural♀ Mujernl-NL
nl-NL-MaartenNeural♂ Hombrenl-NL
pl-PL-MarekNeural♂ Hombrepl-PL
pl-PL-ZofiaNeural♀ Mujerpl-PL
ps-AF-GulNawazNeural♂ Hombreps-AF
ps-AF-LatifaNeural♀ Mujerps-AF
pt-BR-AntonioNeural♂ Hombrept-BR
pt-BR-FranciscaNeural♀ Mujerpt-BR
pt-BR-ThalitaMultilingualNeural♀ Mujerpt-BR
pt-PT-DuarteNeural♂ Hombrept-PT
pt-PT-RaquelNeural♀ Mujerpt-PT
ro-RO-AlinaNeural♀ Mujerro-RO
ro-RO-EmilNeural♂ Hombrero-RO
ru-RU-DmitryNeural♂ Hombreru-RU
ru-RU-SvetlanaNeural♀ Mujerru-RU
si-LK-SameeraNeural♂ Hombresi-LK
si-LK-ThiliniNeural♀ Mujersi-LK
sk-SK-LukasNeural♂ Hombresk-SK
sk-SK-ViktoriaNeural♀ Mujersk-SK
sl-SI-PetraNeural♀ Mujersl-SI
sl-SI-RokNeural♂ Hombresl-SI
so-SO-MuuseNeural♂ Hombreso-SO
so-SO-UbaxNeural♀ Mujerso-SO
sq-AL-AnilaNeural♀ Mujersq-AL
sq-AL-IlirNeural♂ Hombresq-AL
sr-RS-NicholasNeural♂ Hombresr-RS
sr-RS-SophieNeural♀ Mujersr-RS
su-ID-JajangNeural♂ Hombresu-ID
su-ID-TutiNeural♀ Mujersu-ID
sv-SE-MattiasNeural♂ Hombresv-SE
sv-SE-SofieNeural♀ Mujersv-SE
sw-KE-RafikiNeural♂ Hombresw-KE
sw-KE-ZuriNeural♀ Mujersw-KE
sw-TZ-DaudiNeural♂ Hombresw-TZ
sw-TZ-RehemaNeural♀ Mujersw-TZ
ta-IN-PallaviNeural♀ Mujerta-IN
ta-IN-ValluvarNeural♂ Hombreta-IN
ta-LK-KumarNeural♂ Hombreta-LK
ta-LK-SaranyaNeural♀ Mujerta-LK
ta-MY-KaniNeural♀ Mujerta-MY
ta-MY-SuryaNeural♂ Hombreta-MY
ta-SG-AnbuNeural♂ Hombreta-SG
ta-SG-VenbaNeural♀ Mujerta-SG
te-IN-MohanNeural♂ Hombrete-IN
te-IN-ShrutiNeural♀ Mujerte-IN
th-TH-NiwatNeural♂ Hombreth-TH
th-TH-PremwadeeNeural♀ Mujerth-TH
tr-TR-AhmetNeural♂ Hombretr-TR
tr-TR-EmelNeural♀ Mujertr-TR
uk-UA-OstapNeural♂ Hombreuk-UA
uk-UA-PolinaNeural♀ Mujeruk-UA
ur-IN-GulNeural♀ Mujerur-IN
ur-IN-SalmanNeural♂ Hombreur-IN
ur-PK-AsadNeural♂ Hombreur-PK
ur-PK-UzmaNeural♀ Mujerur-PK
uz-UZ-MadinaNeural♀ Mujeruz-UZ
uz-UZ-SardorNeural♂ Hombreuz-UZ
vi-VN-HoaiMyNeural♀ Mujervi-VN
vi-VN-NamMinhNeural♂ Hombrevi-VN
zh-CN-XiaoxiaoNeural♀ Mujerzh-CN
zh-CN-XiaoyiNeural♀ Mujerzh-CN
zh-CN-YunjianNeural♂ Hombrezh-CN
zh-CN-YunxiNeural♂ Hombrezh-CN
zh-CN-YunxiaNeural♂ Hombrezh-CN
zh-CN-YunyangNeural♂ Hombrezh-CN
zh-CN-liaoning-XiaobeiNeural♀ Mujerzh-CN
zh-CN-shaanxi-XiaoniNeural♀ Mujerzh-CN
zh-HK-HiuGaaiNeural♀ Mujerzh-HK
zh-HK-HiuMaanNeural♀ Mujerzh-HK
zh-HK-WanLungNeural♂ Hombrezh-HK
zh-TW-HsiaoChenNeural♀ Mujerzh-TW
zh-TW-HsiaoYuNeural♀ Mujerzh-TW
zh-TW-YunJheNeural♂ Hombrezh-TW
zu-ZA-ThandoNeural♀ Mujerzu-ZA
zu-ZA-ThembaNeural♂ Hombrezu-ZA

Parámetros de la Petición

NombreTipoDefaultDescripción
textstring-Texto a sintetizar.
voicestringes-ES-AlvaroNeuralIdentificador de la voz.

Opción 1: Descarga Directa (Por defecto)

Request (cURL)
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"
  }'
Response (Binario)
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)

Request (cURL)
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"
  }'
Response (JSON)
HTTP/1.1 200 OK
Content-Type: application/json

{
  "message": "Audio generado",
  "url": "https://cdn.videostack.app/uploads/..."
}
POST/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

NombreTipoDefaultDescripción
webhook_urlstring-URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona).
image_urlstring-URL de la imagen.
effectstringzoom_inzoom_in, zoom_out, pan_right, pan_left, pan_up, pan_down.
durationnumber5Duración en segundos (1-60).
zoom_levelnumber1.5Intensidad del zoom (1.0 a 3.0).
Request (cURL)
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
  }'
Response (HTTP/JSON)
HTTP/1.1 202 Accepted
Content-Type: application/json

{
  "job_id": "7a9b1c...",
  "status": "processing"
}
POST/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
ID de la Voz (API)GéneroIdioma / Región
af-ZA-AdriNeural♀ Mujeraf-ZA
af-ZA-WillemNeural♂ Hombreaf-ZA
am-ET-AmehaNeural♂ Hombream-ET
am-ET-MekdesNeural♀ Mujeram-ET
ar-AE-FatimaNeural♀ Mujerar-AE
ar-AE-HamdanNeural♂ Hombrear-AE
ar-BH-AliNeural♂ Hombrear-BH
ar-BH-LailaNeural♀ Mujerar-BH
ar-DZ-AminaNeural♀ Mujerar-DZ
ar-DZ-IsmaelNeural♂ Hombrear-DZ
ar-EG-SalmaNeural♀ Mujerar-EG
ar-EG-ShakirNeural♂ Hombrear-EG
ar-IQ-BasselNeural♂ Hombrear-IQ
ar-IQ-RanaNeural♀ Mujerar-IQ
ar-JO-SanaNeural♀ Mujerar-JO
ar-JO-TaimNeural♂ Hombrear-JO
ar-KW-FahedNeural♂ Hombrear-KW
ar-KW-NouraNeural♀ Mujerar-KW
ar-LB-LaylaNeural♀ Mujerar-LB
ar-LB-RamiNeural♂ Hombrear-LB
ar-LY-ImanNeural♀ Mujerar-LY
ar-LY-OmarNeural♂ Hombrear-LY
ar-MA-JamalNeural♂ Hombrear-MA
ar-MA-MounaNeural♀ Mujerar-MA
ar-OM-AbdullahNeural♂ Hombrear-OM
ar-OM-AyshaNeural♀ Mujerar-OM
ar-QA-AmalNeural♀ Mujerar-QA
ar-QA-MoazNeural♂ Hombrear-QA
ar-SA-HamedNeural♂ Hombrear-SA
ar-SA-ZariyahNeural♀ Mujerar-SA
ar-SY-AmanyNeural♀ Mujerar-SY
ar-SY-LaithNeural♂ Hombrear-SY
ar-TN-HediNeural♂ Hombrear-TN
ar-TN-ReemNeural♀ Mujerar-TN
ar-YE-MaryamNeural♀ Mujerar-YE
ar-YE-SalehNeural♂ Hombrear-YE
az-AZ-BabekNeural♂ Hombreaz-AZ
az-AZ-BanuNeural♀ Mujeraz-AZ
bg-BG-BorislavNeural♂ Hombrebg-BG
bg-BG-KalinaNeural♀ Mujerbg-BG
bn-BD-NabanitaNeural♀ Mujerbn-BD
bn-BD-PradeepNeural♂ Hombrebn-BD
bn-IN-BashkarNeural♂ Hombrebn-IN
bn-IN-TanishaaNeural♀ Mujerbn-IN
bs-BA-GoranNeural♂ Hombrebs-BA
bs-BA-VesnaNeural♀ Mujerbs-BA
ca-ES-EnricNeural♂ Hombreca-ES
ca-ES-JoanaNeural♀ Mujerca-ES
cs-CZ-AntoninNeural♂ Hombrecs-CZ
cs-CZ-VlastaNeural♀ Mujercs-CZ
cy-GB-AledNeural♂ Hombrecy-GB
cy-GB-NiaNeural♀ Mujercy-GB
da-DK-ChristelNeural♀ Mujerda-DK
da-DK-JeppeNeural♂ Hombreda-DK
de-AT-IngridNeural♀ Mujerde-AT
de-AT-JonasNeural♂ Hombrede-AT
de-CH-JanNeural♂ Hombrede-CH
de-CH-LeniNeural♀ Mujerde-CH
de-DE-AmalaNeural♀ Mujerde-DE
de-DE-ConradNeural♂ Hombrede-DE
de-DE-FlorianMultilingualNeural♂ Hombrede-DE
de-DE-KatjaNeural♀ Mujerde-DE
de-DE-KillianNeural♂ Hombrede-DE
de-DE-SeraphinaMultilingualNeural♀ Mujerde-DE
el-GR-AthinaNeural♀ Mujerel-GR
el-GR-NestorasNeural♂ Hombreel-GR
en-AU-NatashaNeural♀ Mujeren-AU
en-AU-WilliamMultilingualNeural♂ Hombreen-AU
en-CA-ClaraNeural♀ Mujeren-CA
en-CA-LiamNeural♂ Hombreen-CA
en-GB-LibbyNeural♀ Mujeren-GB
en-GB-MaisieNeural♀ Mujeren-GB
en-GB-RyanNeural♂ Hombreen-GB
en-GB-SoniaNeural♀ Mujeren-GB
en-GB-ThomasNeural♂ Hombreen-GB
en-HK-SamNeural♂ Hombreen-HK
en-HK-YanNeural♀ Mujeren-HK
en-IE-ConnorNeural♂ Hombreen-IE
en-IE-EmilyNeural♀ Mujeren-IE
en-IN-NeerjaExpressiveNeural♀ Mujeren-IN
en-IN-NeerjaNeural♀ Mujeren-IN
en-IN-PrabhatNeural♂ Hombreen-IN
en-KE-AsiliaNeural♀ Mujeren-KE
en-KE-ChilembaNeural♂ Hombreen-KE
en-NG-AbeoNeural♂ Hombreen-NG
en-NG-EzinneNeural♀ Mujeren-NG
en-NZ-MitchellNeural♂ Hombreen-NZ
en-NZ-MollyNeural♀ Mujeren-NZ
en-PH-JamesNeural♂ Hombreen-PH
en-PH-RosaNeural♀ Mujeren-PH
en-SG-LunaNeural♀ Mujeren-SG
en-SG-WayneNeural♂ Hombreen-SG
en-TZ-ElimuNeural♂ Hombreen-TZ
en-TZ-ImaniNeural♀ Mujeren-TZ
en-US-AnaNeural♀ Mujeren-US
en-US-AndrewMultilingualNeural♂ Hombreen-US
en-US-AndrewNeural♂ Hombreen-US
en-US-AriaNeural♀ Mujeren-US
en-US-AvaMultilingualNeural♀ Mujeren-US
en-US-AvaNeural♀ Mujeren-US
en-US-BrianMultilingualNeural♂ Hombreen-US
en-US-BrianNeural♂ Hombreen-US
en-US-ChristopherNeural♂ Hombreen-US
en-US-EmmaMultilingualNeural♀ Mujeren-US
en-US-EmmaNeural♀ Mujeren-US
en-US-EricNeural♂ Hombreen-US
en-US-GuyNeural♂ Hombreen-US
en-US-JennyNeural♀ Mujeren-US
en-US-MichelleNeural♀ Mujeren-US
en-US-RogerNeural♂ Hombreen-US
en-US-SteffanNeural♂ Hombreen-US
en-ZA-LeahNeural♀ Mujeren-ZA
en-ZA-LukeNeural♂ Hombreen-ZA
es-AR-ElenaNeural♀ Mujeres-AR
es-AR-TomasNeural♂ Hombrees-AR
es-BO-MarceloNeural♂ Hombrees-BO
es-BO-SofiaNeural♀ Mujeres-BO
es-CL-CatalinaNeural♀ Mujeres-CL
es-CL-LorenzoNeural♂ Hombrees-CL
es-CO-GonzaloNeural♂ Hombrees-CO
es-CO-SalomeNeural♀ Mujeres-CO
es-CR-JuanNeural♂ Hombrees-CR
es-CR-MariaNeural♀ Mujeres-CR
es-CU-BelkysNeural♀ Mujeres-CU
es-CU-ManuelNeural♂ Hombrees-CU
es-DO-EmilioNeural♂ Hombrees-DO
es-DO-RamonaNeural♀ Mujeres-DO
es-EC-AndreaNeural♀ Mujeres-EC
es-EC-LuisNeural♂ Hombrees-EC
es-ES-AlvaroNeural♂ Hombrees-ES
es-ES-ElviraNeural♀ Mujeres-ES
es-ES-XimenaNeural♀ Mujeres-ES
es-GQ-JavierNeural♂ Hombrees-GQ
es-GQ-TeresaNeural♀ Mujeres-GQ
es-GT-AndresNeural♂ Hombrees-GT
es-GT-MartaNeural♀ Mujeres-GT
es-HN-CarlosNeural♂ Hombrees-HN
es-HN-KarlaNeural♀ Mujeres-HN
es-MX-DaliaNeural♀ Mujeres-MX
es-MX-JorgeNeural♂ Hombrees-MX
es-NI-FedericoNeural♂ Hombrees-NI
es-NI-YolandaNeural♀ Mujeres-NI
es-PA-MargaritaNeural♀ Mujeres-PA
es-PA-RobertoNeural♂ Hombrees-PA
es-PE-AlexNeural♂ Hombrees-PE
es-PE-CamilaNeural♀ Mujeres-PE
es-PR-KarinaNeural♀ Mujeres-PR
es-PR-VictorNeural♂ Hombrees-PR
es-PY-MarioNeural♂ Hombrees-PY
es-PY-TaniaNeural♀ Mujeres-PY
es-SV-LorenaNeural♀ Mujeres-SV
es-SV-RodrigoNeural♂ Hombrees-SV
es-US-AlonsoNeural♂ Hombrees-US
es-US-PalomaNeural♀ Mujeres-US
es-UY-MateoNeural♂ Hombrees-UY
es-UY-ValentinaNeural♀ Mujeres-UY
es-VE-PaolaNeural♀ Mujeres-VE
es-VE-SebastianNeural♂ Hombrees-VE
et-EE-AnuNeural♀ Mujeret-EE
et-EE-KertNeural♂ Hombreet-EE
fa-IR-DilaraNeural♀ Mujerfa-IR
fa-IR-FaridNeural♂ Hombrefa-IR
fi-FI-HarriNeural♂ Hombrefi-FI
fi-FI-NooraNeural♀ Mujerfi-FI
fil-PH-AngeloNeural♂ Hombrefil-PH
fil-PH-BlessicaNeural♀ Mujerfil-PH
fr-BE-CharlineNeural♀ Mujerfr-BE
fr-BE-GerardNeural♂ Hombrefr-BE
fr-CA-AntoineNeural♂ Hombrefr-CA
fr-CA-JeanNeural♂ Hombrefr-CA
fr-CA-SylvieNeural♀ Mujerfr-CA
fr-CA-ThierryNeural♂ Hombrefr-CA
fr-CH-ArianeNeural♀ Mujerfr-CH
fr-CH-FabriceNeural♂ Hombrefr-CH
fr-FR-DeniseNeural♀ Mujerfr-FR
fr-FR-EloiseNeural♀ Mujerfr-FR
fr-FR-HenriNeural♂ Hombrefr-FR
fr-FR-RemyMultilingualNeural♂ Hombrefr-FR
fr-FR-VivienneMultilingualNeural♀ Mujerfr-FR
ga-IE-ColmNeural♂ Hombrega-IE
ga-IE-OrlaNeural♀ Mujerga-IE
gl-ES-RoiNeural♂ Hombregl-ES
gl-ES-SabelaNeural♀ Mujergl-ES
gu-IN-DhwaniNeural♀ Mujergu-IN
gu-IN-NiranjanNeural♂ Hombregu-IN
he-IL-AvriNeural♂ Hombrehe-IL
he-IL-HilaNeural♀ Mujerhe-IL
hi-IN-MadhurNeural♂ Hombrehi-IN
hi-IN-SwaraNeural♀ Mujerhi-IN
hr-HR-GabrijelaNeural♀ Mujerhr-HR
hr-HR-SreckoNeural♂ Hombrehr-HR
hu-HU-NoemiNeural♀ Mujerhu-HU
hu-HU-TamasNeural♂ Hombrehu-HU
id-ID-ArdiNeural♂ Hombreid-ID
id-ID-GadisNeural♀ Mujerid-ID
is-IS-GudrunNeural♀ Mujeris-IS
is-IS-GunnarNeural♂ Hombreis-IS
it-IT-DiegoNeural♂ Hombreit-IT
it-IT-ElsaNeural♀ Mujerit-IT
it-IT-GiuseppeMultilingualNeural♂ Hombreit-IT
it-IT-IsabellaNeural♀ Mujerit-IT
iu-Cans-CA-SiqiniqNeural♀ Mujeriu-Cans
iu-Cans-CA-TaqqiqNeural♂ Hombreiu-Cans
iu-Latn-CA-SiqiniqNeural♀ Mujeriu-Latn
iu-Latn-CA-TaqqiqNeural♂ Hombreiu-Latn
ja-JP-KeitaNeural♂ Hombreja-JP
ja-JP-NanamiNeural♀ Mujerja-JP
jv-ID-DimasNeural♂ Hombrejv-ID
jv-ID-SitiNeural♀ Mujerjv-ID
ka-GE-EkaNeural♀ Mujerka-GE
ka-GE-GiorgiNeural♂ Hombreka-GE
kk-KZ-AigulNeural♀ Mujerkk-KZ
kk-KZ-DauletNeural♂ Hombrekk-KZ
km-KH-PisethNeural♂ Hombrekm-KH
km-KH-SreymomNeural♀ Mujerkm-KH
kn-IN-GaganNeural♂ Hombrekn-IN
kn-IN-SapnaNeural♀ Mujerkn-IN
ko-KR-HyunsuMultilingualNeural♂ Hombreko-KR
ko-KR-InJoonNeural♂ Hombreko-KR
ko-KR-SunHiNeural♀ Mujerko-KR
lo-LA-ChanthavongNeural♂ Hombrelo-LA
lo-LA-KeomanyNeural♀ Mujerlo-LA
lt-LT-LeonasNeural♂ Hombrelt-LT
lt-LT-OnaNeural♀ Mujerlt-LT
lv-LV-EveritaNeural♀ Mujerlv-LV
lv-LV-NilsNeural♂ Hombrelv-LV
mk-MK-AleksandarNeural♂ Hombremk-MK
mk-MK-MarijaNeural♀ Mujermk-MK
ml-IN-MidhunNeural♂ Hombreml-IN
ml-IN-SobhanaNeural♀ Mujerml-IN
mn-MN-BataaNeural♂ Hombremn-MN
mn-MN-YesuiNeural♀ Mujermn-MN
mr-IN-AarohiNeural♀ Mujermr-IN
mr-IN-ManoharNeural♂ Hombremr-IN
ms-MY-OsmanNeural♂ Hombrems-MY
ms-MY-YasminNeural♀ Mujerms-MY
mt-MT-GraceNeural♀ Mujermt-MT
mt-MT-JosephNeural♂ Hombremt-MT
my-MM-NilarNeural♀ Mujermy-MM
my-MM-ThihaNeural♂ Hombremy-MM
nb-NO-FinnNeural♂ Hombrenb-NO
nb-NO-PernilleNeural♀ Mujernb-NO
ne-NP-HemkalaNeural♀ Mujerne-NP
ne-NP-SagarNeural♂ Hombrene-NP
nl-BE-ArnaudNeural♂ Hombrenl-BE
nl-BE-DenaNeural♀ Mujernl-BE
nl-NL-ColetteNeural♀ Mujernl-NL
nl-NL-FennaNeural♀ Mujernl-NL
nl-NL-MaartenNeural♂ Hombrenl-NL
pl-PL-MarekNeural♂ Hombrepl-PL
pl-PL-ZofiaNeural♀ Mujerpl-PL
ps-AF-GulNawazNeural♂ Hombreps-AF
ps-AF-LatifaNeural♀ Mujerps-AF
pt-BR-AntonioNeural♂ Hombrept-BR
pt-BR-FranciscaNeural♀ Mujerpt-BR
pt-BR-ThalitaMultilingualNeural♀ Mujerpt-BR
pt-PT-DuarteNeural♂ Hombrept-PT
pt-PT-RaquelNeural♀ Mujerpt-PT
ro-RO-AlinaNeural♀ Mujerro-RO
ro-RO-EmilNeural♂ Hombrero-RO
ru-RU-DmitryNeural♂ Hombreru-RU
ru-RU-SvetlanaNeural♀ Mujerru-RU
si-LK-SameeraNeural♂ Hombresi-LK
si-LK-ThiliniNeural♀ Mujersi-LK
sk-SK-LukasNeural♂ Hombresk-SK
sk-SK-ViktoriaNeural♀ Mujersk-SK
sl-SI-PetraNeural♀ Mujersl-SI
sl-SI-RokNeural♂ Hombresl-SI
so-SO-MuuseNeural♂ Hombreso-SO
so-SO-UbaxNeural♀ Mujerso-SO
sq-AL-AnilaNeural♀ Mujersq-AL
sq-AL-IlirNeural♂ Hombresq-AL
sr-RS-NicholasNeural♂ Hombresr-RS
sr-RS-SophieNeural♀ Mujersr-RS
su-ID-JajangNeural♂ Hombresu-ID
su-ID-TutiNeural♀ Mujersu-ID
sv-SE-MattiasNeural♂ Hombresv-SE
sv-SE-SofieNeural♀ Mujersv-SE
sw-KE-RafikiNeural♂ Hombresw-KE
sw-KE-ZuriNeural♀ Mujersw-KE
sw-TZ-DaudiNeural♂ Hombresw-TZ
sw-TZ-RehemaNeural♀ Mujersw-TZ
ta-IN-PallaviNeural♀ Mujerta-IN
ta-IN-ValluvarNeural♂ Hombreta-IN
ta-LK-KumarNeural♂ Hombreta-LK
ta-LK-SaranyaNeural♀ Mujerta-LK
ta-MY-KaniNeural♀ Mujerta-MY
ta-MY-SuryaNeural♂ Hombreta-MY
ta-SG-AnbuNeural♂ Hombreta-SG
ta-SG-VenbaNeural♀ Mujerta-SG
te-IN-MohanNeural♂ Hombrete-IN
te-IN-ShrutiNeural♀ Mujerte-IN
th-TH-NiwatNeural♂ Hombreth-TH
th-TH-PremwadeeNeural♀ Mujerth-TH
tr-TR-AhmetNeural♂ Hombretr-TR
tr-TR-EmelNeural♀ Mujertr-TR
uk-UA-OstapNeural♂ Hombreuk-UA
uk-UA-PolinaNeural♀ Mujeruk-UA
ur-IN-GulNeural♀ Mujerur-IN
ur-IN-SalmanNeural♂ Hombreur-IN
ur-PK-AsadNeural♂ Hombreur-PK
ur-PK-UzmaNeural♀ Mujerur-PK
uz-UZ-MadinaNeural♀ Mujeruz-UZ
uz-UZ-SardorNeural♂ Hombreuz-UZ
vi-VN-HoaiMyNeural♀ Mujervi-VN
vi-VN-NamMinhNeural♂ Hombrevi-VN
zh-CN-XiaoxiaoNeural♀ Mujerzh-CN
zh-CN-XiaoyiNeural♀ Mujerzh-CN
zh-CN-YunjianNeural♂ Hombrezh-CN
zh-CN-YunxiNeural♂ Hombrezh-CN
zh-CN-YunxiaNeural♂ Hombrezh-CN
zh-CN-YunyangNeural♂ Hombrezh-CN
zh-CN-liaoning-XiaobeiNeural♀ Mujerzh-CN
zh-CN-shaanxi-XiaoniNeural♀ Mujerzh-CN
zh-HK-HiuGaaiNeural♀ Mujerzh-HK
zh-HK-HiuMaanNeural♀ Mujerzh-HK
zh-HK-WanLungNeural♂ Hombrezh-HK
zh-TW-HsiaoChenNeural♀ Mujerzh-TW
zh-TW-HsiaoYuNeural♀ Mujerzh-TW
zh-TW-YunJheNeural♂ Hombrezh-TW
zu-ZA-ThandoNeural♀ Mujerzu-ZA
zu-ZA-ThembaNeural♂ Hombrezu-ZA

Parámetros de la Petición

NombreTipoDefaultDescripción
webhook_urlstring-URL opcional para recibir el webhook al finalizar (Ver guía de Arquitectura Asíncrona).
video_urlstring-URL del video en idioma original.
target_langstringesIdioma destino (ej: es, fr, en).
voicestringes-ES-AlvaroNeuralVoz neuronal a utilizar en el nuevo idioma.
Request (cURL)
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"
  }'
Response (HTTP/JSON)
HTTP/1.1 202 Accepted
Content-Type: application/json

{
  "job_id": "7a9b1c...",
  "status": "processing"
}
POST/download/mediaSÍNCRONO

Descarga 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

NombreTipoDefaultDescripción
urlstring-Enlace al post de la red social.
media_typestringvideovideo o audio.

Opción 1: Descarga Directa (Por defecto)

Request (cURL)
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"
  }'
Response (Binario)
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)

Request (cURL)
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"
  }'
Response (JSON)
HTTP/1.1 200 OK
Content-Type: application/json

{
  "message": "Descarga completada",
  "url": "https://cdn.videostack.app/uploads/..."
}

© 2026 VideoStack. Todos los derechos reservados.