Text Generation API

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.

Powered by frontier research. Designed for developers. 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

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.

Model explainability in healthcare matters

In healthcare, model reasoning paths carry high-stakes implications. Understanding how a model reaches its conclusions is essential for safety, compliance, and trust.

To advance this, Corti’s research team developed the Generative Interpretability Method (GIM), marking a major step forward in mechanistic interpretability.

Across leading architectures like Gemma, LLaMA, and Qwen, GIM achieves over 2× higher faithfulness than existing methods, enabling Corti to build more transparent, auditable, and trustworthy AI infrastructure for high-stakes environments.

Clinical documentation generation 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' specialties 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

What will you build?

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


Built for healthcare. Trusted by developers.

Claim $50 of free credits when you start building.