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



Envie um arquivo de áudio ou vídeo como dados de formulário multipart, ou publique um link do YouTube, Google Drive, S3, Vimeo ou qualquer URL direta. Você obtém um ID de mídia e os metadados do arquivo antes de gastar qualquer valor.
Passe o ID da mídia como video_id e um idioma de destino. Adicione o idioma de origem ou o número de falantes, caso os conheça. O reconhecimento começa imediatamente.
Leia a transcrição assim que os segmentos estiverem disponíveis, enquanto a mídia traduzida continua sendo processada. Baixe os arquivos de legenda e mídia quando o projeto for concluído.
# 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"}}
]}

pt-br e pt-pt igualmente. Os registros do projeto versao_glossario, garantindo que alterações futuras não modifiquem o trabalho finalizado sem que você perceba.Sim. O reconhecimento de fala é a primeira etapa de cada projeto no Rask. Envie um áudio ou vídeo, crie um projeto e leia a transcrição em segmentos com identificação de falantes e carimbos de data/hora obtidos em GET /v2/projects/{id}/transcription. O mesmo projeto traduz a transcrição e gera legendas e áudio dublado.
A API aceita 75 idiomas de origem. Deixe src_lang vazio para que o idioma seja detectado automaticamente ou informe um código de duas letras, como en ou de. A transcrição pode ser traduzida para mais de 135 opções de idiomas e variações regionais.
Sim. Envie arquivos de áudio em MP3, WAV, FLAC ou M4A, como podcasts, entrevistas e chamadas gravadas, e o projeto os transcreve da mesma forma que um vídeo.
Sim. Diferentes falantes são detectados automaticamente, e cada segmento possui uma identificação de falante no formato SPEAKER_XX. Informe num_speakers se souber a quantidade e corrija o falante de qualquer segmento por meio da API.
Não. Os carimbos de data/hora são por segmento: cada segmento tem um horário de início e término no formato HH:MM:SS,mmm. Esse é o mesmo tempo usado pelas legendas. Se você precisar de um carimbo de data/hora para cada palavra, escolha uma API de fala para texto dedicada.
Não. O Rask faz a transcrição de áudios e vídeos completos e já gravados. Para legendas em tempo real, assistentes de voz, IA conversacional e centrais de atendimento, onde o texto precisa aparecer enquanto a pessoa ainda está falando, uma API de fala para texto por streaming é a melhor escolha.
A precisão depende do áudio: microfones, sotaques, falas sobrepostas e ruído de fundo influenciam no resultado. Teste a API com uma amostra das suas próprias gravações e corrija qualquer segmento pela API antes de publicar ou traduzir o conteúdo.
O reconhecimento não utiliza uma lista de vocabulário personalizada. Corrija palavras específicas na transcrição por meio do endpoint de segmentos. Quando a transcrição for traduzida, um glossário ajudará a manter nomes de produtos, nomes próprios e termos técnicos sempre consistentes.
O projeto finalizado inclui arquivos de legenda nos formatos SRT e VTT no idioma de destino. A transcrição do idioma de origem é fornecida em segmentos JSON com horários de início e término, que podem ser convertidos para SRT com poucas linhas de código.
Sim. Nos planos que permitem a importação de transcrições, você pode fornecer uma transcrição original existente, uma tradução aprovada no idioma de destino ou ambas como arquivos SRT ou segmentos de texto com marcação de tempo ao criar o projeto. O Rask pode traduzir seu roteiro original ou usar sua tradução aprovada para a dublagem.
Os projetos são cobrados por minuto de áudio ou vídeo, arredondados para o minuto inteiro seguinte, usando o mesmo saldo de minutos do aplicativo Rask. O preço inclui transcrição, tradução, locução e legendas. Minutos adicionais custam US$ 3/min nos planos padrão elegíveis. Os preços para empresas são personalizados de acordo com o seu contrato. Se você precisa apenas de uma transcrição, uma API dedicada de conversão de fala em texto custa menos.
Comece com um teste gratuito no aplicativo Rask, sem precisar de cartão, para testar a transcrição e a tradução com os seus próprios arquivos. O acesso à API está disponível nos planos Creator Pro, Business e Enterprise, com recursos definidos de acordo com o seu plano.
O acesso à API está disponível nos planos Creator Pro, Business e Enterprise, com recursos definidos de acordo com o seu plano. Você gera seu ID de cliente e segredo no aplicativo e pode começar a fazer requisições imediatamente. Termos para empresas, preços por volume e cobertura de idiomas personalizados passam pela nossa equipe.