curl --request POST \
--url https://api.slng.ai/v1/bridges/unmute/stt/{model_variant} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form audio=@example-file \
--form language=enimport requests
url = "https://api.slng.ai/v1/bridges/unmute/stt/{model_variant}"
files = { "audio": ("example-file", open("example-file", "rb")) }
payload = { "language": "en" }
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('audio', '<binary>');
form.append('language', 'en');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://api.slng.ai/v1/bridges/unmute/stt/{model_variant}', 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://api.slng.ai/v1/bridges/unmute/stt/{model_variant}",
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=\"audio\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<binary>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$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://api.slng.ai/v1/bridges/unmute/stt/{model_variant}"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<binary>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.slng.ai/v1/bridges/unmute/stt/{model_variant}")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<binary>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.slng.ai/v1/bridges/unmute/stt/{model_variant}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<binary>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"results": {
"channels": [
{
"alternatives": [
{
"transcript": "Hello from sunny Barcelona!",
"confidence": 0.99
}
]
}
]
}
}{
"error": "Validation error",
"details": "Missing required field: text"
}{
"error": "TTS service error",
"status": 400,
"details": "Upstream provider error: 400 Bad Request - Invalid voice"
}{
"error": "<string>",
"message": "<string>",
"statusCode": 123
}{
"error": "Service error",
"details": "Internal processing error"
}{
"error": "TTS service error",
"status": 400,
"details": "Upstream provider error: 400 Bad Request - Invalid voice"
}Unified STT
Transcribe a recorded file through the Unmute bridge over HTTP. The model_variant path parameter selects the target STT model (e.g., deepgram/nova:3, slng/deepgram/nova:3-en), and the gateway forwards the request to that model’s HTTP API.
curl --request POST \
--url https://api.slng.ai/v1/bridges/unmute/stt/{model_variant} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form audio=@example-file \
--form language=enimport requests
url = "https://api.slng.ai/v1/bridges/unmute/stt/{model_variant}"
files = { "audio": ("example-file", open("example-file", "rb")) }
payload = { "language": "en" }
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('audio', '<binary>');
form.append('language', 'en');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://api.slng.ai/v1/bridges/unmute/stt/{model_variant}', 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://api.slng.ai/v1/bridges/unmute/stt/{model_variant}",
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=\"audio\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<binary>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$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://api.slng.ai/v1/bridges/unmute/stt/{model_variant}"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<binary>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.slng.ai/v1/bridges/unmute/stt/{model_variant}")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<binary>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.slng.ai/v1/bridges/unmute/stt/{model_variant}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<binary>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nen\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"results": {
"channels": [
{
"alternatives": [
{
"transcript": "Hello from sunny Barcelona!",
"confidence": 0.99
}
]
}
]
}
}{
"error": "Validation error",
"details": "Missing required field: text"
}{
"error": "TTS service error",
"status": 400,
"details": "Upstream provider error: 400 Bad Request - Invalid voice"
}{
"error": "<string>",
"message": "<string>",
"statusCode": 123
}{
"error": "Service error",
"details": "Internal processing error"
}{
"error": "TTS service error",
"status": 400,
"details": "Upstream provider error: 400 Bad Request - Invalid voice"
}Authorizations
API key issued by SLNG. Pass as Authorization: Bearer <token>.
Path Parameters
Target STT model. Must support WebSocket streaming with final_transcript.
deepgram/nova:3, deepgram/nova:3-medical, gradium/stt:default, reson8/reson8stt:v1, sarvam/saaras:v3, slng/deepgram/nova:3-en, slng/deepgram/nova:3-hi, slng/deepgram/nova:3-id, slng/deepgram/nova:3-kn, slng/deepgram/nova:3-mr, slng/deepgram/nova:3-te, slng/speechmatics/realtime:v2, soniox/speech-ai:rt-v5 Body
Unmute STT request. Provide either audio (multipart upload) or url (publicly accessible HTTPS URL).
Audio file (multipart) or base64-encoded audio (JSON).
Publicly accessible audio URL.
"https://docs.slng.ai/audio/hello.wav"
Language code for recognition.
Audio sample rate in Hz.
8000, 16000, 22050, 24000, 32000, 48000 Audio encoding format.
linear16, mp3, opus Enable partial transcription results.
Response
Transcription successful. The body is the target model's native HTTP transcription response, returned unchanged.
The target model's native HTTP transcription response, passed through unchanged. For example, Deepgram Nova returns results.channels[].alternatives[]. See the direct endpoint of the selected model for its exact shape.