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.
Use /transcribe from terminals and simple scripts. Inside applications, use an SDK: it handles large uploads, retries, and reconnects for you.
Basic example
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.mp3The -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:
| Field | Type | Default | Description |
|---|---|---|---|
output_type | string | json | txt | json | srt | vtt | docx | pdf |
word_timestamps | bool | true | Start and end time of each word |
speaker_labels | bool | true | Speaker diarization |
nltk | bool | true | Restore punctuation and capitalization |
tier | string | standard | standard — the only tier currently available |
custom_vocabulary | string | — | Comma-separated terms (optional) |
language | string | auto | ISO 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:
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.