curl --request POST \
--url https://polza.ai/api/v1/audio/transcriptions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form 'file=data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA...' \
--form model=whisper-1 \
--form language=ru \
--form 'prompt=Это разговор об искусственном интеллекте' \
--form response_format=json \
--form temperature=0 \
--form 'timestamp_granularities[0]=word' \
--form 'timestamp_granularities[1]=segment' \
--form user=user-123 \
--form chunking_strategy=auto \
--form include=logprobs \
--form 'known_speaker_names[0]=agent' \
--form 'known_speaker_names[1]=customer' \
--form 'known_speaker_references=<array>' \
--form stream=falseimport requests
url = "https://polza.ai/api/v1/audio/transcriptions"
payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\ndata:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA...\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwhisper-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nru\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nЭто разговор об искусственном интеллекте\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B0%5D\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B1%5D\"\r\n\r\nsegment\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user\"\r\n\r\nuser-123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"chunking_strategy\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"include\"\r\n\r\nlogprobs\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B0%5D\"\r\n\r\nagent\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B1%5D\"\r\n\r\ncustomer\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_references\"\r\n\r\n<array>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\r\n-----011000010111000001101001--"
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "multipart/form-data"
}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const form = new FormData();
form.append('file', 'data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA...');
form.append('model', 'whisper-1');
form.append('language', 'ru');
form.append('prompt', 'Это разговор об искусственном интеллекте');
form.append('response_format', 'json');
form.append('temperature', '0');
form.append('timestamp_granularities[0]', 'word');
form.append('timestamp_granularities[1]', 'segment');
form.append('user', 'user-123');
form.append('chunking_strategy', 'auto');
form.append('include', 'logprobs');
form.append('known_speaker_names[0]', 'agent');
form.append('known_speaker_names[1]', 'customer');
form.append('known_speaker_references', '<array>');
form.append('stream', 'false');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://polza.ai/api/v1/audio/transcriptions', 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://polza.ai/api/v1/audio/transcriptions",
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=\"file\"\r\n\r\ndata:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA...\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwhisper-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nru\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nЭто разговор об искусственном интеллекте\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B0%5D\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B1%5D\"\r\n\r\nsegment\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user\"\r\n\r\nuser-123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"chunking_strategy\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"include\"\r\n\r\nlogprobs\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B0%5D\"\r\n\r\nagent\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B1%5D\"\r\n\r\ncustomer\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_references\"\r\n\r\n<array>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\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://polza.ai/api/v1/audio/transcriptions"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\ndata:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA...\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwhisper-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nru\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nЭто разговор об искусственном интеллекте\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B0%5D\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B1%5D\"\r\n\r\nsegment\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user\"\r\n\r\nuser-123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"chunking_strategy\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"include\"\r\n\r\nlogprobs\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B0%5D\"\r\n\r\nagent\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B1%5D\"\r\n\r\ncustomer\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_references\"\r\n\r\n<array>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\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://polza.ai/api/v1/audio/transcriptions")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\ndata:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA...\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwhisper-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nru\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nЭто разговор об искусственном интеллекте\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B0%5D\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B1%5D\"\r\n\r\nsegment\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user\"\r\n\r\nuser-123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"chunking_strategy\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"include\"\r\n\r\nlogprobs\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B0%5D\"\r\n\r\nagent\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B1%5D\"\r\n\r\ncustomer\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_references\"\r\n\r\n<array>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://polza.ai/api/v1/audio/transcriptions")
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=\"file\"\r\n\r\ndata:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA...\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwhisper-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nru\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nЭто разговор об искусственном интеллекте\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B0%5D\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B1%5D\"\r\n\r\nsegment\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user\"\r\n\r\nuser-123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"chunking_strategy\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"include\"\r\n\r\nlogprobs\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B0%5D\"\r\n\r\nagent\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B1%5D\"\r\n\r\ncustomer\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_references\"\r\n\r\n<array>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"text": "Привет! Это тестовое сообщение.",
"language": "ru",
"duration": 10.5,
"segments": [
{
"id": 0,
"seek": 0,
"start": 0,
"end": 5.5,
"text": "Привет, мир!",
"tokens": [
1,
2,
3
],
"temperature": 0,
"avg_logprob": -0.5,
"compression_ratio": 1.2,
"no_speech_prob": 0.01
}
],
"words": [
{
"word": "Привет",
"start": 0,
"end": 0.5
}
],
"model": "whisper-1",
"usage": {
"durationSeconds": 10.5,
"cost": 0.01,
"cost_rub": 0.01
}
}POST Audio Transcriptions
Транскрибация аудио в текст (Speech-to-Text)
curl --request POST \
--url https://polza.ai/api/v1/audio/transcriptions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form 'file=data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA...' \
--form model=whisper-1 \
--form language=ru \
--form 'prompt=Это разговор об искусственном интеллекте' \
--form response_format=json \
--form temperature=0 \
--form 'timestamp_granularities[0]=word' \
--form 'timestamp_granularities[1]=segment' \
--form user=user-123 \
--form chunking_strategy=auto \
--form include=logprobs \
--form 'known_speaker_names[0]=agent' \
--form 'known_speaker_names[1]=customer' \
--form 'known_speaker_references=<array>' \
--form stream=falseimport requests
url = "https://polza.ai/api/v1/audio/transcriptions"
payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\ndata:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA...\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwhisper-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nru\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nЭто разговор об искусственном интеллекте\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B0%5D\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B1%5D\"\r\n\r\nsegment\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user\"\r\n\r\nuser-123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"chunking_strategy\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"include\"\r\n\r\nlogprobs\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B0%5D\"\r\n\r\nagent\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B1%5D\"\r\n\r\ncustomer\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_references\"\r\n\r\n<array>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\r\n-----011000010111000001101001--"
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "multipart/form-data"
}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const form = new FormData();
form.append('file', 'data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA...');
form.append('model', 'whisper-1');
form.append('language', 'ru');
form.append('prompt', 'Это разговор об искусственном интеллекте');
form.append('response_format', 'json');
form.append('temperature', '0');
form.append('timestamp_granularities[0]', 'word');
form.append('timestamp_granularities[1]', 'segment');
form.append('user', 'user-123');
form.append('chunking_strategy', 'auto');
form.append('include', 'logprobs');
form.append('known_speaker_names[0]', 'agent');
form.append('known_speaker_names[1]', 'customer');
form.append('known_speaker_references', '<array>');
form.append('stream', 'false');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://polza.ai/api/v1/audio/transcriptions', 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://polza.ai/api/v1/audio/transcriptions",
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=\"file\"\r\n\r\ndata:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA...\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwhisper-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nru\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nЭто разговор об искусственном интеллекте\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B0%5D\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B1%5D\"\r\n\r\nsegment\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user\"\r\n\r\nuser-123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"chunking_strategy\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"include\"\r\n\r\nlogprobs\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B0%5D\"\r\n\r\nagent\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B1%5D\"\r\n\r\ncustomer\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_references\"\r\n\r\n<array>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\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://polza.ai/api/v1/audio/transcriptions"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\ndata:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA...\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwhisper-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nru\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nЭто разговор об искусственном интеллекте\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B0%5D\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B1%5D\"\r\n\r\nsegment\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user\"\r\n\r\nuser-123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"chunking_strategy\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"include\"\r\n\r\nlogprobs\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B0%5D\"\r\n\r\nagent\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B1%5D\"\r\n\r\ncustomer\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_references\"\r\n\r\n<array>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\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://polza.ai/api/v1/audio/transcriptions")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\ndata:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA...\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwhisper-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nru\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nЭто разговор об искусственном интеллекте\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B0%5D\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B1%5D\"\r\n\r\nsegment\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user\"\r\n\r\nuser-123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"chunking_strategy\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"include\"\r\n\r\nlogprobs\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B0%5D\"\r\n\r\nagent\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B1%5D\"\r\n\r\ncustomer\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_references\"\r\n\r\n<array>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://polza.ai/api/v1/audio/transcriptions")
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=\"file\"\r\n\r\ndata:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA...\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwhisper-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\nru\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nЭто разговор об искусственном интеллекте\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B0%5D\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_granularities%5B1%5D\"\r\n\r\nsegment\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user\"\r\n\r\nuser-123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"chunking_strategy\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"include\"\r\n\r\nlogprobs\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B0%5D\"\r\n\r\nagent\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_names%5B1%5D\"\r\n\r\ncustomer\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"known_speaker_references\"\r\n\r\n<array>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"text": "Привет! Это тестовое сообщение.",
"language": "ru",
"duration": 10.5,
"segments": [
{
"id": 0,
"seek": 0,
"start": 0,
"end": 5.5,
"text": "Привет, мир!",
"tokens": [
1,
2,
3
],
"temperature": 0,
"avg_logprob": -0.5,
"compression_ratio": 1.2,
"no_speech_prob": 0.01
}
],
"words": [
{
"word": "Привет",
"start": 0,
"end": 0.5
}
],
"model": "whisper-1",
"usage": {
"durationSeconds": 10.5,
"cost": 0.01,
"cost_rub": 0.01
}
}/v1/media/{id} статус транскрипции нельзя, он вернёт ошибку RESULT_EXPIRED, даже когда текст готов.Доступные модели
| Модель | ID | Описание |
|---|---|---|
| Whisper 1 | openai/whisper-1 | Классическая модель OpenAI (по умолчанию). Поддерживает verbose_json, srt, vtt, пословные/посегментные таймстампы |
| Whisper Large V3 | openai/whisper-large-v3 | Улучшенная multilingual-модель OpenAI. Форматы: json, text, verbose_json |
| Whisper Large V3 Turbo | openai/whisper-large-v3-turbo | Ускоренная версия Large V3. Форматы: json, text, verbose_json |
| GPT-4o Transcribe | openai/gpt-4o-transcribe | Высокое качество. Форматы: json, text. Поддерживает include: ["logprobs"] |
| GPT-4o Mini Transcribe | openai/gpt-4o-mini-transcribe | Быстрая/дешёвая. Форматы: json, text. Поддерживает include: ["logprobs"] |
| Google Chirp 3 | google/chirp-3 | STT от Google. Форматы: json, text |
| Qwen3 ASR Flash | qwen/qwen3-asr-flash-2026-02-10 | Быстрая multilingual-модель от Qwen. Форматы: json, text |
| Voxtral Mini Transcribe | mistralai/voxtral-mini-transcribe | STT от Mistral AI. Форматы: json, text |
| Parakeet TDT 0.6B v3 | nvidia/parakeet-tdt-0.6b-v3 | Лёгкая и быстрая модель от NVIDIA. Форматы: json, text |
| ElevenLabs STT | elevenlabs/speech-to-text | STT от ElevenLabs. Поддерживает диаризацию через diarized_json |
Тарификация STT — посекундная (per_second), по длительности аудио.
Асинхронные модели
| Модель | ID | Описание |
|---|---|---|
| Aiesa Транскрипция | aiesa/transcribe | Диаризация по спикерам, обычная очередь. 0,12 ₽/мин |
| Aiesa Транскрипция (Молния) | aiesa/transcribe-fast | То же, ускоренная обработка. 0,40 ₽/мин |
id задачи, результат забирается опросом статуса. Подробности и примеры — в руководстве Aiesa Транскрипция. Тарификация — по целым минутам, минимум одна минута.
Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
file | string | Да | Аудиофайл: base64 (data:audio/mp3;base64,...) или URL |
model | string | Нет | Модель транскрибации (по умолчанию openai/whisper-1) |
language | string | Нет | ISO-639-1: auto (по умолчанию), ru, en, de, fr, es, it, pt, pl, uk, nl, sv, da, fi, cs, sk, ro, bg, hr, el, tr, ar, hi, zh, ja, ko, id. Модели aiesa/* значение auto не принимают — для них либо укажите язык явно, либо не передавайте параметр |
temperature | number | Нет | Температура (0–1, по умолчанию 0). В основном для whisper-1 |
response_format | enum | Нет | json (по умолчанию), text, srt, verbose_json, vtt, diarized_json |
prompt | string | Нет | Контекст транскрипции, до ~2048 символов. Не поддерживается для gpt-4o-transcribe-diarize |
timestamp_granularities | string[] | Нет | word, segment (можно оба). Только whisper-1 + verbose_json |
chunking_strategy | 'auto' | object | Нет | Стратегия разбивки. Обязателен для gpt-4o-transcribe-diarize при аудио > 30 сек |
include | string[] | Нет | logprobs. Только gpt-4o-transcribe и gpt-4o-mini-transcribe |
known_speaker_names | string[] | Нет | Имена известных спикеров, до 4. Только для диаризации |
known_speaker_references | string[] | Нет | Аудио-референсы спикеров (data-URL). Только для диаризации |
stream | boolean | Нет | Стриминг ответа. Не поддерживается для whisper-1 |
user | string | Нет | Идентификатор конечного пользователя |
Допустимые response_format по моделям
openai/whisper-1→json,text,srt,verbose_json,vttopenai/gpt-4o-transcribe,openai/gpt-4o-mini-transcribe→json,textopenai/gpt-4o-transcribe-diarize→json,text,diarized_jsonelevenlabs/speech-to-text→ стандартный набор +diarized_json
Объект chunking_strategy типа server_vad
| Поле | Тип | Диапазон | Назначение |
|---|---|---|---|
type | 'server_vad' | — | обязателен |
prefix_padding_ms | number | ≥ 0 | паддинг перед сегментом, мс |
silence_duration_ms | number | ≥ 0 | длительность тишины для разрыва, мс |
threshold | number | 0–1 | порог громкости (VAD) |
"chunking_strategy": "auto".
Диаризация (gpt-4o-transcribe-diarize)
Модельgpt-4o-transcribe-diarize возвращает разбивку по спикерам. Используйте response_format: "diarized_json".
chunking_strategy обязателен. Без него запрос вернёт ошибку 400.known_speaker_names— массив имён, до 4. Имена используются как метки спикеров.known_speaker_references— массив data-URL с короткими аудио-примерами тех же спикеров.
Поддерживаемые форматы файлов
MP3, WAV, M4A, FLAC, OGG, WebM.Примеры
curl -X POST "https://polza.ai/api/v1/audio/transcriptions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/whisper-1",
"file": "BASE64_ENCODED_AUDIO",
"language": "ru"
}'
import requests
import base64
with open('audio.mp3', 'rb') as f:
audio_base64 = base64.b64encode(f.read()).decode('utf-8')
response = requests.post(
'https://polza.ai/api/v1/audio/transcriptions',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'model': 'openai/whisper-1',
'file': audio_base64,
'language': 'ru'
}
)
data = response.json()
print(data['text'])
const fs = require('fs');
const audioFile = fs.readFileSync('audio.mp3');
const audioBase64 = audioFile.toString('base64');
const response = await fetch('https://polza.ai/api/v1/audio/transcriptions', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'whisper-1',
file: audioBase64,
language: 'ru'
})
});
const data = await response.json();
console.log(data.text);
Пример с диаризацией
curl -X POST "https://polza.ai/api/v1/audio/transcriptions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-4o-transcribe-diarize",
"file": "BASE64_ENCODED_AUDIO",
"response_format": "diarized_json",
"chunking_strategy": "auto",
"known_speaker_names": ["agent", "client"]
}'
Ответ (200)
response_format: json (по умолчанию)
{
"text": "Привет! Это тестовое сообщение.",
"language": "ru",
"duration": 10.5,
"model": "whisper-1",
"usage": { "durationSeconds": 10.5, "cost": 0.11, "cost_rub": 0.11 }
}
response_format: verbose_json (только whisper-1)
{
"text": "Привет, мир!",
"language": "ru",
"duration": 5.5,
"model": "whisper-1",
"segments": [
{
"id": 0,
"seek": 0,
"start": 0.0,
"end": 5.5,
"text": "Привет, мир!",
"tokens": [1, 2, 3],
"temperature": 0,
"avg_logprob": -0.5,
"compression_ratio": 1.2,
"no_speech_prob": 0.01
}
],
"words": [
{ "word": "Привет", "start": 0.0, "end": 0.5 }
],
"usage": { "durationSeconds": 5.5, "cost": 0.06, "cost_rub": 0.06 }
}
words появляется, только если указан timestamp_granularities: ["word"].
response_format: diarized_json (gpt-4o-transcribe-diarize)
{
"task": "transcribe",
"duration": 27.4,
"text": "agent: Привет!\nclient: Здравствуйте!",
"segments": [
{
"id": "seg_001",
"start": 0.0,
"end": 4.7,
"text": "Привет, как дела?",
"speaker": "agent",
"type": "transcript.text.segment"
}
],
"model": "gpt-4o-transcribe-diarize",
"usage": { "durationSeconds": 27, "cost": 0.27, "cost_rub": 0.27 }
}
response_format: text / srt / vtt
Полеtext содержит результат — plain text либо готовые субтитры в формате SRT/VTT. Поля segments/words отсутствуют.
Поля ответа
| Поле | Описание |
|---|---|
text | Полный транскрибированный текст (для diarized_json — со спикерами) |
language | Определённый язык (ISO-639-1) |
duration | Длительность аудио в секундах |
segments | Сегменты с таймкодами (для verbose_json и diarized_json) |
words | Слова с таймкодами (при timestamp_granularities: ["word"]) |
usage | Использование: durationSeconds, cost_rub, cost |
Ответ асинхронных моделей (aiesa/*)
Асинхронные модели вместо текста возвращают идентификатор задачи:
{
"id": "gen_1234567890123456789",
"object": "transcription",
"status": "processing",
"model": "aiesa/transcribe"
}
curl "https://polza.ai/api/v1/audio/transcriptions/gen_1234567890123456789" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"id": "gen_1234567890123456789",
"object": "transcription",
"status": "completed",
"text": "Добрый день, начнём совещание. Да, все на связи.",
"duration": 15,
"segments": [
{
"speaker": "SPEAKER_01",
"text": "Добрый день, начнём совещание.",
"start": 0,
"end": 7,
"startTime": "00:00:00",
"endTime": "00:00:07"
}
]
}
| Поле | Описание |
|---|---|
status | processing, completed или failed |
text | Полная расшифровка (при completed) |
duration | Длительность аудио в секундах |
segments | Реплики по спикерам: speaker, text, start/end, startTime/endTime |
error | Описание ошибки при status: failed |
response_format на этих моделях не применяется — диаризация всегда приходит в segments. Подробнее: Aiesa Транскрипция.Авторизации
API ключ передаётся в заголовке: Authorization: Bearer <POLZA_AI_API_KEY>
Тело
Аудио файл в формате base64 (data:audio/mp3;base64,...) или URL
"data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA..."
ID модели для транскрипции
"whisper-1"
Язык аудио в формате ISO-639-1 (например: ru, en, de)
"ru"
Промпт для улучшения контекста транскрипции
"Это разговор об искусственном интеллекте"
Формат ответа
json, text, srt, verbose_json, vtt, diarized_json Температура сэмплирования (0-1)
0 <= x <= 10
Granularity для временных меток (только для verbose_json)
word, segment ["word", "segment"]
Уникальный идентификатор конечного пользователя для отслеживания и предотвращения злоупотреблений
"user-123"
Chunking strategy для разбивки аудио (обязателен для gpt-4o-transcribe-diarize при >30 сек)
auto "auto"
Дополнительная информация в ответе (logprobs)
logprobs ["logprobs"]
Имена известных спикеров (до 4)
["agent", "customer"]
Аудио референсы для известных спикеров (data URLs)
Стриминг ответа (не поддерживается для whisper-1)
false
Ответ
Транскрибированный текст
"Привет! Это тестовое сообщение."
Определенный язык аудио (ISO-639-1)
"ru"
Длительность аудио в секундах
10.5
Сегменты с таймстампами (для verbose_json)
Show child attributes
Show child attributes
Words с таймстампами (для verbose_json с word granularity)
Show child attributes
Show child attributes
ID использованной модели
"whisper-1"
Информация об использовании
{
"durationSeconds": 10.5,
"cost": 0.01,
"cost_rub": 0.01
}
Была ли эта страница полезной?