Speech infrastructure for healthcare developers

File uploads

Batch audio file processing
Dictation and commands
Instant results while speaking

cURL
JavaScript
Python
PHP
Go
Java

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 '{\n  "recordingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",\n  "primaryLanguage": "en",\n  "isDictation": true,\n  "isMultichannel": true,\n  "diarize": true,\n  "participants": [\
    {\
      "channel": 123,\
      "role": "doctor"\
    }\
  ],\n  "modelName": "base"\n}'
await client.transcripts.create("f47ac10b-58cc-4372-a567-0e02b2c3d479", {  
    recordingId: "f47ac10b-58cc-4372-a567-0e02b2c3d479",  
    primaryLanguage: "en",  
    modelName: "base"  
});
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())
<?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;
}
?>
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))
}
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\"}")
  .asString();

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.

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.

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?

Real-time dictation

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

Ambient documentation

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

Post-call transcription

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

Speech-enable any workflow

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