# 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



Envoyez un fichier sous forme de données de formulaire multipart, ou publiez un lien. Les sources de liens prises en charge sont YouTube, Google Drive, S3, Vimeo et toute URL de téléchargement direct. Renvoie un ID de média et des métadonnées techniques complètes avant toute dépense.
Transmettez l'ID du média en tant que video_id et une langue cible. Vous pouvez également joindre votre propre transcription ou un glossaire. Le doublage commence immédiatement.
Lisez status jusqu'à ce qu'il atteigne merging_done, puis téléchargez la vidéo doublée, les pistes audio et les fichiers de sous-titres.
# 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 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'accès à l'API est inclus dans les abonnements payants. Vous générez votre identifiant client et votre secret dans l'application pour commencer à l'utiliser immédiatement. Pour les conditions d'entreprise, les tarifs dégressifs et la prise en charge de langues personnalisées, veuillez contacter notre équipe.
Identifiants client OAuth 2.0 : échangez votre identifiant et votre secret contre un jeton du porteur (bearer token) à durée de vie limitée. Les jetons sont valables une heure, pensez à les mettre en cache et à les réutiliser.
Asynchrone. La création d'un projet renvoie une réponse immédiate et lance le doublage. Effectuez des requêtes GET sur /v2/projects/{id} jusqu'à ce que le statut indique merging_done. L'envoi de webhooks fait partie de l'intégration pour les entreprises.
Chaque requête est acceptée telle quelle. Le débit dépend de la charge de la file d'attente de traitement, et la priorité de traitement fait partie des conditions pour les entreprises.
Plus de 135 langues cibles, incluant l'espagnol, le français, l'allemand, le portugais, l'hindi, le japonais et le coréen, avec des variantes régionales lorsque cela est pertinent (par exemple, utiliser es-mx plutôt que es pour dst_lang). La langue source est détectée automatiquement ou peut être définie manuellement. La liste complète des codes source et cible se trouve dans la documentation de l'API. Pour les langues ne figurant pas dans le catalogue, contactez notre équipe pour étudier la faisabilité et les options disponibles.
La fonction de clonage de voix instantané utilise les voix des intervenants de votre vidéo source pour les langues cibles prises en charge. Pour un clonage de voix personnalisé et réutilisable, créez-le dans l'application Rask avec le consentement de l'intervenant, puis attribuez-le via l'API. Les résultats dépendent de l'audio source ainsi que de la langue et de la voix sélectionnées.
Cela dépend de la durée de la vidéo, du nombre d'intervenants, de la langue cible et de l'état de la file d'attente. Chaque projet indique son statut à chaque étape, de la transcription au mixage final, ce qui vous permet d'afficher une progression en temps réel à vos utilisateurs.
Sept formats vidéo (MP4, MOV, MKV, AVI, WebM, M4V, 3GP) et quatre formats audio (MP3, WAV, FLAC, M4A). Vous pouvez également importer du contenu à partir d'une URL directe ou de YouTube, Google Drive, S3 ou Vimeo au lieu de téléverser un fichier.
Les intervenants sont détectés et séparés automatiquement de l'audio source, et chacun se voit attribuer sa propre voix dans la langue cible. Vous pouvez modifier cette attribution par intervenant ou indiquer le nombre d'intervenants (num_speakers) lors de la création du projet si vous le connaissez déjà.
Oui. Téléchargez un fichier .srt pour créer une transcription et transmettez son identifiant lors de la création du projet. Vous pouvez aussi laisser l'API s'occuper de la transcription, puis modifier le script segment par segment.
Chaque projet terminé propose des fichiers de sous-titres aux formats .srt et .vtt en plus des pistes vidéo et audio, synchronisés avec le doublage.
Un SDK Python asynchrone officiel, publié sur GitHub, doté d'une interface stable et rétrocompatible. Pour les autres langues, générez un client à partir de la spécification OpenAPI publiée. Un nœud n8n est également disponible pour les flux sans code (no-code).
Seul le contenu modifié. La durée des segments modifiés et ajoutés est additionnée puis arrondie à la minute supérieure, si bien que la correction de quelques lignes ne coûte qu'environ une minute.