# 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 de toute URL directe. Vous obtenez un identifiant de média et les métadonnées du fichier avant de dépenser le moindre crédit.
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 démarre 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 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. La reconnaissance vocale est la première étape de chaque projet sur Rask. Téléchargez un fichier audio ou vidéo, créez un projet et consultez la transcription sous forme de segments avec des étiquettes d'intervenants 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 une détection automatique, ou indiquez un code à deux lettres tel que en ou de. La transcription peut être traduite dans plus de 135 options linguistiques et régionales.
Oui. Téléchargez des fichiers audio au format MP3, WAV, FLAC ou M4A (comme des podcasts, des interviews ou des appels enregistrés), 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 num_speakers si vous connaissez le nombre exact, et corrigez l'intervenant de n'importe quel segment via l'API.
Non. Les horodatages s'appliquent au niveau des segments : chaque segment dispose d'un temps de début et de fin au format HH:MM:SS,mmm. C'est le minutage utilisé par les sous-titres. Si vous avez besoin d'un horodatage pour chaque mot, optez pour une API de transcription 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 et 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 : les microphones, les accents, les voix qui se chevauchent et le bruit de fond ont tous 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 les mots spécifiques dans la transcription via le point de terminaison des segments. Une fois la transcription traduite, un glossaire permet de maintenir la cohérence des noms de produits, des noms propres et des termes techniques.
Le projet finalisé comprend des fichiers de sous-titres aux formats SRT et VTT dans la langue cible. La transcription en langue source est fournie sous forme de segments JSON avec des temps de début et de fin, convertibles en SRT en quelques lignes de code.
Oui. Sur les forfaits incluant l'importation de transcriptions, vous pouvez fournir une transcription source existante, une traduction cible approuvée, ou les deux sous forme de fichiers SRT ou de segments de texte synchronisés lors de la création du projet. Rask peut traduire votre script source ou utiliser votre traduction approuvée pour le doublage.
Les projets sont facturés par minute d'audio ou 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, la voix off et les sous-titres. Les minutes supplémentaires coûtent 3 $/min sur les forfaits standard éligibles. La tarification Entreprise est adaptée à 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 dans 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 sur les forfaits Creator Pro, Business et Enterprise, avec des fonctionnalités qui dépendent de votre forfait.
L'accès à l'API est disponible sur les forfaits Creator Pro, Business et Enterprise, avec des fonctionnalités définies par votre forfait. Vous générez votre identifiant client et votre clé secrète dans l'application et vous pouvez commencer immédiatement. Les conditions pour les entreprises, la tarification par volume et la prise en charge de langues personnalisées sont gérées par notre équipe.