# 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



Invia un file come dati di modulo multipart o pubblica un link. Le origini di link supportate sono YouTube, Google Drive, S3, Vimeo e qualsiasi URL di download diretto. Restituisce un ID multimediale e metadati tecnici completi prima di spendere qualsiasi cosa.
Passa l'ID multimediale come video_id e una lingua di arrivo. Facoltativamente, allega la tua trascrizione o un glossario. Il doppiaggio si avvia immediatamente.
Leggi lo status finché non raggiunge merging_done, quindi scarica il video doppiato, le tracce audio e i file dei sottotitoli.
# 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 e es-es allo stesso modo. Il progetto registra glossary_version, così le modifiche successive non alterano mai inaspettatamente il lavoro completato.L'accesso alle API è incluso nei piani a pagamento. Puoi generare l'ID cliente e la password segreta direttamente nell'app e iniziare a fare chiamate da subito. Per le condizioni aziendali, i prezzi basati sul volume e la copertura di lingue personalizzate, puoi rivolgerti al nostro team.
Credenziali client OAuth 2.0: scambia il tuo ID client e la tua chiave segreta con un token di accesso temporaneo. I token durano un'ora, quindi è consigliabile memorizzarli e riutilizzarli.
Asincrono. La creazione di un progetto viene avviata subito e fa partire il doppiaggio. Controlla GET /v2/projects/{id} finché lo stato non diventa merging_done. La ricezione dei webhook fa parte dell'attivazione per i piani enterprise.
Ogni richiesta viene accettata così come viene inviata. La velocità dipende da quanto è affollata la coda di elaborazione, mentre la priorità di elaborazione fa parte dei contratti enterprise.
Oltre 135 lingue di arrivo, tra cui spagnolo, francese, tedesco, portoghese, hindi, giapponese e coreano, con varianti regionali importanti (ad esempio, si usa es-mx invece di es). La lingua di partenza viene rilevata in automatico oppure puoi impostarla tu. L'elenco completo dei codici di origine e di arrivo si trova nella documentazione delle API. Per le lingue non presenti nell'elenco, contatta il nostro team per valutare insieme le opzioni disponibili.
La funzione di clonazione istantanea della voce utilizza le voci dei parlanti presenti nel video originale per le lingue supportate. Per una voce clonata personalizzata e riutilizzabile, creala nell'applicazione di Rask con il consenso del parlante e poi impostala tramite le API. I risultati dipendono dall'audio di partenza, dalla lingua scelta e dalla voce selezionata.
Dipende dalla durata del video, dal numero di persone che parlano, dalla lingua scelta e da quanto è lunga la coda. Ogni progetto mostra il suo stato in ogni fase, dalla trascrizione finale all'unione dei file, così puoi mostrare i progressi in tempo reale ai tuoi utenti.
Sette formati video (MP4, MOV, MKV, AVI, WebM, M4V, 3GP) e quattro formati audio (MP3, WAV, FLAC, M4A). Puoi anche importare contenuti da YouTube, Google Drive, S3, Vimeo o tramite un URL diretto invece di caricarli.
I parlanti vengono rilevati e separati dall'audio originale in modo automatico, e a ciascuno viene assegnata una voce nella lingua di arrivo. Puoi modificare l'assegnazione per ogni singolo parlante oppure specificare num_speakers durante la creazione del progetto se conosci già il numero di voci.
Sì. Carica un file .srt per creare una trascrizione e inserisci il suo ID quando crei il progetto. Puoi anche lasciare che siano le API a trascrivere il testo per poi modificarlo una parte alla volta.
Ogni progetto completato include file di sottotitoli in formato .srt e .vtt, insieme alle tracce video e audio, sincronizzati con il doppiaggio.
Un SDK Python asincrono ufficiale, disponibile su GitHub, con un'interfaccia stabile che non crea problemi con i vecchi aggiornamenti. Per altri linguaggi di programmazione, puoi creare un client partendo dalle specifiche OpenAPI pubblicate. È disponibile anche un nodo n8n per creare flussi di lavoro senza scrivere codice.
Solo la parte che è stata modificata. La durata delle parti modificate e aggiunte viene sommata e arrotondata al minuto superiore, quindi correggere poche righe costa circa un minuto.