# 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 envie 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 de mídia como video_id e um idioma de destino. Adicione o idioma de origem ou o número de falantes, se você souber. 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 legendas e mídia quando o projeto estiver 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. O registro do projeto versão_do_glossário, garantindo que edições futuras nunca alterem o que já foi finalizado sem que você perceba.Sim. O reconhecimento de fala é a primeira etapa de cada projeto no Rask. Envie áudio ou vídeo, crie um projeto e leia a transcrição em segmentos com identificação de falantes e carimbos de data/hora em GET /v2/projects/{id}/transcription. O mesmo projeto traduz a transcrição e retorna legendas e áudio dublado.
A API aceita 75 idiomas de origem. Deixe o campo 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 nos formatos MP3, WAV, FLAC ou M4A, como podcasts, entrevistas e chamadas gravadas, e o projeto fará a transcrição da mesma forma que faz com vídeos.
Sim. Diferentes falantes são detectados automaticamente, e cada segmento possui uma identificação de falante no formato SPEAKER_XX. Informe num_speakers se você já 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 tempo de início e fim no formato HH:MM:SS,mmm. Esse é o tempo utilizado pelas legendas. Se você precisar de um carimbo de data/hora para cada palavra, escolha uma API dedicada de fala para texto.
Não. O Rask faz a transcrição de áudios e vídeos completos e pré-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 em tempo real é 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 personalizado. Corrija palavras específicas na transcrição através 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 consistentes.
O projeto finalizado inclui arquivos de legenda nos formatos SRT e VTT no idioma de destino. A transcrição no idioma de origem é fornecida em segmentos JSON com tempos de início e fim, que podem ser convertidos para SRT com poucas linhas de código.
Sim. Nos planos com importação de transcrição, você pode enviar uma transcrição original, uma tradução aprovada para o idioma de destino ou ambas no formato de arquivos SRT ou trechos de texto com tempo marcado 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 do Rask. O preço inclui transcrição, tradução, locução e legendas. Minutos adicionais custam US$ 3 por minuto 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 do Rask, sem precisar de cartão de crédito, para testar a transcrição e a tradução com 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 chave secreta no aplicativo e pode começar a fazer chamadas imediatamente. Condições para empresas, preços por volume e suporte a idiomas personalizados são tratados diretamente com a nossa equipe.