Sync Transcribe
Send an audio file and receive the transcript in the same HTTP request/response cycle — no webhooks or polling required. Optionally, the endpoint can also label who spoke when (diarisation) and detect music such as hold tones.
Code
New here? Get an API key first
Every request needs an API key in the X-CLIENT-TOKEN header. Sign up at
vulavula.lelapa.ai, generate a key, and
you're set — every account includes 100 free API calls per month. See
Authentication for the full walkthrough.
Processing time
Processing may take up to 2min30s, or fail altogether, on long, low-quality, or complex audio. Keep clips short where you can.
Request
Headers
| Header | Type | Required | Description |
|---|---|---|---|
X-CLIENT-TOKEN | string | Yes | Your API key — see Authentication |
Content-Type | string | Yes | Must be set to multipart/form-data |
Form data
| Parameter | Type | Required | Description |
|---|---|---|---|
file | file | Yes | The audio file to transcribe |
Supported audio formats: WAV, MP3, FLAC, AAC, OGG, MP4, AIFF, OPUS.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
lang_code | string | No | Language code for transcription. If not specified, the language is auto-detected. |
diarise | boolean | No | Label segments and words with speaker IDs (default: false). Sesotho returns segments only — see Word-level results |
detect_music | boolean | No | Detect music, such as music-on-hold (default: false) |
Supported language codes
| Code | Language |
|---|---|
afr | Afrikaans |
zul | isiZulu |
sot | Sesotho |
eng | South African English |
fra | African French |
Note: our zul (isiZulu) support is code-switched isiZulu.
See Language Support for the current status of every language, and the model cards for details on model performance.
Example request
Code
Prefer not to hand-roll HTTP calls? The Python SDK wraps transcription in a single method call.
Response
A successful request returns 200 OK with the transcript and audio metadata. The example below shows a diarised, two-speaker call with detect_music enabled:
Code
Response fields
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier for this transcription |
transcription_text | string | The full transcript |
transcription_status | string | COMPLETED on success |
language_code | string | The language used — either your lang_code or the auto-detected language |
audio_length_seconds | number | Duration of the submitted audio |
diarisation_result | object | Present when diarise=1: a timeline of silence/speech/music segments with speaker IDs and text, plus per-word timings and confidence in words (not returned for Sesotho) |
error_message | string | Populated when transcription fails |
Word-level results
Sesotho does not return word-level results
For Sesotho (sot), diarisation_result contains only timeline. The
words key is left out of the response, so check that it exists before
reading it.
You still get who spoke when, and the text of each turn, from timeline. What is not available for Sesotho:
- Word timings — the start and end time of each word. Captions, search and click-to-play can only work at the level of a whole speaker turn.
- Per-word speaker IDs — speaker labels apply to a whole turn, and the text at the edge of a turn may be attached to the neighbouring speaker.
- Per-word confidence — there is no score to filter or flag individual words with.
If your integration handles several languages, treat words as optional:
Code
Errors
| Status | Meaning |
|---|---|
400 Bad Request | The request was malformed or contained invalid data |
401 Unauthorized | The client token is missing or invalid |
413 Payload Too Large | File size exceeds the limit |
415 Unsupported Media Type | Invalid audio file format |
422 Unprocessable Entity | The request body failed validation |
500 Internal Server Error | An unexpected error occurred on the server |
503 Service Unavailable | Temporary overload — retry later |
504 Gateway Timeout | Service downtime — retry later |
Next steps
- Use the Python SDK for webhook-based transcription without managing HTTP calls
- Explore the model cards for accuracy details per language
- Translate your transcripts with the Translate API
- Browse the full API Reference

