curl --request POST \
--url https://gateway.widebot.net/api/v2/AQL/SpeechToText \
--header 'Content-Type: multipart/form-data' \
--header 'x-bot: <api-key>' \
--header 'x-user-auth: <api-key>' \
--form SessionId=123456 \
--form SetDefaultSampleRate=true \
--form TargetLanguage=ar \
--form ModelName=v1 \
--form MaxRecordLengthInSeconds=180 \
--form SampleRate=16000 \
--form Record='@example-file'import requests
url = "https://gateway.widebot.net/api/v2/AQL/SpeechToText"
files = { "Record": ("example-file", open("example-file", "rb")) }
payload = {
"SessionId": "123456",
"SetDefaultSampleRate": "true",
"TargetLanguage": "ar",
"ModelName": "v1",
"MaxRecordLengthInSeconds": "180",
"SampleRate": "16000"
}
headers = {
"x-user-auth": "<api-key>",
"x-bot": "<api-key>"
}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('SessionId', '123456');
form.append('SetDefaultSampleRate', 'true');
form.append('TargetLanguage', 'ar');
form.append('ModelName', 'v1');
form.append('MaxRecordLengthInSeconds', '180');
form.append('SampleRate', '16000');
form.append('Record', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {'x-user-auth': '<api-key>', 'x-bot': '<api-key>'}};
options.body = form;
fetch('https://gateway.widebot.net/api/v2/AQL/SpeechToText', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://gateway.widebot.net/api/v2/AQL/SpeechToText",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SessionId\"\r\n\r\n123456\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SetDefaultSampleRate\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"TargetLanguage\"\r\n\r\nar\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ModelName\"\r\n\r\nv1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"MaxRecordLengthInSeconds\"\r\n\r\n180\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SampleRate\"\r\n\r\n16000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"Record\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"x-bot: <api-key>",
"x-user-auth: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://gateway.widebot.net/api/v2/AQL/SpeechToText"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SessionId\"\r\n\r\n123456\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SetDefaultSampleRate\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"TargetLanguage\"\r\n\r\nar\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ModelName\"\r\n\r\nv1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"MaxRecordLengthInSeconds\"\r\n\r\n180\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SampleRate\"\r\n\r\n16000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"Record\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-user-auth", "<api-key>")
req.Header.Add("x-bot", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://gateway.widebot.net/api/v2/AQL/SpeechToText")
.header("x-user-auth", "<api-key>")
.header("x-bot", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SessionId\"\r\n\r\n123456\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SetDefaultSampleRate\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"TargetLanguage\"\r\n\r\nar\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ModelName\"\r\n\r\nv1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"MaxRecordLengthInSeconds\"\r\n\r\n180\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SampleRate\"\r\n\r\n16000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"Record\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://gateway.widebot.net/api/v2/AQL/SpeechToText")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-user-auth"] = '<api-key>'
request["x-bot"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SessionId\"\r\n\r\n123456\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SetDefaultSampleRate\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"TargetLanguage\"\r\n\r\nar\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ModelName\"\r\n\r\nv1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"MaxRecordLengthInSeconds\"\r\n\r\n180\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SampleRate\"\r\n\r\n16000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"Record\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"StatusCode": 200,
"Response": "مرحباً، كيف حالك اليوم؟ أتمنى أن تكون بخير.",
"Consumption": "15/1000"
}Convert Speech to Text
Convert audio files to text with superior Arabic dialect recognition and support for multiple languages.
Supported Audio Formats:
- WAV (recommended for best quality)
- MP3 (widely supported)
- MP4 (audio track extraction)
- Other common audio formats
Arabic Excellence:
- Industry-leading Arabic dialect recognition
- Support for Egyptian, Gulf, Levantine, and Maghrebi variations
- Colloquial expression handling
- Regional pronunciation accuracy
Consumption: Based on audio duration in seconds
Note: Example requests/responses shown here are illustrative. When using the live “Try it” tool, you may see two responses: an HTTP status preview and the API’s JSON body.
curl --request POST \
--url https://gateway.widebot.net/api/v2/AQL/SpeechToText \
--header 'Content-Type: multipart/form-data' \
--header 'x-bot: <api-key>' \
--header 'x-user-auth: <api-key>' \
--form SessionId=123456 \
--form SetDefaultSampleRate=true \
--form TargetLanguage=ar \
--form ModelName=v1 \
--form MaxRecordLengthInSeconds=180 \
--form SampleRate=16000 \
--form Record='@example-file'import requests
url = "https://gateway.widebot.net/api/v2/AQL/SpeechToText"
files = { "Record": ("example-file", open("example-file", "rb")) }
payload = {
"SessionId": "123456",
"SetDefaultSampleRate": "true",
"TargetLanguage": "ar",
"ModelName": "v1",
"MaxRecordLengthInSeconds": "180",
"SampleRate": "16000"
}
headers = {
"x-user-auth": "<api-key>",
"x-bot": "<api-key>"
}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('SessionId', '123456');
form.append('SetDefaultSampleRate', 'true');
form.append('TargetLanguage', 'ar');
form.append('ModelName', 'v1');
form.append('MaxRecordLengthInSeconds', '180');
form.append('SampleRate', '16000');
form.append('Record', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {'x-user-auth': '<api-key>', 'x-bot': '<api-key>'}};
options.body = form;
fetch('https://gateway.widebot.net/api/v2/AQL/SpeechToText', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://gateway.widebot.net/api/v2/AQL/SpeechToText",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SessionId\"\r\n\r\n123456\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SetDefaultSampleRate\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"TargetLanguage\"\r\n\r\nar\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ModelName\"\r\n\r\nv1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"MaxRecordLengthInSeconds\"\r\n\r\n180\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SampleRate\"\r\n\r\n16000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"Record\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"x-bot: <api-key>",
"x-user-auth: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://gateway.widebot.net/api/v2/AQL/SpeechToText"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SessionId\"\r\n\r\n123456\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SetDefaultSampleRate\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"TargetLanguage\"\r\n\r\nar\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ModelName\"\r\n\r\nv1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"MaxRecordLengthInSeconds\"\r\n\r\n180\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SampleRate\"\r\n\r\n16000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"Record\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-user-auth", "<api-key>")
req.Header.Add("x-bot", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://gateway.widebot.net/api/v2/AQL/SpeechToText")
.header("x-user-auth", "<api-key>")
.header("x-bot", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SessionId\"\r\n\r\n123456\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SetDefaultSampleRate\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"TargetLanguage\"\r\n\r\nar\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ModelName\"\r\n\r\nv1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"MaxRecordLengthInSeconds\"\r\n\r\n180\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SampleRate\"\r\n\r\n16000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"Record\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://gateway.widebot.net/api/v2/AQL/SpeechToText")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-user-auth"] = '<api-key>'
request["x-bot"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SessionId\"\r\n\r\n123456\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SetDefaultSampleRate\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"TargetLanguage\"\r\n\r\nar\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ModelName\"\r\n\r\nv1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"MaxRecordLengthInSeconds\"\r\n\r\n180\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"SampleRate\"\r\n\r\n16000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"Record\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"StatusCode": 200,
"Response": "مرحباً، كيف حالك اليوم؟ أتمنى أن تكون بخير.",
"Consumption": "15/1000"
}Authorizations
Your API key from account settings
Your bot ID from account settings
Body
Audio file to transcribe
Unique session identifier for tracking
"test-session-1234"
Language of the resulting text (en or ar)
en, ar "ar"
Required. Speech-to-text model.
- v1: Best Arabic quality, with strong streaming. Choose this for Arabic-only audio.
- v2: Handles Arabic and English. Choose this when the audio mixes or switches between the two languages.
v1, v2 "v1"
Set to "true" to use the default sample rate. Provide this or an explicit SampleRate; transcription fails without sample-rate information.
true, false "true"
Maximum audio duration to process
"180"
Optional. URL of an audio file to transcribe.
"https://cdn.widebot.net/tmp/audio/sample.wav"
Sample rate of the provided audio in Hz
"16000"
Was this page helpful?

