# 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 sous forme de données de formulaire multipart, ou publiez un lien YouTube, Google Drive, Vimeo, S3 ou un lien direct. Vous obtenez un identifiant de média et les métadonnées de la vidéo avant de dépenser le moindre centime.
Transmettez l'identifiant du média en tant que video_id ainsi qu'une langue cible. Laissez la langue source vide pour une détection automatique de la langue. La transcription commence immédiatement.video_id
Lisez les segments de transcription dès qu'ils sont disponibles, ce qui vous permet de commencer à indexer l'enregistrement pendant que le traitement du média traduit 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 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é.Oui. Envoyez un fichier ou un lien vidéo, créez un projet et lisez la transcription avec les étiquettes d'intervenants et les horodatages via 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 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 également importer des fichiers vidéo directement.
Oui. Créez un projet par vidéo et exécutez-les en parallèle. L'API ne comporte pas de limites de taux, de quota de concurrence ni de limitation par clé, ce qui permet de transcrire en masse une bibliothèque entière en une seule boucle dans votre code.
Les différents intervenants sont détectés automatiquement et chaque segment comporte une étiquette d'intervenant telle que SPEAKER_00. Si vous connaissez le nombre d'intervenants, 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 tel que 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 chevauchements de voix, les accents et le jargon technique entrent tous en ligne de compte. Testez l'API sur vos propres vidéos et corrigez tout segment via l'API avant de publier.
La transcription est fournie sous forme de segments JSON avec les intervenants et les horodatages. Regroupez le texte des segments pour obtenir du texte brut, ou conservez les horodatages 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 publie pas de limite de taille de fichier fixe. Chaque projet indique original_duration et duration une fois les limites de votre forfait appliquées. Pour des vidéos très longues ou un volume élevé, contactez notre équipe.
Les projets sont facturés par minute de vidéo, arrondie à la minute supérieure, à partir du 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 bancaire requise, pour tester la transcription sur vos propres vidéos. L'accès à l'API est disponible sur les forfaits Creator Pro, Business et Enterprise, les fonctionnalités étant déterminées par votre forfait.
L'accès à l'API est disponible avec les forfaits Creator Pro, Business et Enterprise, et les fonctionnalités dépendent de votre abonnement. Vous pouvez générer votre identifiant client et votre clé secrète directement dans l'application pour commencer à l'utiliser immédiatement. Pour les forfaits Enterprise, les tarifs dégressifs et la couverture linguistique personnalisée, veuillez contacter notre équipe.