Terminal & cURL

For shell scripts and one-off jobs, use POST /api/v1/transcribe. Send the raw audio bytes as the request body and the options in the query string. The server keeps the connection open and streams job progress back as SSE until the transcript is ready.

POST /api/v1/transcribe
When to use this

Use /transcribe from terminals and simple scripts. Inside applications, use an SDK: it handles large uploads, retries, and reconnects for you.

Basic example

transcribe.sh
export SPEECHREVOLUTIONS_API_KEY=stt_...

curl -N -X POST \
  "https://api.speechrevolutions.com/api/v1/transcribe?output_type=json&word_timestamps=true&speaker_labels=true&nltk=true" \
  -H "X-API-Key: $SPEECHREVOLUTIONS_API_KEY" \
  --data-binary @./meeting.mp3

The -N flag disables buffering so progress events stream as they arrive. --data-binary sends the file bytes unmodified as the request body.

Query parameters

Pass options in the query string; the request body is the raw audio. The options are the same as for upload:

FieldTypeDefaultDescription
output_typestringjsontxt | json | srt | vtt | docx | pdf
word_timestampsbooltrueStart and end time of each word
speaker_labelsbooltrueSpeaker diarization
nltkbooltrueRestore punctuation and capitalization
tierstringstandardstandard — the only tier currently available
custom_vocabularystring—Comma-separated terms (optional)
languagestringautoISO 639-1 code (e.g. en) to skip language detection; see pinning the language

Progress stream

While the job runs, the response body streams events. Progress is reported as steps completed out of a total, not as a percentage. Divide the two to get one:

stream
event: accepted
data: {"job_id": "...", "download_url": "https://...", "llm_download_url": null, "resume": "curl ..."}

event: progress
data: {"completed":1,"total":4,"step":"preprocess"}

event: progress
data: {"completed":2,"total":4,"step":"chunk:1"}

event: progress
data: {"completed":3,"total":4,"step":"chunk:0"}

event: progress
data: {"completed":4,"total":4,"step":"aggregation"}

event: completed
data: {"download_url": "https://..."}

event: transcript
data: <the transcript, one data: line per line of output>

total is the number of processing steps for your file. It depends on how many chunks the audio is split into, so don't hard-code it. Chunk steps are named chunk:N and can arrive out of order because chunks are processed in parallel. A short file may emit no progress events at all and go straight from accepted to completed. Treat progress as advisory and detect completion with the completed event.

There is no separate upload step: the upload and the wait for the transcript happen on one connection.

Full field reference: API → Transcribe.