Submit batch transcription
curl --request POST \
--url https://api.soket.ai/transcribe/batch \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"batch_upload_id": "<string>",
"file_ids": [
"<string>"
],
"sources": [
{
"gcs_key": "<string>",
"url": "<string>",
"filename": "<string>"
}
]
}
'import requests
url = "https://api.soket.ai/transcribe/batch"
payload = {
"batch_upload_id": "<string>",
"file_ids": ["<string>"],
"sources": [
{
"gcs_key": "<string>",
"url": "<string>",
"filename": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
batch_upload_id: '<string>',
file_ids: ['<string>'],
sources: [{gcs_key: '<string>', url: '<string>', filename: '<string>'}]
})
};
fetch('https://api.soket.ai/transcribe/batch', 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.soket.ai/transcribe/batch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'batch_upload_id' => '<string>',
'file_ids' => [
'<string>'
],
'sources' => [
[
'gcs_key' => '<string>',
'url' => '<string>',
'filename' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.soket.ai/transcribe/batch"
payload := strings.NewReader("{\n \"batch_upload_id\": \"<string>\",\n \"file_ids\": [\n \"<string>\"\n ],\n \"sources\": [\n {\n \"gcs_key\": \"<string>\",\n \"url\": \"<string>\",\n \"filename\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
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.soket.ai/transcribe/batch")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"batch_upload_id\": \"<string>\",\n \"file_ids\": [\n \"<string>\"\n ],\n \"sources\": [\n {\n \"gcs_key\": \"<string>\",\n \"url\": \"<string>\",\n \"filename\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.soket.ai/transcribe/batch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"batch_upload_id\": \"<string>\",\n \"file_ids\": [\n \"<string>\"\n ],\n \"sources\": [\n {\n \"gcs_key\": \"<string>\",\n \"url\": \"<string>\",\n \"filename\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"batch_id": "<string>",
"total_jobs": 123,
"estimated_audio_seconds": 123,
"estimated_completion_seconds": 123,
"jobs": [
{
"file_id": "<string>",
"filename": "<string>",
"batch_id": "<string>",
"status": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Batch Transcription
Submit batch transcription
Submit a batch for transcription using a completed batch_upload_id, specific file_ids from prior uploads, and/or an explicit sources list with gcs_key or url per item.
POST
/
batch
Submit batch transcription
curl --request POST \
--url https://api.soket.ai/transcribe/batch \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"batch_upload_id": "<string>",
"file_ids": [
"<string>"
],
"sources": [
{
"gcs_key": "<string>",
"url": "<string>",
"filename": "<string>"
}
]
}
'import requests
url = "https://api.soket.ai/transcribe/batch"
payload = {
"batch_upload_id": "<string>",
"file_ids": ["<string>"],
"sources": [
{
"gcs_key": "<string>",
"url": "<string>",
"filename": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
batch_upload_id: '<string>',
file_ids: ['<string>'],
sources: [{gcs_key: '<string>', url: '<string>', filename: '<string>'}]
})
};
fetch('https://api.soket.ai/transcribe/batch', 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.soket.ai/transcribe/batch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'batch_upload_id' => '<string>',
'file_ids' => [
'<string>'
],
'sources' => [
[
'gcs_key' => '<string>',
'url' => '<string>',
'filename' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.soket.ai/transcribe/batch"
payload := strings.NewReader("{\n \"batch_upload_id\": \"<string>\",\n \"file_ids\": [\n \"<string>\"\n ],\n \"sources\": [\n {\n \"gcs_key\": \"<string>\",\n \"url\": \"<string>\",\n \"filename\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
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.soket.ai/transcribe/batch")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"batch_upload_id\": \"<string>\",\n \"file_ids\": [\n \"<string>\"\n ],\n \"sources\": [\n {\n \"gcs_key\": \"<string>\",\n \"url\": \"<string>\",\n \"filename\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.soket.ai/transcribe/batch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"batch_upload_id\": \"<string>\",\n \"file_ids\": [\n \"<string>\"\n ],\n \"sources\": [\n {\n \"gcs_key\": \"<string>\",\n \"url\": \"<string>\",\n \"filename\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"batch_id": "<string>",
"total_jobs": 123,
"estimated_audio_seconds": 123,
"estimated_completion_seconds": 123,
"jobs": [
{
"file_id": "<string>",
"filename": "<string>",
"batch_id": "<string>",
"status": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Submit a batch of audio for transcription. Accepts a JSON body with:
batch_upload_id(optional): include all completed files from one upload requestfile_ids(optional): list of specificfile_idstrings from priorPOST /files/uploadresponsessources(optional): explicit list of GCS keys or URLs
batch_upload_id, file_ids, or sources must resolve to at least one file. All fields can be combined in a single request.
Each source item must include either gcs_key or url, and may include an optional filename.
Uploaded files referenced by batch_upload_id or file_ids must have upload_status: "completed". If uploads are still in progress, the API returns 409.
When a file is selected via file_ids, the same file_id from the upload response is reused for transcription results.
Example (from completed upload)
curl -X POST "https://api.soket.ai/transcribe/batch" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"batch_upload_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}'
Example (specific file_ids)
curl -X POST "https://api.soket.ai/transcribe/batch" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"file_ids": [
"1374132b-b5db-4ec3-9cf1-f61f982e89b0",
"2485243c-c6ec-5fd4-0dg2-g72g093f90c1"
]
}'
Example (upload batch + specific files + URLs)
curl -X POST "https://api.soket.ai/transcribe/batch" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"batch_upload_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"file_ids": ["3596354d-d7fd-6ge5-1eh3-h83h104g01d2"],
"sources": [
{"url": "https://example.com/audio3.wav", "filename": "audio3.wav"}
]
}'
Typical response
{
"batch_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"total_jobs": 3,
"estimated_audio_seconds": 290.0,
"estimated_completion_seconds": 21.7,
"jobs": [
{
"file_id": "1374132b-b5db-4ec3-9cf1-f61f982e89b0",
"filename": "audio1.wav",
"batch_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"status": "queued"
}
]
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json