Overview
Beta Template Sections provide the structure of the clinical notes to generate, what content should be documented and how that content should be written, e.g. the writing style, what text formatting, certain standard phrases or fixed headings. New to templates? Read the intro to Templates. This guide expands on how to assemble sections into custom templates and covers how to tailor sections to cover more custom template needs, or even empower end users to adjust the document (e.g. clinical note) generated by Corti’s LLM to their bespoke preferences.This feature requires human oversight of its outputs
Scenarios and workflows
The ability to assemble templates from existing sections and customize their behaviour further, unlocks various scenarios and workflows. Let’s look at some of them.Offer custom templates to customers
In this scenario, you want to provide the service your customers to tailor templates to your customer feedback and needs.1
Define template needs
Based on your insights and customer feedback, make an overview of what the template’s structure should look like, for each section the desired output requirements in terms of its name, content, writing style and formatting rules. Say the customer already tested the
corti-soap default template but wants a separate allergies section, the subjective content should be under the section name “Anamnesis” instead, and the Plan in running text instead of list items.2
Map Corti default sections
Get an overview of Corti’s default sections via GET /templateSections and the languages they are available in.
3
Assemble and customize
In this case, you decide to use the corti-subjective, corti-allergies, corti-objective, corti-assessment and corti-plan sections. For
corti-subjective you apply a nameOverrideand instruct via contentOverride to exclude allergies, and for corti-plan you apply a formatRuleOverride instructing to use one paragraph of running text.4
Template provisioning and management
At this point, you will need to save your request as a bespoke template on your end. As you reference Corti’s default sections, you will automatically inherit any more underlying improvements Corti might apply to those. Any structural changes that might influence the output of a section will be thoroughly tested and included in our upcoming breaking changes if such a change is necessary.
The current Q1 2026 roadmap will bring the creation and management of templates via API, along with even further customization options. Stay updated on out our public roadmap
Enable end users to customize templates
1
Decide your approach
You will want to decide whether your product should offer fixed templates with customization options, or the building blocks of templates (sections) with customization options to your end users. You can check out Corti Assistant’s implementation that enables end users to assemble templates from default sections, then further customize those.
2
Display the templates or sections
Depending your approach, you will want to fetch and display the templates you offer or the section building blocks. Either way, since the customization is enabled via section-specific overrides, it is important that you decompose a template into its sections when offering customizing templates.
Corti default sections come with what we consider the best-suited writing styles. Those are often specific to the type of section. When you fetch templates via the API, the response includes the name of the writing style, however not the full underlying prompts.
3
Enable end users to customize
You will want to decide what’s right for your product and end users: do you provide defaults in a nice UI to toggle or choose? Or do you want your end users to provide the customized prompts directly? Or a hybrid? Should customization options be limited or leverage every single override ability?
Depending on your approach, design your product UI and ensure the relevant sections and overrides are part of your POST /documents request.
4
Template provisioning and management
At this point, you will need to save your request as a bespoke template on your end. As you reference Corti’s default sections, you will automatically inherit any more underlying improvements Corti might apply to those. Any structural changes that might influence the output of a section will be thoroughly tested and included in our upcoming breaking changes if such a change is necessary.
The current Q1 2026 roadmap will bring the creation and management of templates via API, along with even further customization options. Stay updated on out our public roadmap
Dynamic note generation based on EHR fields
1
Decide your approach
You will want to decide whether your product should offer fixed mapping you define what EHR fields should map to what section, or whether you want to let your customers or even end users define that mapping.
2
Map Corti default sections
Get an overview of Corti’s default sections via GET /templateSections and the languages they are available in.
3
Customize sections if needed
Depending your approach and needs, you might want to do further tailoring of default sections yourself or offer this to your customers or end users. If you customize a default section, you will need to save on your end the overrides that relate to a specific section - whether those are global, or on an individual user level.
The current Q1 2026 roadmap will bring the creation and management of templates via API, along with even further customization options. Stay updated on out our public roadmap
4
Generate (customized) sections at run-time
When the end user has completed a consultation and you now want to generate the documentation for the relevant EHR fields, you derive what sections should be generated based on the applicable EHR fields. This could be based on your global map or the customer/end user map. Then you construct your API request to POST /documents referencing the relevant sections, plus the potential overrides.
Stich a document together from multiple document input-output combinations
1
Determine the building blocks
Let’s imagine the goal is to alleviate documentation burden for clinicians where the final document should represent the referral context, conversations with the patient, detailed test results and clinician diagnosis. Let’s say the input sources are:
- a referral letter
- a transcript/facts generated for the admission conversation facilitated via
/stream - detailed test results
- a dictated note interpreting test results to establish the diagnosis
- a transcript/facts generated for the discharge conversation facilitated via
/stream
2
Map Corti default sections and its input
Get an overview of Corti’s default sections via GET /templateSections and the languages they are available in. Determine what section best serves as baseline for each aspect of the final documentation, and what input will feed into it. For example, the
corti-diagnosis section might serve well for the detailed test results.3
Customize sections if needed
You might want to do further tailoring of default sections. For example, for the
corti-diagnosis section you might want to provide additionalInstructionsOverride that clarify how the results should be summarrized and structured.4
Generate multiple documents to stitch together
Currently, the API does not support combining different
context.types such as facts with transcript or string.context.type and the relevant sections and overrides:- input source: referral letter -> we will use the
context.type: stringto pass in the referral letter, use thecorti-hpisection and viaadditionalInstructionsOverridegive the model some more instructions that the source is a referral letter and what to summarize. - input source: facts generated for the admission conversation facilitated via
/stream-> we will usecontext.type: factsand utilize several sections and overrides for small tailoring - input source: detailed test results report -> we will use
context.type: stringand utilize thecorti-diagnostic-resultssection and overrides for small tailoring - input source: facts generated for the discharge conversation facilitated via
/stream-> we will usecontext.type: factsand utilize several sections and overrides for small tailoring - for the dictated note interpreting test results to establish the diagnosis, this could of course just be verbatim leveraging speech rec, but in the case of a non-native speaking clinician, we could leverage pseudo-dictation that helps turn grammatical issues, interrupted sentence structures into coherent, proper clinical note content. For this we could use the
corti-diagnostic-resultssection and apply relevant prompt instructions via overrides.
Customization overrides and instruction hierarchy
Overrides do what they indicate: if you apply an override, the LLM will only receive what you provide in the override. So if you override a Corti default writingStyle, then whatever you provide in the override is the prompt for the writing style.
| Level | Property | override property | Purpose |
|---|---|---|---|
| template | n/a as assembling sections | description | pass some context about the assembled template to the LLM |
| template | additionalInstructions | additionalInstructionsOverride | instructions or context that is passed to all sections, e.g. context is non-critical emergency visit |
| section | name | nameOverride | to return a different section name (title), e.g. Subjective -> Anamnesis |
| section | defaultWritingStyle | writingStyleOverride | to prompt how the writing style should be, e.g. telegraphic, laymen, etc |
| section | defaultFormatRule | formatRuleOverride | to prompt format, e.g. bullets, subheadings, etc |
| section | additionalInstructions | additionalInstructionsOverride | to provide additional instructions or context |
Known issue: Template-level additional instructions that instruct to output certain standard placeholder texts, e.g. “Signed off by Dr…”, are currently often triggering documentation guardrails and removed in the output. We advise to handle such placeholders in your application
The combination of using default sections and overrides can lead to scenarios where the LLM receives conflicting instructions.
For example, using a
corti-assessment section and only providing a formatRuleOverride instructing to use fixed subheadings might conflict with the underlying prompts of the defaultWritingStyle. In this case, you can also override the writingStyle, or utilize additionalInstructionsOverride. The latter sits higher in the instruction hierarchy.Instruction Hierarchy
The following guides the LLM output instructions by priority:
- Section-level Instructions including contentOverride, additionalInstructionsOverride
- Template-level Instructions including description, additionalInstructionsOverride
- Default Writing Style and writingStyleOverride
- Default Format Rule and formatRuleOverride
Request and Response Example
This examples request does the following:- uses facts as context.type input
- assembles a template from Corti default sections and gives the LLM a little extra context via
template.description - customizes some sections further:
corti-hpidefault name is “History of Present Ilness”, the requests doesnameOverrideto “Anamnesis”corti-hpiwithadditionalInstructionsOverridesuch as to refer to patient as “My case”corti-assessmentuseswritingStyleOverrideto change to telegraphic style, andformatRuleOverrideto use fixed subheadingscorti-planuses aformatRuleOverrideto change the default bullet point style to instead output a paragraph of running text
Customize assembled sections
Document from request