curl --request POST \
--url https://scribe-api.telepatia.ai/v1/medical-record-configurations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"configuration": {
"chiefComplaint": {
"instructionSet": {
"telepatiaPromptId": "CHIEF_COMPLAINT"
},
"schema": {
"instructions": "Patient's chief complaint.",
"type": "string"
}
},
"vitals": {
"instructionSet": {
"telepatiaPromptId": "VITAL_SIGNS"
},
"schema": {
"instructions": "Vital signs.",
"properties": {
"heartRate": {
"instructions": "Heart rate in bpm.",
"type": "integer"
}
},
"type": "object"
}
}
},
"name": "Cardiology intake"
}
EOFimport requests
url = "https://scribe-api.telepatia.ai/v1/medical-record-configurations"
payload = {
"configuration": {
"chiefComplaint": {
"instructionSet": { "telepatiaPromptId": "CHIEF_COMPLAINT" },
"schema": {
"instructions": "Patient's chief complaint.",
"type": "string"
}
},
"vitals": {
"instructionSet": { "telepatiaPromptId": "VITAL_SIGNS" },
"schema": {
"instructions": "Vital signs.",
"properties": { "heartRate": {
"instructions": "Heart rate in bpm.",
"type": "integer"
} },
"type": "object"
}
}
},
"name": "Cardiology intake"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
configuration: {
chiefComplaint: {
instructionSet: {telepatiaPromptId: 'CHIEF_COMPLAINT'},
schema: {instructions: 'Patient\'s chief complaint.', type: 'string'}
},
vitals: {
instructionSet: {telepatiaPromptId: 'VITAL_SIGNS'},
schema: {
instructions: 'Vital signs.',
properties: {heartRate: {instructions: 'Heart rate in bpm.', type: 'integer'}},
type: 'object'
}
}
},
name: 'Cardiology intake'
})
};
fetch('https://scribe-api.telepatia.ai/v1/medical-record-configurations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scribe-api.telepatia.ai/v1/medical-record-configurations",
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([
'configuration' => [
'chiefComplaint' => [
'instructionSet' => [
'telepatiaPromptId' => 'CHIEF_COMPLAINT'
],
'schema' => [
'instructions' => 'Patient\'s chief complaint.',
'type' => 'string'
]
],
'vitals' => [
'instructionSet' => [
'telepatiaPromptId' => 'VITAL_SIGNS'
],
'schema' => [
'instructions' => 'Vital signs.',
'properties' => [
'heartRate' => [
'instructions' => 'Heart rate in bpm.',
'type' => 'integer'
]
],
'type' => 'object'
]
]
],
'name' => 'Cardiology intake'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://scribe-api.telepatia.ai/v1/medical-record-configurations"
payload := strings.NewReader("{\n \"configuration\": {\n \"chiefComplaint\": {\n \"instructionSet\": {\n \"telepatiaPromptId\": \"CHIEF_COMPLAINT\"\n },\n \"schema\": {\n \"instructions\": \"Patient's chief complaint.\",\n \"type\": \"string\"\n }\n },\n \"vitals\": {\n \"instructionSet\": {\n \"telepatiaPromptId\": \"VITAL_SIGNS\"\n },\n \"schema\": {\n \"instructions\": \"Vital signs.\",\n \"properties\": {\n \"heartRate\": {\n \"instructions\": \"Heart rate in bpm.\",\n \"type\": \"integer\"\n }\n },\n \"type\": \"object\"\n }\n }\n },\n \"name\": \"Cardiology intake\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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(string(body))
}HttpResponse<String> response = Unirest.post("https://scribe-api.telepatia.ai/v1/medical-record-configurations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"configuration\": {\n \"chiefComplaint\": {\n \"instructionSet\": {\n \"telepatiaPromptId\": \"CHIEF_COMPLAINT\"\n },\n \"schema\": {\n \"instructions\": \"Patient's chief complaint.\",\n \"type\": \"string\"\n }\n },\n \"vitals\": {\n \"instructionSet\": {\n \"telepatiaPromptId\": \"VITAL_SIGNS\"\n },\n \"schema\": {\n \"instructions\": \"Vital signs.\",\n \"properties\": {\n \"heartRate\": {\n \"instructions\": \"Heart rate in bpm.\",\n \"type\": \"integer\"\n }\n },\n \"type\": \"object\"\n }\n }\n },\n \"name\": \"Cardiology intake\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://scribe-api.telepatia.ai/v1/medical-record-configurations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"configuration\": {\n \"chiefComplaint\": {\n \"instructionSet\": {\n \"telepatiaPromptId\": \"CHIEF_COMPLAINT\"\n },\n \"schema\": {\n \"instructions\": \"Patient's chief complaint.\",\n \"type\": \"string\"\n }\n },\n \"vitals\": {\n \"instructionSet\": {\n \"telepatiaPromptId\": \"VITAL_SIGNS\"\n },\n \"schema\": {\n \"instructions\": \"Vital signs.\",\n \"properties\": {\n \"heartRate\": {\n \"instructions\": \"Heart rate in bpm.\",\n \"type\": \"integer\"\n }\n },\n \"type\": \"object\"\n }\n }\n },\n \"name\": \"Cardiology intake\"\n}"
response = http.request(request)
puts response.read_body{
"created": true,
"createdAt": "2026-04-20T14:30:00Z",
"hash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"id": "mrc_a1b2c3d4e5f6g7h8",
"name": "Cardiology intake"
}Create a Smart Template
Register a Smart Template (medical record configuration). Idempotent on content hash: identical configurations for the same account return the existing id with created: false.
curl --request POST \
--url https://scribe-api.telepatia.ai/v1/medical-record-configurations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"configuration": {
"chiefComplaint": {
"instructionSet": {
"telepatiaPromptId": "CHIEF_COMPLAINT"
},
"schema": {
"instructions": "Patient's chief complaint.",
"type": "string"
}
},
"vitals": {
"instructionSet": {
"telepatiaPromptId": "VITAL_SIGNS"
},
"schema": {
"instructions": "Vital signs.",
"properties": {
"heartRate": {
"instructions": "Heart rate in bpm.",
"type": "integer"
}
},
"type": "object"
}
}
},
"name": "Cardiology intake"
}
EOFimport requests
url = "https://scribe-api.telepatia.ai/v1/medical-record-configurations"
payload = {
"configuration": {
"chiefComplaint": {
"instructionSet": { "telepatiaPromptId": "CHIEF_COMPLAINT" },
"schema": {
"instructions": "Patient's chief complaint.",
"type": "string"
}
},
"vitals": {
"instructionSet": { "telepatiaPromptId": "VITAL_SIGNS" },
"schema": {
"instructions": "Vital signs.",
"properties": { "heartRate": {
"instructions": "Heart rate in bpm.",
"type": "integer"
} },
"type": "object"
}
}
},
"name": "Cardiology intake"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
configuration: {
chiefComplaint: {
instructionSet: {telepatiaPromptId: 'CHIEF_COMPLAINT'},
schema: {instructions: 'Patient\'s chief complaint.', type: 'string'}
},
vitals: {
instructionSet: {telepatiaPromptId: 'VITAL_SIGNS'},
schema: {
instructions: 'Vital signs.',
properties: {heartRate: {instructions: 'Heart rate in bpm.', type: 'integer'}},
type: 'object'
}
}
},
name: 'Cardiology intake'
})
};
fetch('https://scribe-api.telepatia.ai/v1/medical-record-configurations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scribe-api.telepatia.ai/v1/medical-record-configurations",
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([
'configuration' => [
'chiefComplaint' => [
'instructionSet' => [
'telepatiaPromptId' => 'CHIEF_COMPLAINT'
],
'schema' => [
'instructions' => 'Patient\'s chief complaint.',
'type' => 'string'
]
],
'vitals' => [
'instructionSet' => [
'telepatiaPromptId' => 'VITAL_SIGNS'
],
'schema' => [
'instructions' => 'Vital signs.',
'properties' => [
'heartRate' => [
'instructions' => 'Heart rate in bpm.',
'type' => 'integer'
]
],
'type' => 'object'
]
]
],
'name' => 'Cardiology intake'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://scribe-api.telepatia.ai/v1/medical-record-configurations"
payload := strings.NewReader("{\n \"configuration\": {\n \"chiefComplaint\": {\n \"instructionSet\": {\n \"telepatiaPromptId\": \"CHIEF_COMPLAINT\"\n },\n \"schema\": {\n \"instructions\": \"Patient's chief complaint.\",\n \"type\": \"string\"\n }\n },\n \"vitals\": {\n \"instructionSet\": {\n \"telepatiaPromptId\": \"VITAL_SIGNS\"\n },\n \"schema\": {\n \"instructions\": \"Vital signs.\",\n \"properties\": {\n \"heartRate\": {\n \"instructions\": \"Heart rate in bpm.\",\n \"type\": \"integer\"\n }\n },\n \"type\": \"object\"\n }\n }\n },\n \"name\": \"Cardiology intake\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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(string(body))
}HttpResponse<String> response = Unirest.post("https://scribe-api.telepatia.ai/v1/medical-record-configurations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"configuration\": {\n \"chiefComplaint\": {\n \"instructionSet\": {\n \"telepatiaPromptId\": \"CHIEF_COMPLAINT\"\n },\n \"schema\": {\n \"instructions\": \"Patient's chief complaint.\",\n \"type\": \"string\"\n }\n },\n \"vitals\": {\n \"instructionSet\": {\n \"telepatiaPromptId\": \"VITAL_SIGNS\"\n },\n \"schema\": {\n \"instructions\": \"Vital signs.\",\n \"properties\": {\n \"heartRate\": {\n \"instructions\": \"Heart rate in bpm.\",\n \"type\": \"integer\"\n }\n },\n \"type\": \"object\"\n }\n }\n },\n \"name\": \"Cardiology intake\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://scribe-api.telepatia.ai/v1/medical-record-configurations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"configuration\": {\n \"chiefComplaint\": {\n \"instructionSet\": {\n \"telepatiaPromptId\": \"CHIEF_COMPLAINT\"\n },\n \"schema\": {\n \"instructions\": \"Patient's chief complaint.\",\n \"type\": \"string\"\n }\n },\n \"vitals\": {\n \"instructionSet\": {\n \"telepatiaPromptId\": \"VITAL_SIGNS\"\n },\n \"schema\": {\n \"instructions\": \"Vital signs.\",\n \"properties\": {\n \"heartRate\": {\n \"instructions\": \"Heart rate in bpm.\",\n \"type\": \"integer\"\n }\n },\n \"type\": \"object\"\n }\n }\n },\n \"name\": \"Cardiology intake\"\n}"
response = http.request(request)
puts response.read_body{
"created": true,
"createdAt": "2026-04-20T14:30:00Z",
"hash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"id": "mrc_a1b2c3d4e5f6g7h8",
"name": "Cardiology intake"
}Authorizations
API key passed as a Bearer token
Body
Request body for registering a medical record configuration — a map of section key to section definition.
Section map keyed by node name (schema + optional prompt strategy).
Show child attributes
Show child attributes
Human-readable display name. Defaults to the public id when omitted.
200"Cardiology intake"
Optional human-readable description of the template.
500"Intake template for the cardiology outpatient clinic."
Medical specialty this template targets, given as the enum key (such as GENERAL_MEDICINE) or its camelCase value (such as generalMedicine). When set by an institutional API key, the template is distributed as a child copy to every enabled account in the institution that already carries this specialty. Accounts without this specialty are not targets, and a doctor API key never distributes. Optional; omitting it skips distribution.
acupuncture, alternativeMedicine, ayurvedicMedicine, chiropractic, herbalMedicine, homeopathy, naturopathy, traditionalChineseMedicine, cosmeticDentistry, dentistry, developmentalBehavioralPediatrics, endodontics, forensicDentistry, maxillofacialProsthodontics, oralMaxillofacialSurgery, oralMedicine, oralPathology, oralSurgery, orthodontics, pediatricDentistry, periodontics, prosthodontics, addictionPsychiatry, adolescentMedicine, aerospaceMedicine, allergyImmunology, andrology, anesthesiology, anesthesiologyCriticalCare, bariatricSurgery, breastRadiology, breastSurgery, cardiacSurgery, cardiovascularSurgery, cardiology, cardiovascularDisease, cardiovascularRiskProgram, childAbusePediatrics, childAdolescentPsychiatry, childNeurology, childWelfareSocialWork, clinicalNeurophysiology, clinicalSocialWork, colorectalSurgery, communityMedicine, communitySocialWork, consultationLiaisonPsychiatry, cosmeticDermatology, craniofacialTrauma, dermatology, dermoscopy, diabetes, diagnosticRadiology, electrophysiology, emergencyCriticalCare, emergencyMedicine, emergencyPsychiatry, endocrineSurgery, endocrinology, epilepsy, facialPlasticSurgery, familyMedicine, familySocialWork, footAnkleSurgery, forensicPsychiatry, forensicSocialWork, gastroenterology, generalMedicine, generalMedicinePsychiatry, generalSurgery, geriatricMedicine, geriatricPsychiatry, geriatricSocialWork, ginecology, gynecologicOncology, gynecologicSurgery, gynecology, handSurgery, headNeckSurgery, headacheMedicine, heartFailureTransplantCardiology, hematology, hepatobiliarySurgery, hipKneeSurgery, hospitalist, infectiousDisease, internalCriticalCare, internalMedicine, interventionalCardiology, interventionalRadiology, maternalFetalMedicine, medicalSocialWork, militarySocialWork, minimallyInvasiveGynecologicSurgery, mohsSurgery, musculoskeletalRadiology, neonatology, nephrology, neurocriticalCare, neuroimmunology, neurology, neuromuscularMedicine, neuroradiology, neurorehabilitation, neurosurgery, neurotology, nuclearMedicine, obstetrics, obstetricsGynecology, occupationalMedicine, occupationalSocialWork, oculoplasticSurgery, oncology, oncologySocialWork, ophthalmology, orthopedicHandSurgery, orthopedicSportsMedicine, orthopedicTrauma, orthopedics, otolaryngology, painMedicine, palliativeMedicine, palliativeSocialWork, pediatricAllergyImmunology, pediatricAnesthesiology, pediatricCardiology, pediatricCriticalCare, pediatricDermatology, pediatricEmergencyMedicine, pediatricEndocrinology, pediatricENT, pediatricGastroenterology, pediatricHematologyOncology, pediatricInfectiousDisease, pediatricNephrology, pediatricNeurology, pediatricCardiacSurgery, pediatricOncology, pediatricOphthalmology, pediatricOrthopedics, pediatricPalliativeCare, pediatricPulmonology, pediatricRadiology, pediatricRheumatology, pediatricSocialWork, pediatricSurgery, pediatricTrauma, pediatricUrology, pediatrics, perinatalPsychiatry, physicalMedicineRehab, plasticSurgery, prenatalCareProgram, preventiveMedicine, psychiatricSocialWork, psychiatry, psychosomaticMedicine, publicHealth, pulmonaryDisease, pulmonology, radiationOncologist, radiationOncology, reproductiveEndocrinology, retinaSurgery, rheumatology, riasProgram, manager, schoolSocialWork, shoulderElbowSurgery, sleepMedicine, socialWork, spinalCordInjury, spinalTrauma, spineSurgery, sportsMedicine, substanceAbuseSocialWork, surgicalOncology, telemedicine, thoracicSurgery, transplantHepatology, transplantSurgery, traumaSurgery, traumatology, triage, unknown, urgentCare, urologicOncology, urology, vascularSurgery, nursing, clinicalNutrition, eatingDisorderNutrition, gastroenterologicNutrition, geriatricNutrition, nutrition, oncologyNutrition, pediatricNutrition, renalNutrition, sportsNutrition, clinicalPsychology, counselingPsychology, developmentalPsychology, forensicPsychology, geropsychology, healthPsychology, industrialOrganizationalPsychology, militaryPsychology, neuropsychology, positivePsychology, psychology, rehabilitationPsychology, schoolPsychology, sportsPsychology, occupationalTherapy, physicalTherapy, respiratoryTherapy, speechTherapy, therapy, other "GENERAL_MEDICINE"
Product discriminator for this template. Omit for an ordinary Scribe template with no declared care setting; readers treat the omitted value as defaultOutpatient. defaultOutpatient, inpatient, and emergencyRoom also denote a Scribe template, and each names the clinical care setting. reportDictation is a dictation report template; historySummary is a patient-history summarizer. Set at creation and never changed; it is part of the deduplication identity, so the same configuration may exist once per value.
defaultOutpatient, inpatient, emergencyRoom, reportDictation, historySummary "reportDictation"
Response
Successful Response
Response body for registering a medical record configuration.
Public ID of the medical record configuration.
"mrc_a1b2c3d4e5f6g7h8"
Resolved display name (defaults to the public id when none was provided).
"Cardiology intake"
SHA-256 hash of the canonical configuration JSON.
"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
"2026-04-20T14:30:00Z"
True if a new configuration was created; False if a matching one already existed.
true