Generate structured, accurate clinical notes in seconds
Turn transcripts, facts, or structured data into any type of medical documentation. Tailored to your format, specialty, and language.
Generate structured clinical documents with a few lines of code
curl --request POST \
--url https://api.{environment}.corti.app/v2/interactions/{id}/documents/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Tenant-Name: <tenant-name>' \
--data '{
"context": [
{
"type": "facts",
"data": [
{
"text": "<string>",
"group": "Others",
"source": "core"
}
]
}
],
"templateKey": "<string>",
"name": "<string>",
"modelName": "\"model_name (Latest)\" | \"model_name_version\"",
"outputLanguage": "<string>"
}'
import { CortiEnvironment, CortiClient } from "@corti/sdk";
const client = new CortiClient({
environment: CortiEnvironment.Eu,
auth: {
clientId: "YOUR_CLIENT_ID",
clientSecret: "YOUR_CLIENT_SECRET"
},
tenantName: "YOUR_TENANT_NAME"
});
await client.documents.create("f47ac10b-58cc-4372-a567-0e02b2c3d479", {
context: [{
type: "facts",
data: [{
text: "text",
source: "core"
}]
}],
templateKey: "templateKey",
outputLanguage: "outputLanguage"
});
import requests
url = "https://api.{environment}.corti.app/v2/interactions/{id}/documents/"
payload = {
"context": [
{
"type": "facts",
"data": [
{
"text": "<string>",
"group": "Others",
"source": "core"
}
]
}
],
"templateKey": "<string>",
"name": "<string>",
"modelName": "\"model_name (Latest)\" | \"model_name_version\"",
"outputLanguage": "<string>"
}
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}/documents/",
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([
'context' => [
[
'type' => 'facts',
'data' => [
[
'text' => '<string>',
'group' => 'Others',
'source' => 'core'
]
]
]
],
'templateKey' => '<string>',
'name' => '<string>',
'modelName' => '"model_name (Latest)" | "model_name_version"',
'outputLanguage' => '<string>'
]),
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}/documents/"
payload := strings.NewReader("{\n \"context\": [\n {\n \"type\": \"facts\",\n \"data\": [\n {\n \"text\": \"<string>\",\n \"group\": \"Others\",\n \"source\": \"core\"\n }\n ]\n }\n ],\n \"templateKey\": \"<string>\",\n \"name\": \"<string>\",\n \"modelName\": \"\\\"model_name (Latest)\\\" | \\\"model_name_version\\\"\",\n \"outputLanguage\": \"<string>\"\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}/documents/")
.header("Tenant-Name", "<tenant-name>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"context\": [\n {\n \"type\": \"facts\",\n \"data\": [\n {\n \"text\": \"<string>\",\n \"group\": \"Others\",\n \"source\": \"core\"\n }\n ]\n }\n ],\n \"templateKey\": \"<string>\",\n \"name\": \"<string>\",\n \"modelName\": \"\\\"model_name (Latest)\\\" | \\\"model_name_version\\\"\",\n \"outputLanguage\": \"<string>\"\n}")
.asString();
Why teams build on Corti
Access clinical-grade reasoning that goes beyond summarisation, analyzing clinical data, identifying what’s relevant, and expressing it in accurate, context-aware language.
Quick to implement
Get started fast with flexible APIs, full documentation, and support for REST and streaming.
Secure by design
Compliant with GDPR, HIPAA, and SOC 2 — with end-to-end encryption and robust data handling across regions.
Scales with your product
From prototypes to enterprise-grade deployments, Corti handles large volumes, concurrent streams, and global usage.
Built for healthcare developers
Designed around real clinical workflows, with configurable endpoints, medical-language accuracy, and fast setup time.
Generate clinical documentation tailored to every workflow
Turn transcripts, structured data, or past records into polished documentation automatically. Corti creates SOAP notes, discharge summaries, and follow-up letters in seconds, cutting manual work while ensuring accuracy, consistency, and compliance.

Generate full drafts seconds after the encounter ends. Clinicians simply review, edit, and sign, reducing hours of admin to minutes without disrupting workflow or accuracy.

Select from our library of clinical templates or define your own with custom sections, terminology, and style. We provide modular and flexible infrastructure, enabling documentation tailored to your users' specialities and standards.

Produce different documents from the same interaction: a clinician note for the EHR, a patient summary, and a billing-ready report - all from the same source.

Generate medical documentation in English, Danish, Spanish, German, French, Swedish, and more. Corti is the trusted foundation for teams building clinician and patient-facing applications with precise multilingual documentation needs.

“By combining Dedalus’ workflow expertise with Corti’s real-time reasoning engine, we’re delivering exactly what clinicians have been asking for — smarter tools that save time and improve care.”
Now see what you can power
Patient summaries
Generate patient-facing handouts in plain language, directly from the same interaction used to create the clinical note.
Clinical notes
Turn conversations into structured SOAP notes, discharge summaries, H&Ps, or ER reports with clean formatting and no manual typing.
Referral letters
Use specialty-specific templates to auto-generate referral notes, follow-ups, or nursing documentation in your format.
Multi-language output
Generate both a professional note and a patient summary - each in a different language from a single transcript or fact.