# 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}'



Crie um glossário para cada par de idiomas, salve vozes personalizadas para apresentadores recorrentes e escolha a variante regional para cada mercado em que você publicar.
Envie o vídeo original uma vez e, em seguida, crie um projeto para cada localidade de destino usando seu glossário ou uma tradução aprovada importada de um arquivo SRT.
Leia o texto traduzido lado a lado, edite o que os revisores sinalizarem, duble novamente os trechos alterados e baixe o vídeo localizado junto com as legendas.
# 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

pt-br e pt-pt igualmente. O registro do projeto versão_do_glossário, garantindo que edições futuras nunca alterem o que já foi finalizado sem que você perceba.Uma API de localização de vídeos transforma um vídeo original em diferentes versões para outros mercados por meio de automação no seu próprio código: fala traduzida e dublada, legendas, terminologia consistente e sincronização labial opcional. Com a Rask, cada versão de mercado é um projeto que você cria, revisa e baixa por meio de uma única REST API.
A tradução altera as palavras. A localização prepara o mesmo vídeo para um mercado específico: a variante do idioma regional, termos da marca que permanecem consistentes, as vozes dos palestrantes, legendas e uma etapa de revisão antes da publicação. A API da Rask oferece suporte a tudo isso em um único fluxo de trabalho.
Sim. Crie um projeto para cada localidade de destino, como pt-br para o Brasil e pt-pt para Portugal, e reutilize um glossário em português para manter os termos da marca consistentes. Revise a redação para cada mercado. Quando o sotaque regional for importante, escolha um preset de voz AI disponível para essa localidade; a clonagem de voz usa o modelo de idioma base e não garante um sotaque regional distinto.
Crie um glossário para cada par de idiomas e anexe-o ao criar o projeto. Cada projeto registra a versão do glossário utilizada, portanto, editar um glossário posteriormente nunca altera o trabalho concluído. Um glossário não pode ser adicionado a um projeto após sua criação.
Sim, nos planos com upload de SRT. Importe o SRT aprovado no idioma de destino ao criar o projeto; um SRT separado no idioma de origem é opcional. Você também pode fornecer ambos os arquivos quando os tiver. A Rask usa sua tradução aprovada para a dublagem.
A relevância cultural exige julgamento humano. A API oferece aos revisores todos os segmentos para adaptar referências, expressões idiomáticas e exemplos para o mercado antes da publicação, e a Rask pode adicionar controle de qualidade humano ao fluxo de trabalho quando sua equipe não puder revisar todos os vídeos.
Os endpoints da API documentados localizam a fala e as legendas. O texto que faz parte da imagem, como títulos na gravação, permanece como foi filmado. Fale com nossa equipe se o texto na tela fizer parte do seu fluxo de trabalho de localização.
Localize em vários idiomas a partir de mais de 135 opções de idiomas e regiões, incluindo espanhol mexicano e europeu, português brasileiro e europeu, e francês canadense. Cada projeto aceita uma localidade de destino. A lista completa está na documentação da API, e nossa equipe pode discutir opções fora dela.
Sim, nos idiomas compatíveis com clonagem de voz. Use a Clonagem de Voz Instantânea para preservar a identidade do palestrante ou uma Clonagem de Voz Personalizada salva para um apresentador recorrente. A clonagem usa o modelo de idioma base, portanto, selecionar uma localidade regional não garante o sotaque dessa região. Escolha um preset de voz AI disponível quando o sotaque regional for a prioridade.
A sincronização labial é uma etapa opcional para vídeos em que uma pessoa real aparece falando. Aplique-a na versão localizada após a revisão. Cada geração completa de sincronização labial é cobrada separadamente do dublaje, incluindo as gerações feitas após edições posteriores.
O uso da API é cobrado por minuto de vídeo para cada versão de mercado, utilizando o mesmo saldo de minutos do aplicativo da Rask. Minutos adicionais custam US$ 3/min nos planos padrão elegíveis. Os preços para empresas são personalizados de acordo com o seu contrato. A redublagem após a revisão é cobrada com base na duração combinada dos trechos alterados, com um mínimo de um minuto por execução, e a sincronização labial é cobrada separadamente. Experimente a localização no aplicativo da Rask com um teste gratuito, sem precisar de cartão. Para testar a API, agende uma demonstração com a nossa equipe.
Sim. Para volumes recorrentes, nossa equipe pode ajudar a mapear o seu processo atual, definir etapas de revisão e aprovação, configurar termos e vozes, conectar a Rask ao seu CMS ou LMS e adicionar revisão humana onde for necessário.
O acesso à API está disponível nos planos Creator Pro, Business e Enterprise, com recursos definidos de acordo com o seu plano. Você gera seu ID de cliente e chave secreta no aplicativo e pode começar a fazer chamadas imediatamente. Condições para empresas, preços por volume e suporte a idiomas personalizados são tratados diretamente com a nossa equipe.