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



Envoyez un fichier vidéo ou audio sous forme de données de formulaire multipart, ou publiez un lien depuis YouTube, Google Drive, S3, Vimeo ou toute URL directe. Vous obtenez un identifiant de média et les métadonnées du fichier avant de dépenser quoi que ce soit.
Transmettez l'identifiant du média en tant que video_id ainsi qu'une langue cible. Vous pouvez également joindre votre propre transcription ou un glossaire. Le traitement commence immédiatement.
Suivez l'état d'avancement jusqu'à ce qu'il atteigne merging_done, puis téléchargez la vidéo doublée, les pistes audio, les fichiers de sous-titres et la transcription.
# 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 et es-es de la même manière. L'historique du projet glossary_version, de sorte que les modifications ultérieures ne modifient jamais discrètement le travail déjà terminé.L'API Rask AI est une API REST pour la localisation de vidéos. Elle transcrit la parole dans une vidéo, la traduit, la double avec des voix IA ou des clones de voix, ajoute une synchronisation labiale optionnelle et renvoie des sous-titres, des pistes audio et la transcription, le tout à partir d'un seul projet.
Le doublage par IA, la traduction vidéo, la localisation vidéo, le clonage de voix, la synchronisation labiale, la synthèse vocale pour vidéo, la reconnaissance vocale, la transcription vidéo et les sous-titres. Ils partagent une authentification unique, un objet de projet unique et un solde de minutes unique, et chacun dispose de sa propre page avec des détails et du code.
L'accès à l'API est disponible sur les forfaits Creator Pro, Business et Enterprise, avec des fonctionnalités définies par votre forfait. Vous générez votre identifiant client et votre clé secrète dans l'application et vous pouvez commencer immédiatement. Les conditions pour les entreprises, la tarification par volume et la prise en charge de langues personnalisées sont gérées par notre équipe.
L'API utilise les identifiants client OAuth 2.0. Échangez votre identifiant et votre secret client contre un jeton d'accès auprès du point de terminaison des jetons, puis envoyez-le en tant que jeton Bearer à chaque requête. Un jeton est valide pendant une heure ; mettez-le en cache et demandez-en un nouveau lorsqu'il expire.
Oui. Le kit de développement (SDK) Python officiel est disponible sur GitHub à l'adresse braskai/rask-sdk et gère les jetons pour vous. L'API REST fonctionne depuis n'importe quel langage ; cette page propose des exemples complets en Python, Node, cURL et PHP.
Audio source dans 75 langues, avec détection automatique de la langue, et plus de 135 options linguistiques et régionales comme cibles, telles que es-mx ou pt-br. Le clonage de voix est disponible dans les langues prises en charge ; les voix prédéfinies par IA couvrent le reste.
L'utilisation est facturée par minute de vidéo, arrondie à la minute supérieure, à partir du même solde de minutes que l'application Rask. Les minutes supplémentaires coûtent 3 $/min sur les abonnements standard éligibles, et la tarification Entreprise est adaptée à votre contrat. La régénération est facturée sur les segments modifiés avec un minimum d'une minute par exécution, et la synchronisation labial est facturée séparément pour chaque génération de vidéo complète.
Non. Il n'y a pas de limites de taux, pas de quotas de concurrence et pas de bridage par clé, vous pouvez donc traiter un catalogue entier et toutes les langues cibles en parallèle.
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.
Vidéo au format MP4, MOV, MKV, AVI, WebM, M4V et 3GP, audio au format MP3, WAV, FLAC et M4A, ou un lien provenant de YouTube, Google Drive, S3, Vimeo ou une URL directe.
Oui. Importez des fichiers SRT source et traduits, ou envoyez des segments de texte, et transmettez le transcript_id lors de la création du projet. Rask se charge ensuite de doubler votre texte approuvé.
Non. L'API traite des fichiers vidéo et audio enregistrés et fournit les résultats sous forme de fichiers. Pour des agents vocaux en direct ou des sous-titres en temps réel, une API de synthèse vocale en streaming est plus adaptée.
Brask Inc détient la certification SOC 2 Type II et opère conformément au RGPD, avec un statut de contrôle en direct dans son Centre de confiance. Les clones de voix personnalisés sont créés avec le consentement du locuteur.