Skip to main content
Speech to text is a machine learning technology that provides the ability to transform individual or conversational spoken audio into text. Such speech-to-text capability has been used in medical transcription workflows for decades. While the capabilities and opportunities for real-time audio streaming are vast, audio file-based transcription is still necessary in many clinical workflows.

This page explains key functionality provided by the Corti audio file processing via the /recordings and /transcripts endpoints.API specifications: Upload recording and create transcript.
Transcript creation is a synchronous-to-asynchronous workflow - see below how to upload audio files, create, and receive transcripts.Read more about real-time audio streaming, here - /transcribe and /streams.

How it Works

  • Each interaction may have more than one audio file and transcript associated with it. Audio files up to 60 min in total duration, or 150 MB in total size, may be used.
  • By default, the transcripts endpoint operates synchronous-to-asynchronous: requests will process synchronously for 25 seconds before timeout, upon which processing will continue asynchronously.
    • In the latter scenario, a partial or empty transcript with status=processing will be returned with a location header that can be used to retrieve the completed transcript.
    • The client can poll the /transcripts endpoint (GET /interactions/{id}/transcripts/{transcriptId}/status) for transcript status monitoring:
      • 202 OK with status processing, completed, or failed
      • 404 Not Found if the interactionId or transcriptId are invalid
    • The completed transcript can be retrieved via the Get Transcript request (GET /interactions/{id}/transcripts/{transcriptId}/)
  • Set the async parameter to true to receive the location header immediately: client does not need to wait for the sync timeout window, request will process asynchronously.

Using the API

1
Review supported audio file requirements here.
Corti speech to text supports file transcoding; however, it is recommended to follow the outlined best practices for a consistent and reliable experience.
2
Create an Interaction: POST:/interactions/
Note the interactionId included in the response that will be used for aggregating the audio file and transcript assets.
// Replace these with your values
const ASSIGNED_USER_ID = "<uuid-of-your-choosing>";
const IDENTIFIER = "<id-of-your-choosing>";

const now = new Date();

const { interactionId, websocketUrl } = await client.interactions.create({
  assignedUserId: ASSIGNED_USER_ID,
  encounter: {
    identifier: IDENTIFIER,
    status: "planned",
    type: "first_consultation",
    period: {
      startedAt: now,
      endedAt: now,
    },
    title: "Consultation",
  },
  patient: {
    identifier: "<string>",
    name: "<string>",
    gender: "male",
    birthDate: new Date("1990-01-15T00:00:00Z"),
    pronouns: "<string>",
  },
});
3
Upload an audio file: POST:/interactions/{id}/recordings/
Note the recordingId that will be used for transcript creation
import { createReadStream } from "fs";

// Replace these with your values
const INTERACTION_ID = "<your-interaction-id>";

const file = createReadStream("sample.mp3", { autoClose: true });
await client.recordings.upload(file, INTERACTION_ID);
4
Create the transcript: POST:/interactions/{id}/transcripts/
Each interaction may have more than one audio file and transcript associated with it. Audio files up to 60min in total duration, or 150MB in total size, are supported.
const { recordingId } = await uploadRecording(client, interactionId, "sample.mp3");

const transcript = await client.transcripts.create(interactionId, {
    recordingId: recordingId,
    primaryLanguage: "en"
});
5
Receive the transcript:
  • First, the transcript will process synchronously for a maximum of 25 seconds
  • If the audio file transcription takes longer than the 25 second synchronous processing timeout, then it will continue to process asynchronously.
    • In this scenario, an empty transcript will be returned with a location header that can be used to retrieve the final transcript via the transcriptId.
    • The client can poll the Get Transcript endpoint status (GET /interactions/{id}/transcripts/{transcriptId}/status) for transcript status (processing, completed, failed).
Use the List Transcripts endpoint to view all transcripts associated with an interaction, and completed transcripts can be retrieved via the Get Transcript endpoint.

Features

Click on the cards to learn more…

Languages

Corti speech to text is specifically designed for use in the healthcare domain. A tier system has been introduced to categorize functionality and performance that is available per language and endpoint. Languages in the Enhanced and Premier tiers have the utmost functionality and recognition accuracy - they’re the ones recommended for dictation use.

Audio Configuration

With support for mono or multi-channel audio, with live transcoding and a variety of file formats to choose from, don’t let the complexities fo audio capture and processing inhibit opportunities for real-time intelligence. Read more about our recommendations and best practices.

Punctuation

Punctuation is essential for coherent documentation. Setting the isDictation parameter to true in /transcripts requests enables spokenPunctuation functionality.

Diarization

Diarization is the process of segmenting an audio recording by speaker, assigning portions of speech to distinct identities (e.g., “Doctor,” “Patient”). This enables accurate transcription, attribution, and analysis of multi-speaker clinical conversations, but is not required for effective AI scribing or workflow speech-enablement.

Formatting

coming soon
Speech to text can be used to create a verbatim transcript of the audio; however, some content is not documented in the same manner as it is verbalized. The formatting features provide control over how key information should for represented in the textual output.
This feature is currently supported on /transcribe and /streams, but coming soon to /transcripts.

Please contact us for more information or help.