Speech to Text API

Speech to Text for the complexity of healthcare

Fast, accurate, and ready to handle clinical conversations. Power any voice-based healthcare workflow with the most accurate medical ASR accessible via API.

Speech to Text API

Speech to Text for the complexity of healthcare

Fast, accurate, and ready to handle clinical conversations. Power any voice-based healthcare workflow with the most accurate medical ASR accessible via API.

Trusted for > 1 million interactions every week

Speech infrastructure for healthcare developers

curl --request POST \
  --url https://api.{environment}.corti.app/v2/interactions/{id}/transcripts/ \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'Tenant-Name: <tenant-name>' \
  --data '{
  "recordingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "primaryLanguage": "en",
  "isDictation": true,
  "isMultichannel": true,
  "diarize": true,
  "participants": [
    {
      "channel": 123,
      "role": "doctor"
    }
  ],
  "modelName": "base"
}'
Copy
await client.transcripts.create("f47ac10b-58cc-4372-a567-0e02b2c3d479", {
    recordingId: "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    primaryLanguage: "en",
    modelName: "base"
});
Copy
import requests

url = "https://api.{environment}.corti.app/v2/interactions/{id}/transcripts/"

payload = {
    "recordingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "primaryLanguage": "en",
    "isDictation": True,
    "isMultichannel": True,
    "diarize": True,
    "participants": [
        {
            "channel": 123,
            "role": "doctor"
        }
    ],
    "modelName": "base"
}
headers = {
    "Tenant-Name": "<tenant-name>",
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
Copy
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.{environment}.corti.app/v2/interactions/{id}/transcripts/",
  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([
    'recordingId' => 'f47ac10b-58cc-4372-a567-0e02b2c3d479',
    'primaryLanguage' => 'en',
    'isDictation' => null,
    'isMultichannel' => null,
    'diarize' => null,
    'participants' => [
        [
                'channel' => 123,
                'role' => 'doctor'
        ]
    ],
    'modelName' => 'base'
  ]),
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer <token>",
    "Content-Type: application/json",
    "Tenant-Name: <tenant-name>"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
Copy
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.{environment}.corti.app/v2/interactions/{id}/transcripts/"

	payload := strings.NewReader("{\n  \"recordingId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n  \"primaryLanguage\": \"en\",\n  \"isDictation\": true,\n  \"isMultichannel\": true,\n  \"diarize\": true,\n  \"participants\": [\n    {\n      \"channel\": 123,\n      \"role\": \"doctor\"\n    }\n  ],\n  \"modelName\": \"base\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Tenant-Name", "<tenant-name>")
	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(res)
	fmt.Println(string(body))

}
Copy
HttpResponse<String> response = Unirest.post("https://api.{environment}.corti.app/v2/interactions/{id}/transcripts/")
  .header("Tenant-Name", "<tenant-name>")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"recordingId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n  \"primaryLanguage\": \"en\",\n  \"isDictation\": true,\n  \"isMultichannel\": true,\n  \"diarize\": true,\n  \"participants\": [\n    {\n      \"channel\": 123,\n      \"role\": \"doctor\"\n    }\n  ],\n  \"modelName\": \"base\"\n}")
  .asString();
Copy
import { CortiClient, CortiEnvironment } from "@corti/sdk";

const cortiClient = new CortiClient({
    tenantName: "YOUR_TENANT_NAME",
    environment: CortiEnvironment.BetaEu,
    auth: {
        accessToken: "YOUR_ACCESS_TOKEN"
    },
});

const transcribeSocket = await cortiClient.transcribe.connect();
Copy

Unmatched medical domain accuracy

Our speech to text models are validated on one of the industry’s largest medical lexicons, covering over 150,000 terms. From drug names to anatomical terminology and specialty-specific language, Corti is optimized for precise accuracy in real-world clinical settings.

By focusing exclusively on healthcare, our models achieve higher medical term recall and accuracy than general-purpose systems, ensuring that every diagnosis, treatment, and detail is captured reliably, whether in general practice or highly specialized care.

We continuously improve our models to keep pace with how fast our customers ship products. By delivering quarterly releases for each of our 14+ language models, and by listening closely to developer feedback, we ensure our technology evolves as quickly as the people who rely on it.

Unmatched medical domain accuracy

Our speech to text models are validated on one of the industry’s largest medical lexicons, covering over 150,000 terms. From drug names to anatomical terminology and specialty-specific language, Corti is optimized for precise accuracy in real-world clinical settings.

By focusing exclusively on healthcare, our models achieve higher medical term recall and accuracy than general-purpose systems, ensuring that every diagnosis, treatment, and detail is captured reliably, whether in general practice or highly specialized care.

We continuously improve our models to keep pace with how fast our customers ship products. By delivering quarterly releases for each of our 14+ language models, and by listening closely to developer feedback, we ensure our technology evolves as quickly as the people who rely on it.

Speech to Text capabilities

Punctuation

Improve readability with automatic punctuation added consistently across the transcript.

Commands

Allow users to speak or type short, predefined commands instead of navigating menus or typing manually.

Preview results

Show interim transcripts in real time to validate accuracy early and keep users confident while dictating.

Languages

Capture reliable transcripts across languages your patients and clinicians prefer to speak.

Diarization

Separate speakers automatically, making each voice clear and easy to identify in transcripts.

Multi-channel

Capture audio from each channel independently to produce cleaner and more accurate transcripts.

Formatting (beta)

Standardize spoken dates, times, and numbers into precise, structured medical notation.

Vocabulary*

Expand medical term recognition to improve accuracy for specialized domains further.

Speech to Text capabilities

Notification Message Alert Streamline Icon: https://streamlinehq.com

Punctuation

Improve readability with automatic punctuation added consistently across the transcript.

Read more in docs →
Notification Application 2 Streamline Icon: https://streamlinehq.com

Commands

Allow users to speak or type short, predefined commands instead of navigating menus or typing manually.

Read more in docs →
Visible Streamline Icon: https://streamlinehq.com

Preview results

Show interim transcripts in real time to validate accuracy early and keep users confident while dictating.

Read more in docs →
Earth 1 Streamline Icon: https://streamlinehq.com

Languages

Capture reliable transcripts across languages your patients and clinicians prefer to speak.

Read more in docs →
Chat Two Bubbles Oval Streamline Icon: https://streamlinehq.com

Diarization

Separate speakers automatically, making each voice clear and easy to identify in transcripts.

Split Vertical Streamline Icon: https://streamlinehq.com

Multi-channel

Capture audio from each channel independently to produce cleaner and more accurate transcripts.

Align Left Streamline Icon: https://streamlinehq.com

Formatting (beta)

Standardize spoken dates, times, and numbers into precise, structured medical notation.

Read more in docs →
Dictionary Language Book Streamline Icon: https://streamlinehq.com

Vocabulary*

Expand medical term recognition to improve accuracy for specialized domains further.

* Coming soon

Power any voice-based healthcare workflow

Upload in a batch or stream live

With support for real-time audio stream or asynchronous file processing, Corti speech to text has the flexibility to support any documentation workflow.

Capture medical language natively

Continuously trained on real-world clinical conversations, Corti’s models accurately handle medical terminology and abbreviations across languages and specialties. Accurate transcripts out of the box, without endless tuning or manual cleanup.

Diarize any transcript

Separate transcripts by speaker, support single- or multi-channel audio, and ensure proper punctuation and formatting. Corti turns every word into meaningful notes for continuity of care, revenue cycle management, and other downstream applications.

You're in command-and-control

Define custom commands to trigger actions when recognized. Automate workflows, insert templates, streamline EHR navigation, and more. How creative can you be when it comes to speech-enabling your application? 

“By adding Corti’s API directly into our platform, we’re giving customers the latest capabilities without forcing them to learn new systems or abandon familiar workflows.”
Dr. Thomas Brauner
CEO, Speech Processing Solutions

Now see what you can build

Real-time dictation

Let physicians speak naturally while Corti transcribes notes and letters fluently in the language of healthcare.

Real-time dictation

Ambient documentation

Transcribe patient conversations live with speaker attribution and fact extraction, so you can generate clean clinical notes.

Ambient documentation

Post-call transcription

Convert recorded consultations, tele-health sessions, or contact center calls into accurate transcripts with a single API.

Post-call transcription

Speech-enable any workflow

Command-and-control any application or power smart tools like symptom checkers, digital intake forms, or clinical assistants.

Speech-enable any workflow

Real-time dictation

Let physicians speak naturally while Corti transcribes notes, referrals, and reports instantly — with voice commands.

Real-time dictation

Ambient documentation

Transcribe patient conversations live with speaker attribution and fact extraction, so you can generate clean clinical notes.

Ambient documentation

Post-call transcription

Convert recorded consultations, tele-health sessions, or contact center calls into accurate transcripts with a single API.

Post-call transcription

Voice-powered features

Drive smart tools like symptom checkers, digital intake forms, or clinical assistants — all with real-time speech input.

Voice-powered features

Built for healthcare. Trusted by developers.

Claim $50 of free credits when you start building.