Terminal & cURL

For shell scripts and one-off jobs, use POST /api/v1/transcribe. You stream the raw audio bytes as the request body (options go in the query string); the server streams the upload straight to storage, then holds 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. Use the SDK (/api/v1/upload flow) inside applications — it handles large uploads, heartbeats, and SSE 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

Options are passed in the query string (the request body is the raw audio). Same options as upload:

FieldTypeDefaultDescription
output_typestringjsontxt | json | srt | vtt | docx | pdf
word_timestampsbooltruePer-word timing
speaker_labelsbooltrueDiarization
nltkbooltruePunctuation / cleanup
tierstringstandardstandard — the only tier currently available
custom_vocabularystringComma-separated terms (optional)

Progress stream

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

stream
event: accepted
data: {"job_id": "...", "download_url": "https://..."}

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://...", "job_id": "..."}

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

total is the number of pipeline steps for your file, so it depends on how many chunks the audio is split into — don't hard-code it. Chunk steps are named chunk:N and can arrive out of order (they finish in whatever order the workers do). A short file that finishes in one pass may emit no progress events at all, going straight from accepted to completed; treat progress as advisory and drive completion off the completed event.

Unlike the SDK upload flow, there is no separate /upload/progress or /upload/complete step — the file upload and job wait happen on one connection.

Full field reference: API → Transcribe.