# 1. one Spanish glossary - it applies to every Spanish regional variant
curl -X POST https://api.rask.ai/v2/glossaries \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"name": "Brand terms", "src_lang": "en", "dst_lang": "es",
"entries": {"Rask Studio": "Rask Studio", "onboarding": "incorporación"}}'
# 2. a localized version per market, both with the same glossary
for lang in es-mx es-es; do
curl -X POST https://api.rask.ai/v2/projects \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"$lang\", \"glossary_id\": \"$GLOSSARY_ID\"}"
done# Review: source and translated text, segment by segment
curl -s https://api.rask.ai/v2/projects/$ID/transcription \
-H "Authorization: Bearer $TOKEN" \
| jq '.segments[] | {speaker, src: .src.text, dst: .dst.text}'



Crea un glosario para cada par de idiomas, guarda voces personalizadas para los presentadores recurrentes y elige la variante regional para cada mercado en el que publiques.
Sube el video original una vez y luego crea un proyecto para cada mercado de destino con tu glosario o con una traducción aprobada importada desde un archivo SRT.
Lee el texto traducido lado a lado, edita lo que los revisores señalen, vuelve a hacer el doblaje de los segmentos modificados y descarga el video localizado junto con los subtítulos.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas
MARKETS = ["es-mx", "es-es"]
async def localize(client, video_id, locale, glossary_id):
job = await client.create_project(data=schemas.ProjectCreate(
video_id=video_id, dst_lang=locale, glossary_id=glossary_id))
while job.status is not enums.ProjectStatus.MERGING_DONE:
await asyncio.sleep(10)
job = await client.get_project(project_id=job.id)
return job
async def main():
client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
glossary = await client.create_glossary(data=schemas.GlossaryCreate(
name="Brand terms", src_lang="en", dst_lang="es",
entries={"Rask Studio": "Rask Studio", "onboarding": "incorporación"}))
jobs = await asyncio.gather(*(localize(client, VIDEO_ID, m, glossary.id) for m in MARKETS))
for job in jobs: # review before publishing
script = await client.get_project_transcription(project_id=job.id)
for seg in script.segments[:3]:
print(job.dst_lang, seg.speaker, seg.src.text, "->", seg.dst.text)
asyncio.run(main())import 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}"}
glossary = requests.post(f"{API}/v2/glossaries", headers=h, json={
"name": "Brand terms", "src_lang": "en", "dst_lang": "es",
"entries": {"Rask Studio": "Rask Studio", "onboarding": "incorporación"}}).json()
ids = [requests.post(f"{API}/v2/projects", headers=h, json={
"video_id": VIDEO_ID, "dst_lang": locale, "glossary_id": glossary["id"]}).json()["id"]
for locale in ["es-mx", "es-es"]]
for pid in ids:
while requests.get(f"{API}/v2/projects/{pid}", headers=h).json()["status"] != "merging_done":
time.sleep(10)
script = requests.get(f"{API}/v2/projects/{pid}/transcription", headers=h).json()
for seg in script["segments"][:3]:
print(seg["src"]["text"], "->", seg["dst"]["text"])// no dependencies, Node 18+ global fetch
const API = 'https://api.rask.ai';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
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 call = (method, path, body) => fetch(API + path, { method, headers: h, body: body && JSON.stringify(body) }).then((r) => r.json());
const glossary = await call('POST', '/v2/glossaries', {
name: 'Brand terms', src_lang: 'en', dst_lang: 'es',
entries: { 'Rask Studio': 'Rask Studio', onboarding: 'incorporación' },
});
for (const dst_lang of ['es-mx', 'es-es']) {
let p = await call('POST', '/v2/projects', { video_id: VIDEO_ID, dst_lang, glossary_id: glossary.id });
while (p.status !== 'merging_done') { await sleep(10000); p = await call('GET', `/v2/projects/${p.id}`); }
const { segments } = await call('GET', `/v2/projects/${p.id}/transcription`);
segments.slice(0, 3).forEach((s) => console.log(dst_lang, s.src.text, '->', s.dst.text));
}# 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. import the translation your reviewers approved (source and translated .srt)
TRANSCRIPT_ID=$(curl -s -X POST "https://api.rask.ai/v2/transcriptions/srt?src_lang=en&dst_lang=es-mx" \
-H "Authorization: Bearer $TOKEN" \
-F "src=@source_en.srt" -F "dst=@approved_es-mx.srt" | jq -r .id)
# 3. create the localized version from it - Rask voices the approved script
curl -s -X POST https://api.rask.ai/v2/projects \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"es-mx\", \"transcript_id\": \"$TRANSCRIPT_ID\"}"<?php
use GuzzleHttp\Client;
$http = new Client(['base_uri' => 'https://api.rask.ai']);
$json = fn($r) => json_decode($r->getBody(), true);
$auth = $json((new Client)->post('https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token',
['auth' => [$clientId, $clientSecret], 'form_params' => ['grant_type' => 'client_credentials']]));
$h = ['Authorization' => 'Bearer ' . $auth['access_token']];
$glossary = $json($http->post('/v2/glossaries', ['headers' => $h, 'json' => [
'name' => 'Brand terms', 'src_lang' => 'en', 'dst_lang' => 'es',
'entries' => ['Rask Studio' => 'Rask Studio', 'onboarding' => 'incorporación'],
]]));
foreach (['es-mx', 'es-es'] as $locale) {
$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
'video_id' => $videoId, 'dst_lang' => $locale, 'glossary_id' => $glossary['id']]]));
while ($p['status'] !== 'merging_done') {
sleep(10);
$p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}
$script = $json($http->get("/v2/projects/{$p['id']}/transcription", ['headers' => $h]));
echo $locale, ': ', $script['segments'][0]['dst']['text'], PHP_EOL;
} 0s created
11s transcription_started
87s translation_started
99s voiceover_started
154s merging_started
165s merging_done

es-mx y es-es por igual. El proyecto registra glossary_version, de modo que las ediciones posteriores nunca modifiquen el trabajo finalizado en segundo plano.Una API de localización de video convierte un video original en distintas versiones para otros mercados mediante la automatización en tu propio código: voz traducida y doblada, subtítulos, terminología consistente y sincronización labial opcional. Con Rask, la versión de cada mercado es un proyecto que creas, revisas y descargas a través de una sola REST API.
La traducción cambia las palabras. La localización prepara el mismo video para un mercado específico: la variante de idioma regional, los términos de marca que se mantienen constantes, las voces de los hablantes, los subtítulos y un paso de revisión antes de publicarlo. La API de Rask es compatible con todo esto en un solo flujo de trabajo.
Sí. Crea un proyecto para cada región de destino, como es-mx para México y es-es para España, y reutiliza un glosario en español para mantener los términos de marca consistentes. Revisa la redacción para cada mercado. Cuando el acento regional sea importante, elige una voz AI preestablecida disponible para esa región; la clonación de voz utiliza el modelo de lenguaje base y no garantiza un acento regional distinto.
Crea un glosario para cada par de idiomas y adjúntalo al crear el proyecto. Cada proyecto registra la versión del glosario que utilizó, por lo que editar un glosario más tarde nunca modifica el trabajo terminado. No se puede añadir un glosario a un proyecto después de haberlo creado.
Sí, en los planes con carga de SRT. Importa tu archivo SRT en el idioma de destino aprobado al crear el proyecto; un archivo SRT en el idioma de origen por separado es opcional. También puedes proporcionar ambos archivos cuando los tengas. Rask usa tu traducción aprobada para el doblaje.
La relevancia cultural requiere criterio humano. La API ofrece a los revisores cada segmento para adaptar referencias, modismos y ejemplos para el mercado antes de la publicación, y Rask puede agregar control de calidad humano al flujo de trabajo cuando tu equipo no puede revisar cada video.
Los endpoints documentados de la API localizan la voz y los subtítulos. El texto que forma parte de la imagen, como los títulos en las tomas, permanece tal como se filmó. Habla con nuestro equipo si el texto en pantalla es parte de tu flujo de trabajo de localización.
Localiza a múltiples idiomas a partir de más de 135 opciones de idiomas y regiones, incluidos el español de México y de Europa, el portugués de Brasil y de Europa, y el francés canadiense. Cada proyecto toma una región de destino. La lista completa se encuentra en la documentación de la API, y nuestro equipo puede analizar opciones fuera de ella.
Sí, en los idiomas compatibles con la clonación de voz. Utiliza la clonación instantánea de voz (Instant Voice Clone) para preservar la identidad del hablante, o una clonación de voz personalizada (Custom Voice Clone) guardada para un presentador recurrente. La clonación utiliza el modelo de lenguaje base, por lo que seleccionar una región geográfica no garantiza el acento de esa región. Elige una voz AI preestablecida disponible cuando el acento regional sea la prioridad.
La sincronización labial es un paso opcional para grabaciones en las que una persona real habla ante la cámara. Ejecútala en la versión localizada después de la revisión. Cada generación de sincronización labial de video completo se factura por separado del doblaje, incluidas las generaciones posteriores a ediciones posteriores.
El uso de la API se cobra por minuto de video para cada versión de mercado, utilizando la misma bolsa de minutos de la app de Rask. Los minutos adicionales cuestan $3 por minuto en los planes estándar elegibles. Los precios para empresas se adaptan a tu contrato. El redoblaje después de la revisión se cobra según la duración combinada de los segmentos modificados, con un mínimo de un minuto por ejecución, y la sincronización labial se cobra por separado. Prueba la localización en la app de Rask con una prueba gratis, sin tarjeta de crédito. Para evaluar la API, agenda una demo con nuestro equipo.
Sí. Para volúmenes recurrentes, nuestro equipo puede ayudar a mapear tu proceso actual, definir las etapas de revisión y aprobación, configurar la terminología y las voces, conectar Rask a tu CMS o LMS, y agregar control de calidad humano donde sea necesario.
El acceso a la API está disponible en los planes Creator Pro, Business y Enterprise, con las funciones que correspondan a tu plan. Puedes generar tu ID de cliente y clave secreta en la app y empezar a hacer llamadas de inmediato. Las condiciones para empresas, los precios por volumen y la cobertura de idiomas personalizada se gestionan a través de nuestro equipo.