The Async Audio URL API takes in a url link of your audio to proccess it.

It can be utilized for any use case where you have access to recorded audio stored publicly as URL and want to extract insights and other conversational attributes supported by Symbl's Conversation API.


The URL provided must be a publicly available URL. Currently we do not any support any redirected links, shortened links (e.g., YouTube, Vimeo, or links from any audio/video platforms.



Example API call#

curl --location --request POST '<your_webhook_url>&entities= [{"customType": "Custom_Entity_Type", "text": "Custom Entity to be searched in transcript"}]' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <generated_valid_token>' \
--data-raw '{
"url": "",
"confidenceThreshold": 0.6,
"timezoneOffset": 0

Request Headers#

Header NameRequiredValue
Content-Type YesAccepted value application/json

Request Body#

urlYesA valid url string. The URL must be a publicly accessible url.
customVocabularyNoContains a list of words and phrases that provide hints to the speech recognition task.
confidenceThresholdNoMinimum required confidence for the insight to be recognized. Value range from 0.0 to 1.0. Default value is 0.5 .
detectPhrasesNoIt shows Actionable Phrases in each sentence of conversation. These sentences can be found using the Conversation's Messages API. It's a boolean value where the default value is false.
nameNoYour meeting name. Default name set to conversationId.
webhookUrlNoWebhook url on which job updates to be sent. This should be post API.
entitiesNoInput custom entities which can be detected in your conversation using Entities' API. For example, check the sample code on right.
languageCodeNoWe accept different languages. Please check language Code as per your requirement.
enableSeparateRecognitionPerChannelNoEnables Speaker Separated Channel audio processing. Accepts true or false.
channelMetadataNoThis object parameter contains two variables speaker and channel to specific which speaker corresponds to which channel. This object only works when enableSeparateRecognitionPerChannel is set to true.

channelMetadata Object#

"channelMetadata": [
"channel": 1,
"speaker": {
"name": "Robert Bartheon",
"email": ""
"channel": 2,
"speaker": {
"name": "Arya Stark",
"email": ""

channelMetadata object has following members:

channelThis denotes the channel number in the audio file. Each channel will contain independent speaker's voice data.
speakerThis is the wrapper object which defines the speaker for this channel.

speaker has the following members:

nameName of the speaker.
emailEmail address of the speaker.

Billing for a speaker separated channel audio file happens according to the number of channels present in the audio files. The duration for billing will be calculated according to the below formula:

totalDuration = duration_of_the_audio_file * total_number_of_channels

So if you send a 120-second file with 3 speaker separated channels, the total duration for billing would be 360 seconds or 6 minutes.

Webhook object#

webhookUrl will be used to send the status of job created for uploaded audio url. Every time the status of the job changes it will be notified on the WebhookUrl

jobIdID to be used with Job API
statusCurrent status of the job. (Valid statuses - [ scheduled, in_progress, completed, failed ])


"conversationId": "5815170693595136",
"jobId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"

Response Object#

conversationIdID to be used with Conversation API.
jobIdID to be used with Job API

Response on reaching limit#

Payload{ "message" : "This API has a limit of maximum of 20 number of concurrent jobs per account. If you are looking to scale, and need more concurrent jobs than this limit, please contact us at" }
Header{ "statusCode" : 429 }