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();
Text generation capabilities
Templated-documents
Create clinical notes from transcripts or facts using ready-made templates.
FactsR™
Keeping records precise, relevant, and tightly aligned facts from clinical conversations.
Async generation
Create documents after an interaction by posting transcripts to the API.
Standard templates
Start fast with templates like SOAP, H&P, and Patient Summary, available in multiple languages and kept up to date.
Custom templates
Define your own templates, sections and styles to fit any specialty and workflow.
One-to-many generation
Produce several note types from the same encounter, such as SOAP and patient summary.
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' specialties 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.

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.