Text Generation

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.

Built for developers and trusted by clinicians

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>"
}'
Copy
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"
});
Copy
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())
Copy
<?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;
}
Copy
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))

}
Copy
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();
Copy

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

Generate accurate clinical notes

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.

Real-time, ready-to-sign drafts

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.

Flexible, custom templates

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.

Multiple outputs from one encounter

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.

Multilingual documentation at scale

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.”
Jan Rusch
Director Integrated Technologies, Dedalus

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.

Patient summaries


Clinical notes

Turn conversations into structured SOAP notes, discharge summaries, H&Ps, or ER reports with clean formatting and no manual typing.

Clinical notes

Referral letters

Use specialty-specific templates to auto-generate referral notes, follow-ups, or nursing documentation in your format.

Referral letters

Multi-language output


Generate both a professional note and a patient summary - each in a different language from a single transcript or fact.

Multi-language output


Patient summaries


Generate patient-facing handouts in plain language, directly from the same interaction used to create the clinical note.

Patient summaries


Clinical notes

Turn conversations into structured SOAP notes, discharge summaries, H&Ps, or ER reports with clean formatting and no manual typing.

Clinical notes

Referral letters

Use specialty-specific templates to auto-generate referral notes, follow-ups, or nursing documentation in your format.

Referral letters

Multi-language output


Generate both a professional note and a patient summary - each in a different language from a single transcript or fact.

Multi-language output

Text Generation

Built for healthcare. Trusted by developers.

🔥 Claim your $50 of free credits