# 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)"'



Laden Sie eine Videodatei als Multipart-Formulardaten hoch oder senden Sie einen YouTube-, Google Drive-, Vimeo-, S3- oder Direktlink. Sie erhalten eine Medien-ID und die Videometadaten, bevor Kosten anfallen.
Übergeben Sie die Medien-ID als video_id und eine Zielsprache. Lassen Sie die Quellersprache für die automatische Spracherkennung leer. Die Transkription beginnt sofort.video_id
Lesen Sie Transkriptsegmente ab, sobald sie verfügbar sind, damit Sie mit der Indizierung der Aufnahme beginnen können, während die übersetzten Medien noch verarbeitet 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
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 und es-es gleichermaßen dient. Das Projekt speichert glossary_version, sodass spätere Änderungen bereits fertiggestellte Arbeit nicht unbemerkt verändern.Ja. Sende eine Videodatei oder einen Link, erstelle ein Projekt und rufe das Transkript mit Sprecherkennzeichnungen und Zeitstempeln über GET /v2/projects/{id}/transcription ab. Die Transkription ist der erste Schritt jedes Rask-Projekts, bei dem anschließend Übersetzung, Untertitel und eine synchronisierte Version hinzugefügt werden.
Ja. Füge einen Link von YouTube, Google Drive, Vimeo, S3 oder einen direkten Download-Link im Media-Endpunkt ein, und die API ruft das Video automatisch ab. Du kannst Videodateien auch direkt hochladen.
Ja. Erstelle einfach ein Projekt pro Video und führe sie parallel aus. Die API hat keine Rate-Limits, kein Parallelitätslimit und keine Drosselung pro Schlüssel, sodass die Massentranskription einer ganzen Mediathek ganz einfach über eine Schleife in deinem Code möglich ist.
Verschiedene Sprecher werden automatisch erkannt, und jeder Abschnitt erhält eine Sprecherkennzeichnung wie SPEAKER_00. Wenn du die Anzahl der Sprecher kennst, kannst du num_speakers beim Erstellen des Projekts angeben.
Die API transkribiert 75 Quellsprachen, einschließlich Englisch, mit automatischer Spracherkennung: Lass src_lang einfach leer oder gib einen zweistelligen Code wie en ein. Transkripte können in über 135 Sprachen und regionale Varianten wie en-us oder es-mx übersetzt werden.
Die Genauigkeit hängt vom Video ab: Hintergrundgeräusche, laute Umgebungen, sich überlappende Sprache, Akzente und Fachbegriffe spielen dabei eine Rolle. Teste die API am besten mit deinen eigenen Videos und korrigiere bei Bedarf Abschnitte über die API, bevor du sie veröffentlichst.
Das Transkript wird als JSON-Segmente mit Sprechern und Zeitstempeln bereitgestellt. Du kannst den Text der Abschnitte zusammenfügen, um einfachen Text zu erhalten, oder die Zeitstempel beibehalten, um die Transkripte durchsuchbar zu machen. Untertitel im SRT- und VTT-Format sind in der Zielsprache enthalten.
Nein. Die API liefert das Transkript, die Übersetzung, Untertitel und eine synchronisierte Version. Um KI-generierte Zusammenfassungen oder Besprechungsnotizen zu erstellen, kannst du das Transkript an ein Tool deiner Wahl zur Zusammenfassung übergeben.
Ja, anhand von Aufzeichnungen. Lade das aufgezeichnete Meeting einfach als Video- oder Audiodatei hoch. Die API verbindet sich nicht direkt mit Meeting-Plattformen und bietet keine Echtzeit-Untertitel oder Transkriptionen von Live-Anrufen mit geringer Latenz.
In der API-Dokumentation ist kein festes Dateigrößenlimit angegeben. Jedes Projekt gibt original_duration und duration aus, nachdem die Limits deines Tarifs angewendet wurden. Bei sehr langen Videos oder großem Volumen kannst du dich gerne an unser Team wenden.
Projekte werden pro Videominute abgerechnet, aufgerundet auf die nächste volle Minute, und nutzen dasselbe Minutenkontingent wie die Rask-App. Der Preis beinhaltet Transkription, Übersetzung, Untertitel und die synchronisierte Version. Zusätzliche Minuten kosten bei berechtigten Standardtarifen 3 $/Min. Enterprise-Preise richten sich nach deiner individuellen Vereinbarung.
Beginnen Sie mit einer kostenlosen Testversion in der Rask-App (keine Kreditkarte erforderlich), um die Transkription an Ihren eigenen Videos zu testen. Der API-Zugriff ist in den Tarifen Creator Pro, Business und Enterprise verfügbar, wobei die Funktionen von Ihrem gewählten Tarif abhängen.
Der API-Zugriff ist in den Tarifen Creator Pro, Business und Enterprise verfügbar, wobei die Funktionen von Ihrem Tarif abhängen. Sie erstellen Ihre Client-ID sowie das Secret in der App und können sofort loslegen. Enterprise-Tarife, Volumenpreise und maßgeschneiderte Sprachoptionen werden über unser Team abgewickelt.