# 1. exchange client credentials for a token (valid 1 hour)
curl -X POST https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d "grant_type=client_credentials"# 2. upload by link - YouTube, Drive, S3, Vimeo or direct URL
curl -X POST https://api.rask.ai/api/library/v1/media/link \
-H "Authorization: Bearer $TOKEN" \
-d '{"link": "https://youtu.be/...", "name": "Q3 launch"}'# 3. create the dubbing project - this starts the dub
curl -X POST https://api.rask.ai/v2/projects \
-H "Authorization: Bearer $TOKEN" \
-d '{
"video_id": "b8f7835d-e8c9-4ff4-8e34-5c336d818319",
"dst_lang": "es-mx",
"name": "Q3 launch"
}'# Poll the project until status is merging_done.while :; do
curl -s https://api.rask.ai/v2/projects/$ID \
-H "Authorization: Bearer $TOKEN" | jq .status
sleep 10done



Envía un archivo como datos de formulario multipart o publica un enlace. Las fuentes de enlaces compatibles son YouTube, Google Drive, S3, Vimeo y cualquier URL de descarga directa. Devuelve un ID de multimedia y metadatos técnicos completos antes de que gastes algo.
Pasa el ID de multimedia como video_id y un idioma de destino. Opcionalmente, adjunta tu propia transcripción o un glosario. El doblaje comienza de inmediato.
Lee el status hasta que alcance merging_done y luego descarga el video doblado, las pistas de audio y los archivos de subtítulos.
# pip install git+https://github.com/braskai/rask-sdk
import asyncio
from rask_sdk import RaskSDKClient
async def main():
client = RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
media = await client.upload_media_link(link="https://youtu.be/...")
project = await client.create_project(video_id=media.id, dst_lang="es-mx")
while project.status != "merging_done":
await asyncio.sleep(10)
project = await client.get_project(project.id)
print(project.translated_video, project.translation_srt_path)
asyncio.run(main())import os, time, requests
AUTH = "https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token"
API = "https://api.rask.ai"
token = requests.post(AUTH, auth=(CLIENT_ID, CLIENT_SECRET),
data={"grant_type": "client_credentials"}).json()["access_token"]
h = {"Authorization": f"Bearer {token}"}
media = requests.post(f"{API}/api/library/v1/media/link", headers=h,
json={"link": "https://youtu.be/..."}).json()
project = requests.post(f"{API}/v2/projects", headers=h,
json={"video_id": media["id"], "dst_lang": "es-mx"}).json()
while project["status"] != "merging_done":
time.sleep(10)
project = requests.get(f"{API}/v2/projects/{project['id']}", headers=h).json()
print(project["translated_video"])// no dependencies, Node 18+ global fetch
const API = 'https://api.rask.ai';
const auth = await fetch('https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token', {
method: 'POST',
headers: { Authorization: 'Basic ' + btoa(`${CLIENT_ID}:${CLIENT_SECRET}`) },
body: new URLSearchParams({ grant_type: 'client_credentials' }),
}).then(r => r.json());
const h = { Authorization: `Bearer ${auth.access_token}`, 'Content-Type': 'application/json' };
const media = await fetch(`${API}/api/library/v1/media/link`, {
method: 'POST', headers: h,
body: JSON.stringify({ link: 'https://youtu.be/...' }),
}).then(r => r.json());
let project = await fetch(`${API}/v2/projects`, {
method: 'POST', headers: h,
body: JSON.stringify({ video_id: media.id, dst_lang: 'es-mx' }),
}).then(r => r.json());
while (project.status !== 'merging_done') {
await new Promise(r => setTimeout(r, 10000));
project = await fetch(`${API}/v2/projects/${project.id}`, { headers: h }).then(r => r.json());
}
console.log(project.translated_video);# 1. token (valid 1 hour - cache and reuse it)
TOKEN=$(curl -s -X POST https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d "grant_type=client_credentials" | jq -r .access_token)
# 2. upload by link
VIDEO_ID=$(curl -s -X POST https://api.rask.ai/api/library/v1/media/link \
-H "Authorization: Bearer $TOKEN" \
-d '{"link": "https://youtu.be/..."}' | jq -r .id)
# 3. create the dubbing project
ID=$(curl -s -X POST https://api.rask.ai/v2/projects \
-H "Authorization: Bearer $TOKEN" \
-d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"es-mx\"}" | jq -r .id)
# 4. poll, then download
while [ "$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq -r .status)" != "merging_done" ]; do
sleep 10
done<?php
use GuzzleHttp\Client;
$http = new Client(['base_uri' => 'https://api.rask.ai']);
$auth = json_decode((new Client)->post(
'https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token',
['auth' => [$clientId, $clientSecret],
'form_params' => ['grant_type' => 'client_credentials']]
)->getBody(), true);
$h = ['Authorization' => 'Bearer ' . $auth['access_token']];
$media = json_decode($http->post('/api/library/v1/media/link',
['headers' => $h, 'json' => ['link' => 'https://youtu.be/...']])->getBody(), true);
$project = json_decode($http->post('/v2/projects',
['headers' => $h, 'json' => ['video_id' => $media['id'], 'dst_lang' => 'es-mx']])->getBody(), true);
while ($project['status'] !== 'merging_done') {
sleep(10);
$project = json_decode($http->get("/v2/projects/{$project['id']}",
['headers' => $h])->getBody(), true);
} 0s created
12s transcription_started
70s translation_started
95s voiceover_started
150s merging_started
170s merging_done

es-mx y es-es por igual. El registro del proyecto glossary_version, para que las modificaciones posteriores nunca alteren en silencio el trabajo ya terminado.El acceso a la API está incluido en los planes de pago. Generas tu ID de cliente y tu clave secreta en la aplicación y puedes empezar a hacer llamadas de inmediato. Los términos empresariales, los precios por volumen y la cobertura de idiomas personalizados se gestionan a través de nuestro equipo.
Credenciales de cliente OAuth 2.0: intercambia tu ID de cliente y tu contraseña secreta por un token de acceso de corta duración. Los tokens son válidos por una hora, así que guárdalos en caché y reutilízalos.
Asíncrono. La creación de un proyecto responde de inmediato e inicia el doblaje. Consulta GET /v2/projects/{id} periódicamente hasta que el estado sea merging_done. La entrega mediante webhook forma parte de la incorporación para empresas.
Cada solicitud se acepta tal como se envía. El rendimiento depende de la carga de la cola de procesamiento, y la prioridad de procesamiento forma parte de los términos para empresas.
Más de 135 idiomas de destino, incluidos español, francés, alemán, portugués, hindi, japonés y coreano, con variantes regionales cuando son relevantes (por lo que dst_lang usa es-mx en lugar de es). El idioma de origen se detecta automáticamente o puedes configurarlo tú mismo. La lista completa de códigos de origen y destino se encuentra en la documentación de la API. Para idiomas que no estén en el catálogo, contacta a nuestro equipo para evaluar la viabilidad y las opciones disponibles.
La clonación de voz instantánea utiliza las voces de los hablantes de tu video de origen para los idiomas de destino compatibles. Para una clonación de voz personalizada y reutilizable, créala en la aplicación de Rask con el consentimiento del hablante y luego asígnala a través de la API. Los resultados dependen del audio de origen y del idioma y la voz seleccionados.
Depende de la duración del video, la cantidad de hablantes, el idioma de destino y el estado de la cola. Cada proyecto informa su estado en cada etapa, desde la transcripción hasta la combinación, para que puedas mostrar el progreso real a tus usuarios.
Siete formatos de video (MP4, MOV, MKV, AVI, WebM, M4V, 3GP) y cuatro formatos de audio (MP3, WAV, FLAC, M4A). También puedes importar contenido desde YouTube, Google Drive, S3, Vimeo o una URL directa en lugar de subirlo.
Los oradores se detectan y se separan del audio de origen automáticamente, y a cada uno se le asigna su propia voz en el idioma de destino. Puedes cambiar la asignación por orador o enviar num_speakers al crear el proyecto si ya conoces la cantidad.
Sí. Sube un archivo .srt para crear una transcripción y envía su ID al momento de crear el proyecto. También puedes permitir que la API realice la transcripción y luego editar el guion segmento por segmento.
Cada proyecto terminado ofrece archivos de subtítulos en formato .srt y .vtt junto con las pistas de video y audio, sincronizados con el doblaje.
Un SDK de Python asíncrono oficial, publicado en GitHub, con una interfaz estable y compatible con versiones anteriores. Para otros lenguajes, puedes generar un cliente a partir de la especificación OpenAPI publicada. También hay un nodo de n8n para flujos de trabajo sin código.
Solo el contenido modificado. La duración de los segmentos editados y añadidos se suma y se redondea hacia arriba al minuto más cercano, por lo que corregir unas pocas líneas cuesta aproximadamente un minuto.