# 1. exchange your client id and secret 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 the video - file, or a YouTube, Drive, S3, Vimeo or direct link
curl -X POST https://api.rask.ai/api/library/v1/media/link \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"link": "https://youtu.be/...", "name": "Q3 launch"}'
# 3. create the project - transcription, translation and dubbing start
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\": \"es-mx\"}"# Poll until merging_done, then collect the files
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
| jq '{status, translated_video, voiceover, translation_srt_path}'



Envie um ficheiro de vídeo ou áudio como dados de formulário multipart, ou publique um link do YouTube, Google Drive, S3, Vimeo ou qualquer URL direto. Obtém um ID de multimédia e os metadados do ficheiro antes de gastar seja o que for.
Passe o ID de multimédia como video_id e um idioma de destino. Opcionalmente, adicione a sua própria transcrição ou um glossário. O processamento começa de imediato.
Verifique o estado até atingir merging_done e, em seguida, transfira o vídeo dobrado, as faixas de áudio, os ficheiros de legendas e a transcrição.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas
async def main():
# the client exchanges your credentials for tokens and refreshes them
client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
media = await client.create_media_link(data=schemas.MediaCreateLink(link="https://youtu.be/..."))
while media.status is enums.MediaStatus.PROCESSING:
await asyncio.sleep(5)
media = await client.get_media(media_id=media.id)
job = await client.create_project(data=schemas.ProjectCreate(video_id=media.id, dst_lang="es-mx"))
while job.status is not enums.ProjectStatus.MERGING_DONE:
await asyncio.sleep(10)
job = await client.get_project(project_id=job.id)
print(job.translated_video, job.translation_srt_path, job.translation_vtt_path)
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}"}
with open("launch.mp4", "rb") as f:
media = requests.post(f"{API}/api/library/v1/media", headers=h,
params={"kind": "video"}, files={"data": f}).json()
while media["status"] == "processing":
time.sleep(5)
media = requests.get(f"{API}/api/library/v1/media/{media['id']}", headers=h).json()
pid = requests.post(f"{API}/v2/projects", headers=h,
json={"video_id": media["id"], "dst_lang": "de-de"}).json()["id"]
while (p := requests.get(f"{API}/v2/projects/{pid}", headers=h).json())["status"] != "merging_done":
time.sleep(10)
for field in ("translated_video", "translated_audio", "translation_srt_path"):
print(field, p[field]) # presigned links, valid for one hour// 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());
let media = await call('POST', '/api/library/v1/media/link', { link: 'https://youtu.be/...' });
while (media.status === 'processing') { await sleep(5000); media = await call('GET', `/api/library/v1/media/${media.id}`); }
let p = await call('POST', '/v2/projects', { video_id: media.id, dst_lang: 'ja-jp' });
while (p.status !== 'merging_done') { await sleep(10000); p = await call('GET', `/v2/projects/${p.id}`); }
const { translated_video, voiceover, translation_vtt_path } = p;
console.log({ translated_video, voiceover, translation_vtt_path });# 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" -H "Content-Type: application/json" \
-d '{"link": "https://youtu.be/..."}' | jq -r .id)
# 3. create the project once the media status is ready
ID=$(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\": \"pt-br\"}" | jq -r .id)
# 4. wait for merging_done, then read the links
until [ "$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq -r .status)" = merging_done ]; do
sleep 10
done
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
| jq '{translated_video, translated_audio, translation_srt_path}'<?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']];
$media = $json($http->post('/api/library/v1/media/link', ['headers' => $h, 'json' => [
'link' => 'https://youtu.be/...']]));
while ($media['status'] === 'processing') {
sleep(5);
$media = $json($http->get("/api/library/v1/media/{$media['id']}", ['headers' => $h]));
}
$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
'video_id' => $media['id'], 'dst_lang' => 'fr-fr']]));
while ($p['status'] !== 'merging_done') {
sleep(10);
$p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}
echo $p['translated_video'], PHP_EOL, $p['translation_srt_path'], PHP_EOL; 0s created
11s transcription_started
87s translation_started
99s voiceover_started
154s merging_started
165s merging_done

es-mx e es-es igualmente. O registo do projeto glossary_version, para que as edições posteriores nunca alterem silenciosamente o trabalho concluído.A API da Rask AI é uma API REST para localização de vídeo. Transcreve a fala num vídeo, traduz, faz dobragem com vozes de IA ou clones de voz, adiciona sincronização labial opcional e devolve legendas, faixas de áudio e a transcrição, tudo a partir de um único projeto.
Dobragem por IA, tradução de vídeo, localização de vídeo, clonagem de voz, sincronização labial, conversão de texto em voz para vídeo, conversão de voz em texto, transcrição de vídeo e legendas. Partilham uma autenticação, um objeto de projeto e um saldo de minutos, e cada uma tem a sua própria página com detalhes e código.
O acesso à API está disponível nos planos Creator Pro, Business e Enterprise, com funcionalidades definidas pelo seu plano. Pode gerar o seu ID de cliente e segredo na aplicação e começar a fazer pedidos imediatamente. Os termos para clientes Enterprise, preços por volume e idiomas personalizados são geridos pela nossa equipa.
A API utiliza credenciais de cliente OAuth 2.0. Troque o seu ID de cliente e segredo por um token de acesso no endpoint de tokens e, em seguida, envie-o como um token Bearer em cada pedido. Um token é válido por uma hora; guarde-o em cache e solicite um novo quando expirar.
Sim. O SDK oficial em Python está disponível no GitHub em braskai/rask-sdk e gere os tokens por si. A API REST funciona a partir de qualquer linguagem; esta página inclui exemplos completos em Python, Node, cURL e PHP.
Áudio de origem em 75 idiomas, com deteção automática de idioma, e mais de 135 opções de idiomas e regiões como destino, como es-mx ou pt-br. A clonagem de voz está disponível nos idiomas suportados para o efeito; as predefinições de voz de IA cobrem o resto.
A utilização é cobrada por minuto de vídeo, arredondado para o minuto inteiro seguinte, a partir do mesmo saldo de minutos da aplicação Rask. Os minutos adicionais custam 3 $/min nos planos standard elegíveis, e os preços Enterprise são adaptados ao seu contrato. A regeração é cobrada com base nos segmentos alterados, com um mínimo de um minuto por execução, e a sincronização labial é cobrada separadamente para cada geração de vídeo completo.
Não. Não existem limites de velocidade, quotas de concorrência ou restrições por chave, permitindo-lhe processar um catálogo inteiro e todos os idiomas de destino em paralelo.
Poll GET /v2/projects/{id} for the status of each project; the statuses are documented, so you can show real progress. Webhook delivery is part of enterprise onboarding.
Vídeo em MP4, MOV, MKV, AVI, WebM, M4V e 3GP, áudio em MP3, WAV, FLAC e M4A, ou um link do YouTube, Google Drive, S3, Vimeo ou um URL direto.
Sim. Carregue os ficheiros SRT de origem e traduzidos, ou envie segmentos de texto, e utilize o transcript_id ao criar o projeto. O Rask dá voz ao seu texto aprovado.
Não. A API processa ficheiros de vídeo e áudio gravados e entrega os resultados como ficheiros. Para assistentes de voz em direto ou legendas em tempo real, uma API de voz em streaming é a melhor opção.
A Brask Inc possui a certificação SOC 2 Tipo II e opera em conformidade com o RGPD, com o estado de controlo em direto no seu Trust Center. Os clones de voz personalizados são criados com o consentimento do orador.