For AI agents: a documentation index is available at /llms.txt. Markdown versions of all pages can be requested by appending `.md` to the URL, or by setting the `Accept` header to `text/markdown`.
Skip to main content
Speech to TextBatch transcription

Output

Learn about the supported output formats for the Speechmatics Batch API

Transcription jobs are processed asynchronously by default: you submit a job, then check its status to see whether it has completed. To block for the result in a single request instead, use Synchronous transcription.

You can also configure notifications to be sent to a webhook when a job is completed. See Notifications for more details.

Check single job status​

If you wish to retrieve a particular job, you can do so using the job ID for up to 7 days, after which time it will be automatically deleted in accordance with our Data Retention Policy.

You can make a GET request to check the status of a job as follows:

# $JOB_ID is from the submit command output
curl -L -X GET "https://eu1.asr.api.speechmatics.com/v2/jobs/$JOB_ID" \
-H "Authorization: Bearer $API_KEY"

This endpoint applies a short default wait, returning as soon as the job reaches a terminal state. Pass the wait query parameter to control the duration, or wait=0 to return immediately. See Synchronous transcription.

The response is a JSON object containing details of the job, with the status field showing whether the job is still processing or not. The possible values are:

  • running: The job is still processing.
  • done: The job has been completed. The transcript is available for download at the /jobs/:jobid/transcript endpoint.
  • rejected: Transcription was not possible. This will be accompanied by an error message.

An example response looks like this:

HTTP/1.1 200 OK
Content-Type: application/json
{
"job": {
"config": {
"notification_config": null,
"transcription_config": {
"additional_vocab": null,
"channel_diarization_labels": null,
"language": "en"
},
"type": "transcription"
},
"created_at": "2019-01-17T17:50:54.113Z",
"data_name": "example.wav",
"duration": 275,
"id": "yjbmf9kqub",
"status": "running"
}
}

Check multiple job statuses​

You can retrieve the status of the 100 most recent jobs submitted in the past 7 days. This is done by making a GET request without a Job ID as follows:

curl -L -X GET "https://eu1.asr.api.speechmatics.com/v2/jobs/" \
-H "Authorization: Bearer $API_KEY"

A deleted job is not included in the list unless you request it explicitly, as described in the API reference.

Load and process the transcript​

The transcript endpoint returns plain text, JSON, or SRT. Request the format using the format query parameter. See the API reference.

A few useful things to know about transcript formats:

  • The default format is JSON.
  • Use the format=txt query parameter to get the transcript in plain text. Useful for quick access to the transcript.
  • Use the format=srt query parameter to get the transcript in SRT format. Useful for displaying the transcript in a subtitle file.
  • To access other data, including word timestamps, translations, and speech intelligence features, use the default JSON format.

Like the job status endpoint, this endpoint applies a short default wait. Pass the wait query parameter alongside format to block for the transcript instead of polling. See Synchronous transcription.

Transcript response schema​

Below is the schema for the transcript response when using the default JSON format.

Refer to the API reference for further details.

format
string

Speechmatics JSON transcript format version number.

job
JobInfo

Summary information about an ASR job, to support identification and tracking.

metadata
RecognitionMetadata

Summary information about the output from an ASR job, comprising the job type and configuration parameters used when generating the output.

results
RecognitionResult[]

An ASR job output item. The primary item types are word and punctuation. Other item types may be present, for example to provide semantic information of different forms.

speakers
SpeakersResultItem[]
optional

List of unique speaker identifiers detected in the transcript.

translations
Record<string, TranslationSentence[]>
optional

Translations of the transcript into other languages. It is a map of ISO language codes to arrays of translated sentences. Configured using translation_config.

summary
SummarizationResult
optional

Summary of the transcript, configured using summarization_config.

sentiment_analysis
SentimentAnalysisResult
optional

The main object that holds sentiment analysis data.

topics
TopicDetectionResult
optional

Main object that holds topic detection results.

chapters
AutoChaptersResult
optional

An array of objects that represent summarized chapters of the transcript

audio_events
AudioEventItem[]
optional

Timestamped audio events, only set if audio_events_config is in the config

audio_event_summary
object
optional

Summary statistics per event type, keyed by type, e.g. music

Example response​

The following is an example of a transcript response, which you should see as an output of the provided example.wav file used in the code samples in the quickstart.

{
"format": "2.9",
"job": {
"created_at": "2025-06-30T11:43:54.135Z",
"data_name": "example.wav",
"duration": 15,
"id": "650krlru2e"
},
"metadata": {
"created_at": "2025-06-30T11:44:08.133526Z",
"language_pack_info": {
"adapted": false,
"itn": true,
"language_description": "English",
"word_delimiter": " ",
"writing_direction": "left-to-right"
},
"orchestrator_version": "2025.06.28+1eb4127132+13.4.0",
"transcription_config": {
"language": "en",
"model": "enhanced"
},
"type": "transcription"
},
"results": [
{
"alternatives": [
{
"confidence": 1,
"content": "Welcome",
"language": "en",
"speaker": "UU"
}
],
"end_time": 1.36,
"start_time": 0.72,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "to",
"language": "en",
"speaker": "UU"
}
],
"end_time": 1.44,
"start_time": 1.36,
"type": "word"
},
{
"alternatives": [
{
"confidence": 0.98,
"content": "Speechmatics",
"language": "en",
"speaker": "UU"
}
],
"end_time": 2.44,
"start_time": 1.48,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": ".",
"language": "en",
"speaker": "UU"
}
],
"attaches_to": "previous",
"end_time": 2.44,
"is_eos": true,
"start_time": 2.44,
"type": "punctuation"
},
{
"alternatives": [
{
"confidence": 1,
"content": "We're",
"language": "en",
"speaker": "UU"
}
],
"end_time": 3.24,
"start_time": 3.04,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "delighted",
"language": "en",
"speaker": "UU"
}
],
"end_time": 3.64,
"start_time": 3.24,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "that",
"language": "en",
"speaker": "UU"
}
],
"end_time": 3.8,
"start_time": 3.64,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "you've",
"language": "en",
"speaker": "UU"
}
],
"end_time": 4.04,
"start_time": 3.8,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "decided",
"language": "en",
"speaker": "UU"
}
],
"end_time": 4.44,
"start_time": 4.04,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "to",
"language": "en",
"speaker": "UU"
}
],
"end_time": 4.56,
"start_time": 4.44,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "try",
"language": "en",
"speaker": "UU"
}
],
"end_time": 4.92,
"start_time": 4.56,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "our",
"language": "en",
"speaker": "UU"
}
],
"end_time": 5.2,
"start_time": 4.92,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "speech",
"language": "en",
"speaker": "UU"
}
],
"end_time": 5.48,
"start_time": 5.2,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "to",
"language": "en",
"speaker": "UU"
}
],
"end_time": 5.6,
"start_time": 5.48,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "text",
"language": "en",
"speaker": "UU"
}
],
"end_time": 5.92,
"start_time": 5.6,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "software",
"language": "en",
"speaker": "UU"
}
],
"end_time": 6.56,
"start_time": 5.92,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "to",
"language": "en",
"speaker": "UU"
}
],
"end_time": 7.16,
"start_time": 7.04,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "get",
"language": "en",
"speaker": "UU"
}
],
"end_time": 7.4,
"start_time": 7.2,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "going",
"language": "en",
"speaker": "UU"
}
],
"end_time": 7.88,
"start_time": 7.4,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": ".",
"language": "en",
"speaker": "UU"
}
],
"attaches_to": "previous",
"end_time": 7.88,
"is_eos": true,
"start_time": 7.88,
"type": "punctuation"
},
{
"alternatives": [
{
"confidence": 1,
"content": "Just",
"language": "en",
"speaker": "UU"
}
],
"end_time": 8.12,
"start_time": 7.92,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "create",
"language": "en",
"speaker": "UU"
}
],
"end_time": 8.44,
"start_time": 8.12,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "an",
"language": "en",
"speaker": "UU"
}
],
"end_time": 8.64,
"start_time": 8.48,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "API",
"language": "en",
"speaker": "UU"
}
],
"end_time": 9,
"start_time": 8.64,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "key",
"language": "en",
"speaker": "UU"
}
],
"end_time": 9.36,
"start_time": 9,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "and",
"language": "en",
"speaker": "UU"
}
],
"end_time": 9.6,
"start_time": 9.36,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "submit",
"language": "en",
"speaker": "UU"
}
],
"end_time": 9.88,
"start_time": 9.6,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "a",
"language": "en",
"speaker": "UU"
}
],
"end_time": 10.04,
"start_time": 9.92,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "transcription",
"language": "en",
"speaker": "UU"
}
],
"end_time": 10.6,
"start_time": 10.04,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "request",
"language": "en",
"speaker": "UU"
}
],
"end_time": 11.04,
"start_time": 10.6,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "to",
"language": "en",
"speaker": "UU"
}
],
"end_time": 11.12,
"start_time": 11.04,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "our",
"language": "en",
"speaker": "UU"
}
],
"end_time": 11.32,
"start_time": 11.16,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "API",
"language": "en",
"speaker": "UU"
}
],
"end_time": 11.88,
"start_time": 11.32,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": ".",
"language": "en",
"speaker": "UU"
}
],
"attaches_to": "previous",
"end_time": 11.88,
"is_eos": true,
"start_time": 11.88,
"type": "punctuation"
},
{
"alternatives": [
{
"confidence": 1,
"content": "We",
"language": "en",
"speaker": "UU"
}
],
"end_time": 12.36,
"start_time": 12.24,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "hope",
"language": "en",
"speaker": "UU"
}
],
"end_time": 12.56,
"start_time": 12.4,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "you'll",
"language": "en",
"speaker": "UU"
}
],
"end_time": 12.8,
"start_time": 12.56,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "be",
"language": "en",
"speaker": "UU"
}
],
"end_time": 12.88,
"start_time": 12.8,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "very",
"language": "en",
"speaker": "UU"
}
],
"end_time": 13.08,
"start_time": 12.88,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "impressed",
"language": "en",
"speaker": "UU"
}
],
"end_time": 13.4,
"start_time": 13.08,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "by",
"language": "en",
"speaker": "UU"
}
],
"end_time": 13.56,
"start_time": 13.4,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "the",
"language": "en",
"speaker": "UU"
}
],
"end_time": 13.68,
"start_time": 13.56,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "results",
"language": "en",
"speaker": "UU"
}
],
"end_time": 14.36,
"start_time": 13.68,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": ".",
"language": "en",
"speaker": "UU"
}
],
"attaches_to": "previous",
"end_time": 14.36,
"is_eos": true,
"start_time": 14.36,
"type": "punctuation"
},
{
"alternatives": [
{
"confidence": 1,
"content": "Thank",
"language": "en",
"speaker": "UU"
}
],
"end_time": 15.08,
"start_time": 14.8,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": "you",
"language": "en",
"speaker": "UU"
}
],
"end_time": 15.4,
"start_time": 15.08,
"type": "word"
},
{
"alternatives": [
{
"confidence": 1,
"content": ".",
"language": "en",
"speaker": "UU"
}
],
"attaches_to": "previous",
"end_time": 15.4,
"is_eos": true,
"start_time": 15.4,
"type": "punctuation"
}
]
}

Multilingual transcript output​

For a Melia 1 job, the language property on each word reflects the language detected for that word, so it can change across the transcript. For Enhanced and Standard jobs, which transcribe one selected language, the same language is reported for every word.

The example below shows two words in different languages within one transcript:

{
"results": [
{
"alternatives": [
{ "content": "Hello", "confidence": 0.98, "language": "en" }
],
"start_time": 0.20,
"end_time": 0.52,
"type": "word"
},
{
"alternatives": [
{ "content": "مرحبا", "confidence": 0.95, "language": "ar" }
],
"start_time": 0.60,
"end_time": 1.04,
"type": "word"
}
]
}

For multilingual transcripts, language_pack_info reports the word delimiter and writing direction per language rather than for a single language pack:

{
"metadata": {
"language_pack_info": {
"per_language_word_delimiters": {
"en": " ",
"ar": " "
},
"per_language_writing_direction": {
"en": "left-to-right",
"ar": "right-to-left"
}
}
}
}

per_language_word_delimiters gives the word delimiter for each language in the transcript, and per_language_writing_direction gives its writing direction.

Tracking metadata​

You can optionally add tracking metadata to a job when you create it. This can be used for tracking the job through your own management workflow.

The metadata will be returned when you check job status, or get the transcript for a transcription job.

The metadata object can contain the following properties:

tracking​

title
string
optional

The title of the job.

reference
string
optional

External system reference.

tags
string[]
optional
details
object
optional

Customer-defined JSON structure.

For example:

{
"type": "transcription",
"transcription_config": {
"model": "enhanced",
"language": "en"
},
"tracking": {
"title": "ACME Q12018 Statement",
"reference": "/data/clients/ACME/statements/segs/2018Q1-seg8",
"tags": [
"quick-review",
"segment"
],
"details": {
"user_type": "agent",
"client": {
"name": "ACME Corp",
"type": "enterprise"
},
"seg_start": 963.201,
"seg_end": 1091.481
}
}
}

App usage tracking​

First, please contact Support to enable this feature.

For integrations where customers use their own Speechmatics API keys, gain insights into application usage by aggregating data on unique users, processing hours, languages used, and more. Once enabled, use the sm-app query parameter when starting a job. For example:

APP_ID="YourAppID"
API_KEY="YOUR_API_KEY"
PATH_TO_FILE="example.wav"

curl -L -X POST "https://eu1.asr.api.speechmatics.com/v2/jobs/?sm-app=${APP_ID}" \
-H "Authorization: Bearer ${API_KEY}" \
-F data_file=@${PATH_TO_FILE} \
-F config='{"type": "transcription","transcription_config": { "model": "enhanced","language": "en" }}'

Next steps​