Docs
ChangelogالعربيةDashboard
DocumentationAPI reference
API referenceTranscribe an audio file
  • Introduction
  • Authentication
    • GETVerify API key
  • Agents
    • POSTCreate agent
    • GETList agents
    • GETGet agent
    • PUTUpdate agent
    • DELDelete agent
    • POSTLink analysis groups to an agent
    • GETList analysis groups for an agent
  • Tools
    • POSTCreate tool
    • GETList tools
    • GETGet tool
    • PUTUpdate tool
    • DELDelete tool
    • POSTLink a tool to an agent
    • DELUnlink a tool from an agent
    • GETList tools for an agent
    • GETList agents for a tool
  • Analysis groups
    • POSTCreate analysis group
    • GETList analysis groups
    • GETGet analysis group
    • PUTUpdate analysis group
    • DELDelete analysis group
    • POSTLink an agent to an analysis group
    • POSTLink agents to an analysis group
    • GETList agents for an analysis group
    • DELUnlink an analysis group from an agent
  • Knowledge bases
    • POSTCreate knowledge base
    • GETList knowledge bases
    • GETGet knowledge base
    • PATCHUpdate knowledge base
    • DELDelete knowledge base
  • Documents
    • POSTAdd PDF document
    • POSTAdd text document
    • POSTAdd URL document
    • GETList documents
    • GETGet document
    • DELDelete document
  • Calls
    • POSTCreate outbound call
    • GETGet call
    • POSTSearch calls
    • POSTGet call analytics
    • POSTExport calls
    • GETGet recording download URL
    • POSTCreate outbound call (legacy path)
  • Web calls
    • POSTCreate web call
    • POSTCreate web call (legacy path)
  • SIP inbound
    • POSTCreate SIP inbound trunk
    • GETList SIP inbound trunks
    • GETGet SIP inbound trunk
    • DELDelete SIP inbound trunk
  • SIP outbound
    • POSTCreate SIP outbound trunk
    • GETList SIP outbound trunks
    • GETGet SIP outbound trunk
    • DELDelete SIP outbound trunk
  • Agent inbound links
    • POSTLink an agent to an inbound trunk
    • GETList agent inbound links
    • DELDelete agent inbound link
  • Text to speech
    • POSTGenerate speech
    • GETList voices
    • GETGet voice
    • POSTClone a voice
    • DELDelete cloned voice
  • Speech to text
    • POSTTranscribe an audio file
    • GETGet transcription job
    • GETList transcription jobs
    • WSStream speech to text
  • Contacts
    • POSTCreate contact
    • GETList contacts
    • GETSearch contacts
    • GETGet contact
    • PATCHUpdate contact
    • GETList conversations for a contact
  • Conversations
    • GETList conversations
    • POSTFilter conversations
    • POSTList conversations by contact
    • GETGet conversation
    • GETList conversation messages
    • POSTSend a message
    • POSTSend a message with an attachment
    • GETList conversation attachments
    • POSTAssign conversation
    • POSTChange conversation status
    • POSTChange conversation priority
    • POSTMark conversation as seen
  • Tickets
    • POSTCreate ticket
    • GETList tickets
    • POSTFilter tickets
    • POSTList tickets by contact
    • GETGet ticket
    • GETList ticket messages
    • POSTAdd a ticket message
    • POSTAdd a ticket message with attachments
    • POSTAssign ticket
    • POSTChange ticket status
    • POSTChange ticket priority
    • POSTChange ticket type
    • POSTCreate ticket inbox
    • GETList ticket inboxes
    • PATCHUpdate ticket inbox
    • DELDelete ticket inbox
  • WhatsApp
    • POSTConnect a WhatsApp number
    • GETList WhatsApp inboxes
    • GETGet WhatsApp inbox
    • PATCHUpdate WhatsApp inbox
    • DELDelete WhatsApp inbox
    • POSTCreate WhatsApp conversation
    • GETList WhatsApp conversations
    • POSTFilter WhatsApp conversations
    • POSTList WhatsApp conversations by contact
    • POSTAssign an agent to a WhatsApp number
    • GETGet the agent on a WhatsApp number
    • DELRemove the agent from a WhatsApp number
    • POSTGet WhatsApp analytics
  • Instagram
    • GETList Instagram accounts
    • GETGet Instagram account
    • DELDelete Instagram account
    • GETList Instagram conversations
    • POSTFilter Instagram conversations
    • POSTList Instagram conversations by contact
    • POSTAssign an agent to an Instagram account
    • GETGet the agent on an Instagram account
    • DELRemove the agent from an Instagram account
  • TikTok
    • GETList TikTok accounts
    • GETGet TikTok account
    • DELDelete TikTok account
    • GETList TikTok conversations
    • POSTFilter TikTok conversations
    • POSTList TikTok conversations by contact
    • POSTAssign an agent to a TikTok account
    • GETGet the agent on a TikTok account
    • DELRemove the agent from a TikTok account

Speech to text

Transcribe an audio file

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.

POST
https://api.nabrah.ai/api/ext/stt/async-transcribe
Transcribe an audio file
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"
}

Multipart form fields

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 · required

The audio file to transcribe. Maximum duration is 2 hours — longer files are rejected with a 422 error.

audio_file
priority_wordsstring · repeatable · optional

A 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_words
priority_words_strengthnumber · default: 0.5

How 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_strength
recognition_modelstring · default: server-configured model

Model variant for the job. Leave it out to use the default model, which is the most accurate.

recognition_model
end_of_utterance_silence_msinteger · default: -1

Trailing 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_ms

The settings a job was queued with are returned on the job as recognition_config, so you can confirm what was applied.

Async flow

Transcription runs in the background; this request only creates the job.

1 · Upload

This endpoint stores the audio, queues a transcription job, and returns the job immediately with status: "queued" and result: null.

2 · Track

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.

3 · Result

Once status is completed, the job's result object holds the transcription: text_result, audio_duration, and timestamps.

text_resultaudio_durationtimestamps

Authorization

X-API-Keystringheaderrequired

Your workspace API key. Create one in the dashboard under API keys.

Body

multipart/form-data

Response

200

Successful Response

application/json

422

Validation Error

application/json

PreviousSpeech to textNextGet transcription job
© 2026 Nabrah. All rights reserved.
ChangelogPrivacy PolicyTerms of Service