Speech to text
Transcribe speech audio with speaker diarization, timestamps, non-verbal event tags, and JSON/SRT/VTT subtitles.
Transcribe speech audio into text with utterance timestamps, optional speaker diarization, non-verbal audio-event tags, and ready-to-use JSON, SRT, and VTT subtitle files.
Primary agent path
Use the Universal Skill with the MCP tool beatra.audio.transcribe. The tool is
billable and returns an asynchronous task.
- Upload local audio with
beatra.assets.uploadand use the returnedartifact_id(or pass anhttps_url). - When language breadth, non-verbal event tagging, or price matters, call
beatra.models.listwithcapability: "speech_to_text". Otherwise omitmodelor pass"auto"(doubao-seed-asr-2.0by default, or automatically routed toelevenlabs-scribe-v3whentag_audio_events: trueornum_speakersis requested). - Create one opaque
client_request_idand submit the final arguments once. - Poll the returned task with
beatra.tasks.getuntil it is terminal, and read the full transcript from that single-task response.
AI guide
MCP integration guide for AI
For custom API integrations, copy this guide into Claude, Codex, or another coding assistant.
Tool arguments
audio(required;sourceaccepted as an input alias on both MCP and REST): an artifact reference ({"type": "artifact", "artifact_id": "..."}) or HTTPS URL ({"type": "https_url", "url": "https://..."}). Accepted formats include MP3, WAV, M4A, AAC, FLAC, OGG, and Opus. Duration must be between0.5seconds and3,600seconds (60 minutes), and file size at most100 MiB. Audio longer than60 minutesis rejected before billing with422 invalid_request(details.reason: "audio_too_long"; split longer recordings first withbeatra.audio.processoperation: "trim"— see audio processing).model(optional, default"auto"):"auto","doubao-seed-asr-2.0", or"elevenlabs-scribe-v3".language(optional, default"auto"):"auto"for automatic language detection, or a BCP-47 / ISO-639-1 tag such as"zh","yue","en", or"ja".diarize(optional, boolean, defaultfalse): label speaker turns acrosssegments[](speaker_0,speaker_1, …).num_speakers(optional, integer1–32): expected speaker count hint onelevenlabs-scribe-v3; passingnum_speakersimpliesdiarize: trueand automatically upgradesmodel: "auto"toelevenlabs-scribe-v3when available.tag_audio_events(optional, boolean, defaultfalse): tag non-verbal audio events such as laughter, applause, and music onelevenlabs-scribe-v3. Whenmodelis"auto", passingtag_audio_events: trueautomatically selectselevenlabs-scribe-v3if available; passingtag_audio_events: trueornum_speakerswith an explicitmodel: "doubao-seed-asr-2.0"attaches a non-blockingoption_ignoredwarning.subtitles(optional, boolean, defaulttrue): generate and persist the JSON, SRT, and VTT subtitle bundle on Beatra CDN at no extra charge.model_options(optional, object): forward-compatible bag for model-specific extension options.
Models and cost
beatra.models.list with capability: "speech_to_text" is the live source for
selectable models, supported controls, and prices.
Transcription is prepaid by started input minute (ceil(duration_seconds / 60)),
with a per-request minimum:
| Model | Rate | Minimum | Strengths |
|---|---|---|---|
doubao-seed-asr-2.0 (auto default) | 15 credits / started minute | 60 credits (<= 4 min) | High-accuracy Chinese, Mandarin dialects & accents, English, Japanese, and multilingual speech with speaker diarization and timestamps. |
elevenlabs-scribe-v3 | 21 credits / started minute | 61 credits (<= 2 min) | 90+ global languages, up to 32 speakers (num_speakers), timestamps, and non-verbal tag_audio_events ((laughter), (applause), (music)). |
Result and subtitles
When the task succeeds, output contains the full transcript, utterance-level
segments, optional audio events, and the subtitle bundle:
subtitlesuses the exact samefiles.{json, srt, vtt}structure as text to speech subtitles, so downstream video composition and captioning pipelines consume both without format conversion.- Silent or speech-free audio is a valid observation, not an error: the task
succeeds with
text: "",segments: [], andsubtitles: null. - In task list views (
GET /v1/tasks), long transcripts return a bounded preview markedtruncated: true. Always readbeatra.tasks.getorGET /v1/tasks/{task_id}for the completetextandsegments[].
Task status and recovery
queued and running are not failures. Keep polling the same task_id; never
submit a replacement because work is still running. On a lost create response,
retry the identical arguments with the same client_request_id. If any input
changes, use a new ID. Failed tasks automatically refund the reserved credits.
REST API
Direct protocol integrations may use POST /v1/audio/transcriptions with a
stable Idempotency-Key header and the shared task endpoints. Follow the
generated API reference. Skill + MCP is the recommended
integration; use REST for custom, non-agent applications.
Last updated