# 1. upload an audio or video file by 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://example.com/interview.mp3", "name": "interview"}'
# 2. create the project - speech recognition starts automatically
# src_lang is optional: leave it out and the language is detected
curl -X POST https://api.rask.ai/v2/projects \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d "{\"video_id\": \"$MEDIA_ID\", \"dst_lang\": \"es-mx\"}"# Read the transcript: one object per segment
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
| jq '.segments[] | {speaker, start, end, text: .src.text}'



Envoyez un fichier audio ou vidéo sous forme de données de formulaire multipart, ou publiez un lien provenant de 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. Ajoutez la langue source ou le nombre d'intervenants si vous les connaissez. La reconnaissance commence immédiatement.
Lisez la transcription dès que ses segments sont disponibles, 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
async def main():
client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
media = await client.create_media_link(data=schemas.MediaCreateLink(link="https://example.com/interview.mp3"))
while media.status is enums.MediaStatus.PROCESSING:
await asyncio.sleep(5)
media = await client.get_media(media_id=media.id)
# src_lang omitted: the source language is detected automatically
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)
transcript = await client.get_project_transcription(project_id=job.id)
for seg in transcript.segments:
print(seg.start, seg.end, seg.speaker, seg.src.text)
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("interview.mp3", "rb") as f:
media = requests.post(f"{API}/api/library/v1/media", headers=h,
params={"kind": "audio"}, 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": "es-mx", "num_speakers": 2}).json()["id"]
while requests.get(f"{API}/v2/projects/{pid}", headers=h).json()["status"] != "merging_done":
time.sleep(10)
# write the source transcript as an .srt file
segments = requests.get(f"{API}/v2/projects/{pid}/transcription", headers=h).json()["segments"]
with open("interview_en.srt", "w") as out:
for i, s in enumerate(segments, 1):
out.write(f"{i}\n{s['start']} --> {s['end']}\n{s['speaker']}: {s['src']['text']}\n\n")// 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://example.com/webinar.mp4' });
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, src_lang: 'en', dst_lang: 'de-de' });
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`);
segments.forEach((s) => console.log(`[${s.start}] ${s.speaker}: ${s.src.text}`));
console.log(p.translation_vtt_path); // German subtitles for your player# 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 audio file
MEDIA_ID=$(curl -s -X POST "https://api.rask.ai/api/library/v1/media?kind=audio" \
-H "Authorization: Bearer $TOKEN" -F "data=@podcast_episode.mp3" | 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\": \"$MEDIA_ID\", \"dst_lang\": \"fr-fr\"}" | jq -r .id)
# 4. when status is merging_done, read the transcript with speaker labels
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
| jq -r '.segments[] | "\(.start) \(.speaker): \(.src.text)"'<?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://example.com/interview.mp3']]));
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' => 'es-mx']]));
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]));
foreach ($t['segments'] as $s) {
echo $s['start'], ' ', $s['speaker'], ': ', $s['src']['text'], PHP_EOL;
}{"segments": [
{"speaker": "SPEAKER_00", "start": "00:00:00,320", "end": "00:00:07,316", "status": "done",
"src": {"text": "Thanks for joining us. Let's start with the new release.", "lang": "en"},
"dst": {"text": "Gracias por acompañarnos. Empecemos con la nueva versión.", "lang": "es-mx"}},
{"speaker": "SPEAKER_01", "start": "00:00:07,640", "end": "00:00:11,900", "status": "done",
"src": {"text": "Sure. The biggest change is the reporting view.", "lang": "en"},
"dst": {"text": "Claro. El cambio más grande es la vista de reportes.", "lang": "es-mx"}}
]}

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. La reconnaissance vocale est la première étape de chaque projet Rask. Importez un fichier audio ou vidéo, créez un projet et lisez la transcription sous forme de segments avec des étiquettes d'intervenant et des horodatages via GET /v2/projects/{id}/transcription. Ce même projet traduit la transcription et génère des sous-titres ainsi qu'un doublage audio.
L'API accepte 75 langues sources. Laissez src_lang vide pour détecter la langue automatiquement, ou indiquez un code à deux lettres tel que en ou de. La transcription peut être traduite dans plus de 135 langues et variantes régionales.
Oui. Importez des fichiers audio au format MP3, WAV, FLAC ou M4A (podcasts, interviews, appels enregistrés, etc.), et le projet les transcrira de la même manière qu'une vidéo.
Oui. Les différents intervenants sont détectés automatiquement et chaque segment comporte une étiquette au format SPEAKER_XX. Indiquez le nombre de locuteurs via num_speakers si vous le connaissez, et corrigez l'intervenant d'un segment directement par l'API.
Non. Les horodatages s'appliquent au niveau des segments : chaque segment possède un temps de début et de fin au format HH:MM:SS,mmm, qui correspond au minutage utilisé pour les sous-titres. Si vous avez besoin d'un horodatage pour chaque mot, optez pour une API de transcription vocale dédiée.
Non. Rask transcrit des fichiers audio et vidéo complets et préenregistrés. Pour des sous-titres en temps réel, des agents vocaux, de l'IA conversationnelle ou des centres de contact où le texte doit s'afficher pendant qu'une personne parle, une API de transcription en flux continu est plus adaptée.
La précision dépend de la qualité audio : microphones, accents, chevauchements de voix et bruits de fond ont un impact. Testez l'API sur un échantillon de vos propres enregistrements et corrigez les segments via l'API avant de les publier ou de les traduire.
La reconnaissance n'utilise pas de liste de vocabulaire personnalisée. Corrigez des mots spécifiques dans la transcription via l'interface des segments. Lors de la traduction de la transcription, un glossaire permet de garder les noms de produits, les noms propres et les termes techniques cohérents.
Le projet finalisé inclut des fichiers de sous-titres au format SRT et VTT dans la langue cible. La transcription de la langue source est fournie sous forme de segments JSON avec des temps de début et de fin, qui se convertissent en SRT en quelques lignes de code.
Oui. Sur les abonnements avec importation de transcription, vous pouvez fournir une transcription source existante, une traduction validée dans la langue cible, ou les deux sous forme de fichiers SRT ou de segments de texte chronométrés lors de la création du projet. Rask peut traduire votre script source ou utiliser votre traduction validée pour le doublage.
Les projets sont facturés par minute audio ou vidéo, arrondie à la minute supérieure, à partir du même solde de minutes que sur l'application Rask. Le tarif inclut la transcription, la traduction, la voix hors champ et les sous-titres. Les minutes supplémentaires coûtent 3 $/min sur les abonnements standard éligibles. Les tarifs Entreprise sont adaptés à votre contrat. Si vous avez uniquement besoin d'une transcription, une API de conversion de la parole en texte dédiée coûte moins cher.
Commencez par un essai gratuit sur l'application Rask, sans carte bancaire requise, pour tester la transcription et la traduction sur vos propres fichiers. L'accès à l'API est disponible avec les abonnements Creator Pro, Business et Enterprise, avec des fonctionnalités qui dépendent de votre formule.
L'accès à l'API est disponible avec les abonnements Creator Pro, Business et Enterprise, et les fonctionnalités dépendent de votre formule. Vous générez votre identifiant client et votre clé secrète dans l'application pour commencer à l'utiliser immédiatement. Pour les conditions Enterprise, la tarification par volume et la prise en charge de langues personnalisées, veuillez contacter notre équipe.