# 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}'



Senden Sie eine Audio- oder Videodatei als Multipart-Formulardaten oder posten Sie einen Link von YouTube, Google Drive, S3, Vimeo oder eine beliebige direkte URL. Sie erhalten eine Medien-ID und die Dateimetadaten, bevor Kosten anfallen.
Übergeben Sie die Medien-ID als video_id und eine Zielsprache. Fügen Sie die Quellsprache oder die Anzahl der Sprecher hinzu, wenn Sie diese kennen. Die Erkennung startet sofort.
Lesen Sie das Transkript, sobald die Segmente verfügbar sind, während die übersetzten Medien weiterverarbeitet werden. Laden Sie Untertitel- und Mediendateien herunter, wenn das Projekt abgeschlossen ist.
# 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 und es-es gleichermaßen dient. Das Projekt speichert glossary_version, sodass spätere Änderungen bereits fertiggestellte Arbeit nicht unbemerkt verändern.Ja. Die Spracherkennung ist der erste Schritt bei jedem Rask-Projekt. Laden Sie Audio oder Video hoch, erstellen Sie ein Projekt und lesen Sie das Transkript als Segmente mit Sprecherkennzeichnungen und Zeitstempeln über GET /v2/projects/{id}/transcription aus. Dasselbe Projekt übersetzt das Transkript und liefert Untertitel sowie synchronisiertes Audio zurück.
Die API unterstützt 75 Quellsprachen. Wenn Sie src_lang leer lassen, wird die Sprache automatisch erkannt, oder Sie übergeben einen zweistelligen Code wie en oder de. Das Transkript kann in über 135 Sprachen und regionale Varianten übersetzt werden.
Ja. Laden Sie Audiodateien im Format MP3, WAV, FLAC oder M4A hoch – wie Podcasts, Interviews und aufgezeichnete Anrufe –, und das Projekt transkribiert sie genauso wie Videos.
Ja. Verschiedene Sprecher werden automatisch erkannt, und jedes Segment enthält eine Sprecherkennung im Format SPEAKER_XX. Sie können num_speakers übergeben, wenn Sie die Anzahl kennen, und den Sprecher eines Segments über die API korrigieren.
Nein. Die Zeitstempel gelten auf Segmentebene: Jedes Segment hat eine Start- und Endzeit im Format HH:MM:SS,mmm. Das ist das Timing, das auch Untertitel verwenden. Wenn Sie für jedes einzelne Wort einen Zeitstempel benötigen, wählen Sie am besten eine dedizierte Speech-to-Text-API.
Nein. Rask transkribiert vollständige, bereits aufgezeichnete Audio- und Videodateien. Für Echtzeit-Untertitel, Sprachassistenten, KI-Dialogsysteme und Contact-Center, bei denen Text eintreffen muss, während eine Person noch spricht, ist eine Streaming-Speech-to-Text-API die bessere Wahl.
Die Genauigkeit hängt vom Audio ab: Mikrofone, Akzente, überlappende Sprache und Hintergrundgeräusche spielen dabei eine Rolle. Testen Sie die API mit einer Auswahl Ihrer eigenen Aufnahmen und korrigieren Sie bei Bedarf Segmente über die API, bevor Sie diese veröffentlichen oder übersetzen.
Die Erkennung verwendet keine benutzerdefinierte Vokabelliste. Korrigieren Sie spezifische Wörter im Transkript einfach über den Segmente-Endpunkt. Bei der Übersetzung des Transkripts sorgt ein Glossar dafür, dass Produktnamen, Eigennamen und Fachbegriffe einheitlich bleiben.
Das fertige Projekt enthält Untertiteldateien in den Formaten SRT und VTT in der Zielsprache. Das Transkript der Quellsprache wird als JSON-Segmente mit Start- und Endzeiten bereitgestellt, die sich mit wenigen Zeilen Code in SRT konvertieren lassen.
Ja. Bei Tarifen mit Transkript-Import können Sie beim Erstellen des Projekts ein vorhandenes Quelltranskript, eine freigegebene Übersetzung in der Zielsprache oder beides als SRT-Dateien oder zeitgesteuerte Textsegmente bereitstellen. Rask kann Ihr Quellskript übersetzen oder Ihre freigegebene Übersetzung für das Synchronisieren verwenden.
Projekte werden pro Minute Audio oder Video abgerechnet, aufgerundet auf die nächste volle Minute, aus demselben Minuten-Kontingent wie in der Rask App. Der Preis beinhaltet Transkription, Übersetzung, Voiceover und Untertitel. Zusätzliche Minuten kosten 3 $/Minute bei berechtigten Standardtarifen. Die Preise für Unternehmen sind auf Ihre Vereinbarung zugeschnitten. Wenn Sie nur ein Transkript benötigen, kostet eine dedizierte Speech-to-Text-API weniger.
Beginnen Sie mit einer kostenlosen Testversion in der Rask App (ohne Kreditkarte), um Transkription und Übersetzung mit Ihren eigenen Dateien zu testen. Der API-Zugriff ist in den Tarifen Creator Pro, Business und Enterprise verfügbar, wobei die Funktionen von Ihrem Tarif abhängen.
Der API-Zugriff ist in den Tarifen Creator Pro, Business und Enterprise verfügbar, wobei der genaue Funktionsumfang von Ihrem Tarif abhängt. Sie erstellen Ihre Client-ID sowie Ihr Secret direkt in der App und können sofort loslegen. Enterprise-Bedingungen, Staffelpreise und spezielle Sprachanpassungen stimmen wir gerne persönlich mit Ihnen ab.