curl --request POST \
--url https://api.batch.slng.ai/v1/batch/jobs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input_url": "<string>",
"transcription_config": {
"language": "en",
"operating_point": "enhanced",
"diarization": "none",
"domain": "<string>",
"output_locale": "<string>",
"enable_entities": true,
"additional_vocab": [
{
"content": "<string>",
"sounds_like": [
"<string>"
]
}
]
},
"job_id": "<string>",
"model_code": "slng/speechmatics/batch:15.0.0",
"metadata": {},
"tracking": {
"title": "Meeting recording",
"reference": "ref-123",
"tags": [
"meeting",
"q1-review"
],
"details": "Q1 planning session"
},
"output_config": {
"srt_overrides": {
"max_line_length": 80,
"max_lines": 2
}
}
}
'import requests
url = "https://api.batch.slng.ai/v1/batch/jobs"
payload = {
"input_url": "<string>",
"transcription_config": {
"language": "en",
"operating_point": "enhanced",
"diarization": "none",
"domain": "<string>",
"output_locale": "<string>",
"enable_entities": True,
"additional_vocab": [
{
"content": "<string>",
"sounds_like": ["<string>"]
}
]
},
"job_id": "<string>",
"model_code": "slng/speechmatics/batch:15.0.0",
"metadata": {},
"tracking": {
"title": "Meeting recording",
"reference": "ref-123",
"tags": ["meeting", "q1-review"],
"details": "Q1 planning session"
},
"output_config": { "srt_overrides": {
"max_line_length": 80,
"max_lines": 2
} }
}
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({
input_url: '<string>',
transcription_config: {
language: 'en',
operating_point: 'enhanced',
diarization: 'none',
domain: '<string>',
output_locale: '<string>',
enable_entities: true,
additional_vocab: [{content: '<string>', sounds_like: ['<string>']}]
},
job_id: '<string>',
model_code: 'slng/speechmatics/batch:15.0.0',
metadata: {},
tracking: {
title: 'Meeting recording',
reference: 'ref-123',
tags: ['meeting', 'q1-review'],
details: 'Q1 planning session'
},
output_config: {srt_overrides: {max_line_length: 80, max_lines: 2}}
})
};
fetch('https://api.batch.slng.ai/v1/batch/jobs', 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.batch.slng.ai/v1/batch/jobs",
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([
'input_url' => '<string>',
'transcription_config' => [
'language' => 'en',
'operating_point' => 'enhanced',
'diarization' => 'none',
'domain' => '<string>',
'output_locale' => '<string>',
'enable_entities' => true,
'additional_vocab' => [
[
'content' => '<string>',
'sounds_like' => [
'<string>'
]
]
]
],
'job_id' => '<string>',
'model_code' => 'slng/speechmatics/batch:15.0.0',
'metadata' => [
],
'tracking' => [
'title' => 'Meeting recording',
'reference' => 'ref-123',
'tags' => [
'meeting',
'q1-review'
],
'details' => 'Q1 planning session'
],
'output_config' => [
'srt_overrides' => [
'max_line_length' => 80,
'max_lines' => 2
]
]
]),
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.batch.slng.ai/v1/batch/jobs"
payload := strings.NewReader("{\n \"input_url\": \"<string>\",\n \"transcription_config\": {\n \"language\": \"en\",\n \"operating_point\": \"enhanced\",\n \"diarization\": \"none\",\n \"domain\": \"<string>\",\n \"output_locale\": \"<string>\",\n \"enable_entities\": true,\n \"additional_vocab\": [\n {\n \"content\": \"<string>\",\n \"sounds_like\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"job_id\": \"<string>\",\n \"model_code\": \"slng/speechmatics/batch:15.0.0\",\n \"metadata\": {},\n \"tracking\": {\n \"title\": \"Meeting recording\",\n \"reference\": \"ref-123\",\n \"tags\": [\n \"meeting\",\n \"q1-review\"\n ],\n \"details\": \"Q1 planning session\"\n },\n \"output_config\": {\n \"srt_overrides\": {\n \"max_line_length\": 80,\n \"max_lines\": 2\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.batch.slng.ai/v1/batch/jobs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input_url\": \"<string>\",\n \"transcription_config\": {\n \"language\": \"en\",\n \"operating_point\": \"enhanced\",\n \"diarization\": \"none\",\n \"domain\": \"<string>\",\n \"output_locale\": \"<string>\",\n \"enable_entities\": true,\n \"additional_vocab\": [\n {\n \"content\": \"<string>\",\n \"sounds_like\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"job_id\": \"<string>\",\n \"model_code\": \"slng/speechmatics/batch:15.0.0\",\n \"metadata\": {},\n \"tracking\": {\n \"title\": \"Meeting recording\",\n \"reference\": \"ref-123\",\n \"tags\": [\n \"meeting\",\n \"q1-review\"\n ],\n \"details\": \"Q1 planning session\"\n },\n \"output_config\": {\n \"srt_overrides\": {\n \"max_line_length\": 80,\n \"max_lines\": 2\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.batch.slng.ai/v1/batch/jobs")
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 \"input_url\": \"<string>\",\n \"transcription_config\": {\n \"language\": \"en\",\n \"operating_point\": \"enhanced\",\n \"diarization\": \"none\",\n \"domain\": \"<string>\",\n \"output_locale\": \"<string>\",\n \"enable_entities\": true,\n \"additional_vocab\": [\n {\n \"content\": \"<string>\",\n \"sounds_like\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"job_id\": \"<string>\",\n \"model_code\": \"slng/speechmatics/batch:15.0.0\",\n \"metadata\": {},\n \"tracking\": {\n \"title\": \"Meeting recording\",\n \"reference\": \"ref-123\",\n \"tags\": [\n \"meeting\",\n \"q1-review\"\n ],\n \"details\": \"Q1 planning session\"\n },\n \"output_config\": {\n \"srt_overrides\": {\n \"max_line_length\": 80,\n \"max_lines\": 2\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"job_id": "job8f3a1b2c4d5e6f7890abcdef12345678",
"transcription_config": {
"language": "en",
"operating_point": "enhanced",
"diarization": "none"
},
"input_s3_uri": "s3://slng-production-batch-input/inputs/job8f3a.../audio.wav",
"output_s3_prefix": "s3://slng-production-batch-output/outputs/job8f3a.../",
"upload": {
"url": "https://slng-production-batch-input.s3.amazonaws.com/inputs/job8f3a.../audio.wav?X-Amz-Algorithm=...",
"s3_key": "inputs/job8f3a.../audio.wav",
"s3_uri": "s3://slng-production-batch-input/inputs/job8f3a.../audio.wav",
"expires_in": 3600,
"headers": {
"Content-Type": "application/octet-stream"
}
}
}{
"job_id": "myjob123",
"status": "QUEUED"
}{
"error": "job_id must be alphanumeric"
}{
"error": "Invalid API key"
}{
"error": "Insufficient credits"
}{
"error": "Request body too large"
}{
"error": "Rate limit exceeded"
}{
"error": "Internal server error"
}Create batch job
Submit audio for asynchronous transcription via application/json. Provide exactly one input: a public HTTPS input_url, an s3_key from a preceding presign call, or inline input_base64. For the presigned-upload flow, the first call (mode: "presign") returns 200 OK with an upload URL — the job is not created until the follow-up call. All other submission paths return 202 Accepted with status: QUEUED.
curl --request POST \
--url https://api.batch.slng.ai/v1/batch/jobs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input_url": "<string>",
"transcription_config": {
"language": "en",
"operating_point": "enhanced",
"diarization": "none",
"domain": "<string>",
"output_locale": "<string>",
"enable_entities": true,
"additional_vocab": [
{
"content": "<string>",
"sounds_like": [
"<string>"
]
}
]
},
"job_id": "<string>",
"model_code": "slng/speechmatics/batch:15.0.0",
"metadata": {},
"tracking": {
"title": "Meeting recording",
"reference": "ref-123",
"tags": [
"meeting",
"q1-review"
],
"details": "Q1 planning session"
},
"output_config": {
"srt_overrides": {
"max_line_length": 80,
"max_lines": 2
}
}
}
'import requests
url = "https://api.batch.slng.ai/v1/batch/jobs"
payload = {
"input_url": "<string>",
"transcription_config": {
"language": "en",
"operating_point": "enhanced",
"diarization": "none",
"domain": "<string>",
"output_locale": "<string>",
"enable_entities": True,
"additional_vocab": [
{
"content": "<string>",
"sounds_like": ["<string>"]
}
]
},
"job_id": "<string>",
"model_code": "slng/speechmatics/batch:15.0.0",
"metadata": {},
"tracking": {
"title": "Meeting recording",
"reference": "ref-123",
"tags": ["meeting", "q1-review"],
"details": "Q1 planning session"
},
"output_config": { "srt_overrides": {
"max_line_length": 80,
"max_lines": 2
} }
}
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({
input_url: '<string>',
transcription_config: {
language: 'en',
operating_point: 'enhanced',
diarization: 'none',
domain: '<string>',
output_locale: '<string>',
enable_entities: true,
additional_vocab: [{content: '<string>', sounds_like: ['<string>']}]
},
job_id: '<string>',
model_code: 'slng/speechmatics/batch:15.0.0',
metadata: {},
tracking: {
title: 'Meeting recording',
reference: 'ref-123',
tags: ['meeting', 'q1-review'],
details: 'Q1 planning session'
},
output_config: {srt_overrides: {max_line_length: 80, max_lines: 2}}
})
};
fetch('https://api.batch.slng.ai/v1/batch/jobs', 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.batch.slng.ai/v1/batch/jobs",
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([
'input_url' => '<string>',
'transcription_config' => [
'language' => 'en',
'operating_point' => 'enhanced',
'diarization' => 'none',
'domain' => '<string>',
'output_locale' => '<string>',
'enable_entities' => true,
'additional_vocab' => [
[
'content' => '<string>',
'sounds_like' => [
'<string>'
]
]
]
],
'job_id' => '<string>',
'model_code' => 'slng/speechmatics/batch:15.0.0',
'metadata' => [
],
'tracking' => [
'title' => 'Meeting recording',
'reference' => 'ref-123',
'tags' => [
'meeting',
'q1-review'
],
'details' => 'Q1 planning session'
],
'output_config' => [
'srt_overrides' => [
'max_line_length' => 80,
'max_lines' => 2
]
]
]),
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.batch.slng.ai/v1/batch/jobs"
payload := strings.NewReader("{\n \"input_url\": \"<string>\",\n \"transcription_config\": {\n \"language\": \"en\",\n \"operating_point\": \"enhanced\",\n \"diarization\": \"none\",\n \"domain\": \"<string>\",\n \"output_locale\": \"<string>\",\n \"enable_entities\": true,\n \"additional_vocab\": [\n {\n \"content\": \"<string>\",\n \"sounds_like\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"job_id\": \"<string>\",\n \"model_code\": \"slng/speechmatics/batch:15.0.0\",\n \"metadata\": {},\n \"tracking\": {\n \"title\": \"Meeting recording\",\n \"reference\": \"ref-123\",\n \"tags\": [\n \"meeting\",\n \"q1-review\"\n ],\n \"details\": \"Q1 planning session\"\n },\n \"output_config\": {\n \"srt_overrides\": {\n \"max_line_length\": 80,\n \"max_lines\": 2\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.batch.slng.ai/v1/batch/jobs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input_url\": \"<string>\",\n \"transcription_config\": {\n \"language\": \"en\",\n \"operating_point\": \"enhanced\",\n \"diarization\": \"none\",\n \"domain\": \"<string>\",\n \"output_locale\": \"<string>\",\n \"enable_entities\": true,\n \"additional_vocab\": [\n {\n \"content\": \"<string>\",\n \"sounds_like\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"job_id\": \"<string>\",\n \"model_code\": \"slng/speechmatics/batch:15.0.0\",\n \"metadata\": {},\n \"tracking\": {\n \"title\": \"Meeting recording\",\n \"reference\": \"ref-123\",\n \"tags\": [\n \"meeting\",\n \"q1-review\"\n ],\n \"details\": \"Q1 planning session\"\n },\n \"output_config\": {\n \"srt_overrides\": {\n \"max_line_length\": 80,\n \"max_lines\": 2\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.batch.slng.ai/v1/batch/jobs")
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 \"input_url\": \"<string>\",\n \"transcription_config\": {\n \"language\": \"en\",\n \"operating_point\": \"enhanced\",\n \"diarization\": \"none\",\n \"domain\": \"<string>\",\n \"output_locale\": \"<string>\",\n \"enable_entities\": true,\n \"additional_vocab\": [\n {\n \"content\": \"<string>\",\n \"sounds_like\": [\n \"<string>\"\n ]\n }\n ]\n },\n \"job_id\": \"<string>\",\n \"model_code\": \"slng/speechmatics/batch:15.0.0\",\n \"metadata\": {},\n \"tracking\": {\n \"title\": \"Meeting recording\",\n \"reference\": \"ref-123\",\n \"tags\": [\n \"meeting\",\n \"q1-review\"\n ],\n \"details\": \"Q1 planning session\"\n },\n \"output_config\": {\n \"srt_overrides\": {\n \"max_line_length\": 80,\n \"max_lines\": 2\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"job_id": "job8f3a1b2c4d5e6f7890abcdef12345678",
"transcription_config": {
"language": "en",
"operating_point": "enhanced",
"diarization": "none"
},
"input_s3_uri": "s3://slng-production-batch-input/inputs/job8f3a.../audio.wav",
"output_s3_prefix": "s3://slng-production-batch-output/outputs/job8f3a.../",
"upload": {
"url": "https://slng-production-batch-input.s3.amazonaws.com/inputs/job8f3a.../audio.wav?X-Amz-Algorithm=...",
"s3_key": "inputs/job8f3a.../audio.wav",
"s3_uri": "s3://slng-production-batch-input/inputs/job8f3a.../audio.wav",
"expires_in": 3600,
"headers": {
"Content-Type": "application/octet-stream"
}
}
}{
"job_id": "myjob123",
"status": "QUEUED"
}{
"error": "job_id must be alphanumeric"
}{
"error": "Invalid API key"
}{
"error": "Insufficient credits"
}{
"error": "Request body too large"
}{
"error": "Rate limit exceeded"
}{
"error": "Internal server error"
}Authorizations
SLNG API key as Authorization: Bearer slng_cu_... (consumer) or slng_bt_... (batch). Legacy zpka_ keys are still accepted during migration.
Body
- URL input
- Presigned upload: request a URL
- Presigned upload: create the job
- Inline base64
HTTPS URL of the audio file to transcribe. Must be publicly accessible or a presigned URL.
Transcription settings.
Show child attributes
Show child attributes
Custom alphanumeric identifier for the job. Auto-generated if omitted.
^[a-zA-Z0-9]+$Model to use for transcription.
Arbitrary key-value metadata to attach to the job.
Metadata for organizing and filtering jobs.
Show child attributes
Show child attributes
Output format settings.
Show child attributes
Show child attributes
Response
Presign mode only. Returns a presigned upload URL; the job is not created yet. See the Batch guide for the full upload flow.
Job identifier to reuse in step 3.
Transcription settings.
Show child attributes
Show child attributes
s3://bucket/key of the future upload.
s3://bucket/outputs/<jobId>/ where transcripts will land.
Show child attributes
Show child attributes
Metadata for organizing and filtering jobs.
Show child attributes
Show child attributes
Output format settings.
Show child attributes
Show child attributes
Was this page helpful?