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) |
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 |
cs-zul | Code-switched isiZulu (alpha) |
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 |
error_message | string | Populated when transcription fails |
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 |
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

