Speech to text
Queue a long audio file (up to 2 hours) for background transcription. Send the audio as a multipart/form-data upload, optionally with recognition settings that tune how it is transcribed (priority words to boost, the model variant, and end-of-utterance silence). The request returns immediately with a job in queued status — nothing streams back and you do not keep the connection open. Poll the job endpoints to collect the transcription once it completes. Authenticate with the X-API-Key header.
curl --request POST \
--url 'https://api.nabrah.ai/api/ext/stt/async-transcribe' \
--header 'X-API-Key: <your-api-key>'{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "queued",
"project_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"result": null,
"created_at": "2026-07-23T12:00:00Z",
"updated_at": "2026-07-23T12:00:00Z",
"filename": "recording.mp3"
}Send the request as multipart/form-data (not JSON). Only audio_file is required; the recognition settings use the same names and defaults as the streaming WebSocket config.
audio_filefile · requiredThe audio file to transcribe. Maximum duration is 2 hours — longer files are rejected with a 422 error.
audio_filepriority_wordsstring · repeatable · optionalA word or phrase to bias recognition toward, such as product names, brands or branch names. Repeat the field once per word (for example -F priority_words=Nabrah -F priority_words=Olaya). Up to 100 words; more returns a 400 error.
priority_wordspriority_words_strengthnumber · default: 0.5How strongly to bias toward priority_words. 0.5 works well for a relatively small vocabulary; the recommended range for broader biasing is 20-100. A value that is not a number returns a 400 error.
priority_words_strengthrecognition_modelstring · default: server-configured modelModel variant for the job. Leave it out to use the default model, which is the most accurate.
recognition_modelend_of_utterance_silence_msinteger · default: -1Trailing silence in milliseconds that ends an utterance. -1 keeps the recognizer's own defaults; only a positive value overrides. A value that is not an integer returns a 400 error.
end_of_utterance_silence_msThe settings a job was queued with are returned on the job as recognition_config, so you can confirm what was applied.
Transcription runs in the background; this request only creates the job.
This endpoint stores the audio, queues a transcription job, and returns the job immediately with status: "queued" and result: null.
Poll GET /api/ext/stt/jobs/{job_id} (or list jobs with GET /api/ext/stt/jobs). The status moves queued → in_progress → completed, or failed if transcription could not finish.
Once status is completed, the job's result object holds the transcription: text_result, audio_duration, and timestamps.
text_resultaudio_durationtimestampsX-API-KeystringheaderrequiredYour workspace API key. Create one in the dashboard under API keys.
Successful Response
application/json
Validation Error
application/json