# 1. send the video as a link - YouTube, Google Drive, Vimeo, S3 or direct URL
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": "camera review"}'
# 2. create the project - the language of the video is detected automatically
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\"}"# The transcript as plain text with timestamps and speakers
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
| jq -r '.segments[] | "\(.start) \(.speaker): \(.src.text)"'



Téléchargez un fichier vidéo en tant que données de formulaire multipart, ou publiez un lien YouTube, Google Drive, Vimeo, S3 ou direct. Vous obtenez un identifiant de média et les métadonnées de la vidéo avant de dépenser quoi que ce soit.
Indiquez l'identifiant du média comme video_id et une langue cible. Laissez la langue source vide pour une détection automatique. La transcription démarre immédiatement.video_id
Lisez les segments de transcription dès qu'ils sont disponibles, afin de pouvoir commencer à indexer l'enregistrement pendant que le traitement des médias traduits se poursuit. Téléchargez les fichiers de sous-titres et de médias une fois le projet terminé.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas
VIDEOS = ["https://youtu.be/aaa", "https://youtu.be/bbb", "https://vimeo.com/123"]
async def transcribe(client, i, link):
media = await client.create_media_link(data=schemas.MediaCreateLink(link=link))
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="en-us"))
while job.status is not enums.ProjectStatus.MERGING_DONE:
await asyncio.sleep(10)
job = await client.get_project(project_id=job.id)
t = await client.get_project_transcription(project_id=job.id)
with open(f"video_{i}.txt", "w") as f: # plain text, one segment per line
f.write("\n".join(f"{s.speaker}: {s.src.text}" for s in t.segments))
async def main():
client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
await asyncio.gather(*(transcribe(client, i, v) for i, v in enumerate(VIDEOS))) # no rate limits
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 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://drive.google.com/file/d/...' });
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: 'fr-fr' });
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`);
const index = segments.map((s) => ({ t: s.start, speaker: s.speaker, text: s.src.text, fr: s.dst.text }));
console.log(JSON.stringify(index, null, 2)); // ready for your search index# 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 a local video file
VIDEO_ID=$(curl -s -X POST "https://api.rask.ai/api/library/v1/media?kind=video" \
-H "Authorization: Bearer $TOKEN" -F "[email protected]" | 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\": \"de-de\", \"num_speakers\": 3}" | jq -r .id)
# 4. when status is merging_done, save the transcript as plain text
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
| jq -r '.segments[].src.text' > webinar.txt<?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://vimeo.com/123456']]));
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' => 'pt-br']]));
while ($p['status'] !== 'merging_done') {
sleep(10);
$p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}
$t = $json($http->get("/v2/projects/{$p['id']}/transcription", ['headers' => $h]));
file_put_contents('video.txt', implode("\n", array_map(fn($s) => $s['src']['text'], $t['segments'])));no_audio, no_words and forbidden_link are specific enough to show directly to your own user, for example a video without speech.00:00:00,320 SPEAKER_00 Welcome back. Today we test three cameras in low light.
00:00:06,180 SPEAKER_01 I brought the footage from last week's night shoot.
00:00:10,940 SPEAKER_00 Let's start with the smallest sensor, the hardest case.
00:00:15,500 SPEAKER_01 At ISO 6400 the noise is visible, but the colors hold up./transcriptiontranslation_srt_pathtranslation_vtt_pathtranslated_videotranslated_audiooriginal_video

es-mx et es-es de même. Les enregistrements du projet glossary_version, de sorte que les modifications ultérieures ne modifient jamais le travail terminé sans que vous le sachiez.Oui. Envoyez un fichier vidéo ou un lien, créez un projet et lisez la transcription avec les noms des interlocuteurs et les repères temporels depuis GET /v2/projects/{id}/transcription. La transcription est la première étape de chaque projet Rask, qui ajoute ensuite la traduction, les sous-titres et une version doublée.
Oui. Envoyez un lien YouTube, Google Drive, Vimeo, S3 ou un lien de téléchargement direct vers le point de terminaison média, et l'API récupère la vidéo elle-même. Vous pouvez aussi importer des fichiers vidéo directement.
Oui. Créez un projet par vidéo et lancez-les en parallèle. L'API n'a pas de limites de taux, de quota de simultanéité ni de restriction par clé, ce qui permet de transcrire toute une bibliothèque de vidéos en une seule boucle dans votre code.
Les différents interlocuteurs sont détectés automatiquement, et chaque segment comporte une étiquette telle que SPEAKER_00. Si vous connaissez le nombre d'interlocuteurs, indiquez num_speakers lors de la création du projet.
L'API transcrit 75 langues sources, dont l'anglais, avec une détection automatique de la langue : laissez src_lang vide ou indiquez un code à deux lettres comme en. Les transcriptions peuvent être traduites dans plus de 135 options linguistiques et régionales, telles que en-us ou es-mx.
La précision dépend de la vidéo : le bruit de fond, les environnements bruyants, les voix qui se chevauchent, les accents et le jargon technique jouent tous un rôle. Testez l'API sur vos propres vidéos et corrigez les segments via l'API avant de publier.
La transcription est fournie sous forme de segments JSON avec les interlocuteurs et les repères temporels. Combinez le texte des segments pour obtenir du texte brut, ou conservez les repères temporels pour rendre les transcriptions interrogeables. Les sous-titres au format SRT et VTT sont inclus dans la langue cible.
Non. L'API renvoie la transcription, sa traduction, les sous-titres et une version doublée. Pour créer des résumés générés par IA ou des notes de réunion, transmettez la transcription à l'outil de résumé de votre choix.
Oui, à partir d'enregistrements. Importez la réunion enregistrée sous forme de fichier vidéo ou audio. L'API ne se connecte pas aux plateformes de réunion et ne propose pas de sous-titres en temps réel ni de transcription à faible latence des appels en direct.
La documentation de l'API ne mentionne pas de limite fixe de taille de fichier. Chaque projet indique original_duration et duration une fois les limites de votre forfait appliquées. Pour les vidéos très longues ou les volumes importants, contactez notre équipe.
Les projets sont facturés par minute de vidéo, arrondie à la minute supérieure, en piochant dans le même solde de minutes que l'application Rask. Le prix comprend la transcription, la traduction, les sous-titres et la version doublée. Les minutes supplémentaires coûtent 3 $/min sur les forfaits standard éligibles. La tarification entreprise est adaptée à votre contrat.
Commencez par un essai gratuit dans l'application Rask, sans carte de crédit requise, pour tester la transcription sur vos propres vidéos. L'accès à l'API est disponible avec les forfaits Creator Pro, Business et Enterprise, et ses fonctionnalités dépendent de votre formule.
L'accès à l'API est disponible avec les forfaits Creator Pro, Business et Enterprise, et ses fonctionnalités dépendent de votre formule. Vous générez votre identifiant client et votre clé secrète dans l'application pour commencer à effectuer des requêtes immédiatement. Pour les forfaits Enterprise, la tarification par volume et la prise en charge de langues personnalisées, veuillez contacter notre équipe.