Clinical
144 endpoints
Clinical
40 endpoints
/api/v1/{org_id}/clinical/conditions/{condition_uuid}Get patient condition
Retrieve a single patient condition by UUID. Raises 404 if not found.
Parameters
Path Parameters
condition_uuidstringrequiredorg_idstringrequiredResponses
condition_typeenumrequiredType of condition. One of: caries, fracture, abscess, impaction, open_contact, diastema, abrasion, erosion, attrition, watch, periapical_lesion, periodontal, decalcification, defective_restoration, other.
abrasionabscessankylosisattritioncariesdecalcificationdefective_restorationdiastemadilacerationerosionfracturefracture_rootfusiongeminationhypoplasiaimpactionluxationmacrodontiamicrodontiaopen_contactotherperiapical_lesionperiodontalroot_resorption_externalroot_resorption_internalwatchcreated_atstring (date-time)requiredRecord creation timestamp.
date_identifiedstring (date)requiredDate the condition was identified.
date_resolvedstring (date)diagnostic_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
idstring (uuid)requiredUUID of the patient condition.
notestringrequiredClinical note describing the condition.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
severityenummildmoderateseverestatusenumrequiredCondition monitoring status. One of: active, resolved, monitoring.
activemonitoringresolvedsurfacestringtooth_numberstringupdated_atstring (date-time)requiredRecord last-update timestamp.
versionintegerrequiredCurrent version for optimistic concurrency.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/conditions/{condition_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/conditions/{condition_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/estimates/{estimate_uuid}/detailGet estimate breakdown detail
Get full estimation breakdown for a single procedure estimate. Returns the fee waterfall, benefit match details, coverage calculation steps, tracker state, and insurance plan context. If the estimate was created before the detail feature was added, returns has_detail=false. Raises 404 if estimate not found.
Parameters
Path Parameters
estimate_uuidstringrequiredorg_idstringrequiredResponses
benefit_matchobjectDetails about the benefit row that matched this procedure.
coverageobjectStep-by-step coverage calculation.
estimate_uuidstring (uuid)requiredUUID of the procedure estimate.
exclusion_reasonstringfee_sourceobjectAudit trail for how a fee was resolved.
has_detailbooleanrequiredTrue if calculation_detail is available. False for legacy estimates.
is_excludedbooleanTrue if the procedure is excluded from coverage.
plan_contextobjectInsurance plan context for the estimate detail sidebar.
substitution_codestringtrackerobjectDeductible and annual max tracker state before/after this procedure.
warningsstring[]Pipeline warnings.
waterfallobject[]Ordered fee/coverage waterfall steps.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/estimates/{estimate_uuid}/detail" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/estimates/{estimate_uuid}/detail" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/chart/at-dateGet historical chart snapshot
Return a coherent snapshot of the full chart as it existed on a given date. Includes: - Tooth statuses: most recent effective record on or before snapshot_date per tooth - Charted procedures: all procedures with proc_date on or before snapshot_date - Patient conditions: conditions identified on or before snapshot_date that were not yet resolved NOTE: Procedure statuses reflect current values, not historical (scoped limitation §6.2). Raises 404 if the patient is not found. Raises 422 if the date parameter is missing or invalid.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredQuery Parameters
datestringrequiredTarget date for the chart snapshot (YYYY-MM-DD).
Responses
charted_proceduresobject[]requiredProcedures charted on or before snapshot_date. NOTE: Procedure statuses reflect current values, not historical (scoped limitation §6.2).
patient_conditionsobject[]requiredConditions active on snapshot_date — identified on or before snapshot_date and not yet resolved at that date.
snapshot_datestring (date)requiredThe date for which this snapshot reflects chart state.
tooth_statusesobject[]requiredTooth statuses as they were on snapshot_date. Uses the most recent effective_date on or before snapshot_date per tooth.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/chart/at-date" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/chart/at-date" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/chart/timelineGet chart timeline events
Return a timeline of all dates with chart activity for a patient. Merges distinct dates from tooth status changes, charted procedures, and patient condition identifications. Each entry includes counts per data source for that date. Raises 404 if the patient is not found.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredResponses
eventsobject[]requiredTimeline entries sorted chronologically, each representing a date with at least one chart change.
totalintegerrequiredTotal number of distinct dates with chart activity.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/chart/timeline" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/chart/timeline" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/conditionsList patient conditions
List patient conditions with optional filters. Raises 404 if the patient is not found.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredQuery Parameters
statusstringFilter by condition status (e.g., active, resolved).
condition_typestringFilter by condition type code.
tooth_numberstringFilter by tooth number.
pageintegerPage number (1-based).
Default: 1
page_sizeintegerNumber of items per page.
Default: 50
Responses
itemsobject[]requiredpageintegerrequiredpage_sizeintegerrequiredtotalintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/conditions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/conditions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/proceduresList charted procedures
List charted procedures for a patient with optional filters. Raises 404 if the patient is not found.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredQuery Parameters
status"complete" | "complete_referred" | "existing_current" | "existing_other" | "in_progress" | "referred" | "scheduled" | "treatment_planned"Filter by procedure status. One of: treatment_planned, scheduled, in_progress, complete, complete_referred, existing_current, existing_other, referred. Use treatment_planned for diagnosed services, pending treatment, planned procedures, and unscheduled treatment.
tooth_numberstringFilter by tooth number.
date_fromstringFilter procedures on or after this date.
date_tostringFilter procedures on or before this date.
provider_uuidstringFilter by rendering provider UUID.
procedure_codestringFilter by procedure code prefix (e.g., 'D23').
treatment_area"arch" | "mouth" | "quadrant" | "sextant" | "tooth"Filter by treatment area. One of: tooth, quadrant, arch, sextant, mouth.
billablebooleanWhen true, return only completed procedures eligible for insurance claim creation.
do_not_bill_insurancebooleanFilter by the insurance do-not-bill flag.
billing_order_code"D" | "DD" | "DM" | "M" | "MD" | "MDD" | "MMD" | "N"Filter by explicit CareStack billing-order letter code.
has_active_claimbooleanFilter by whether a non-voided active claim already references the procedure.
include_deletedbooleanWhen true, include soft-deleted procedures.
Default: false
pageintegerPage number (1-based).
Default: 1
page_sizeintegerNumber of items per page.
Default: 50
Responses
itemsobject[]requiredpageintegerrequiredpage_sizeintegerrequiredtotalintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/procedures" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/procedures" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/spansList procedure spans
List procedure spans for a patient with optional status filter. Raises 404 if the patient is not found.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredQuery Parameters
statusstringFilter by span status (e.g., active, archived).
pageintegerPage number (1-based).
Default: 1
page_sizeintegerNumber of items per page.
Default: 50
Responses
itemsobject[]requiredpageintegerrequiredpage_sizeintegerrequiredtotalintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}Get procedure span
Retrieve a single procedure span by UUID. Raises 404 if not found or the span does not belong to the specified patient.
Parameters
Path Parameters
patient_uuidstringrequiredspan_uuidstringrequiredorg_idstringrequiredResponses
created_atstring (date-time)requiredRecord creation timestamp.
deleted_atstring (date-time)idstring (uuid)requiredUUID of the procedure span.
membersobject[]requiredOrdered list of procedures that make up this span.
notestringrequiredClinical note for this span.
span_definitionobjectLightweight reference to a related entity — exposes UUID and optional name.
statusstringrequiredCurrent status of the span (e.g., 'active', 'completed').
updated_atstring (date-time)requiredRecord last-update timestamp.
versionintegerrequiredCurrent version for optimistic concurrency.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}/membersList span members
List all members of a procedure span. Returns the span's member list with charted procedure references, roles, and position order. Raises 404 if the patient or span is not found, or if the span does not belong to the specified patient.
Parameters
Path Parameters
patient_uuidstringrequiredspan_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}/members" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}/members" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/teeth/{tooth_num}/status-historyGet tooth status history
Get the full status history timeline for a specific tooth. Returns ALL records including superseded and soft-deleted entries, ordered by created_at DESC. This provides a complete audit trail of status changes for the tooth. Raises 404 if the patient is not found.
Parameters
Path Parameters
patient_uuidstringrequiredtooth_numstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/teeth/{tooth_num}/status-history" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/teeth/{tooth_num}/status-history" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-indicatorsGet aggregated tooth indicators
Aggregated tooth indicators from all registered specialty modules. Currently returns indicators from: perio (mobility, furcation). Future modules (endo, ortho) will be added without API changes. Raises 404 if the patient is not found.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredResponses
itemsobject[]requireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-indicators" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-indicators" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-statusesList tooth statuses
List all active tooth statuses for a patient's chart. Returns one record per tooth that has an active status entry. Raises 404 if the patient is not found.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredResponses
itemsobject[]requiredtotalintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-statuses" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-statuses" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans/{plan_uuid}/estimatesList treatment plan estimates
Get all estimates for a treatment plan with effective values. Returns estimates including COALESCE-resolved override values and staleness status for each estimate. Raises 404 if patient or treatment plan not found, or if the plan does not belong to the patient.
Parameters
Path Parameters
patient_uuidstringrequiredplan_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans/{plan_uuid}/estimates" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans/{plan_uuid}/estimates" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans/{plan_uuid}/stalenessCheck estimate staleness
Check which estimates in a treatment plan are stale. Returns a report showing which estimates need re-computation based on changes to fees, benefits, or plan configuration. Raises 404 if patient or treatment plan not found, or if the plan does not belong to the patient.
Parameters
Path Parameters
patient_uuidstringrequiredplan_uuidstringrequiredorg_idstringrequiredResponses
estimatesobject[]requiredPer-estimate staleness details.
fresh_countintegerrequiredEstimates that are up-to-date.
stale_countintegerrequiredEstimates needing re-computation.
total_estimatesintegerrequiredTotal estimate rows.
treatment_plan_uuidstring (uuid)requiredUUID of the treatment plan.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans/{plan_uuid}/staleness" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans/{plan_uuid}/staleness" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/procedures/{procedure_uuid}Get charted procedure
Retrieve a single charted procedure by UUID. Raises 404 if not found.
Parameters
Path Parameters
procedure_uuidstringrequiredorg_idstringrequiredResponses
appointmentobjectLightweight reference to a related entity — exposes UUID and optional name.
archstringbilling_notestringbilling_order_codeenumrequiredEffective CareStack billing-order letter code; N means non-insurance.
DDDDMMMDMDDMMDNbundle_group_idintegerclinical_notestringcode_sentstringcreated_atstring (date-time)requiredRecord creation timestamp.
date_completedstring (date-time)date_original_prostheticstring (date)date_servicestring (date)requiredDate of service.
date_treatment_plannedstring (date)deleted_atstring (date-time)diagnosis_code_1stringdiagnosis_code_2stringdiagnosis_code_3stringdiagnosis_code_4stringdiagnostic_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
do_not_bill_insurancebooleanTrue when this charted procedure is intentionally excluded from insurance claim creation.
effective_feestringrequiredThe fee actually used for finance: fee_override if set, otherwise office_fee.
explosion_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
fee_overridestringfee_sourcestringrequiredHow the effective fee was determined. One of: fee_schedule, override.
has_active_claimbooleanTrue when a non-voided active claim already references this charted procedure.
idstring (uuid)requiredUUID of the charted procedure.
is_prostheticbooleanrequiredWhether this is a prosthetic procedure.
item_orderintegerDisplay order within a treatment plan or visit.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
material_type_codestringnotestringrequiredClinical note for this procedure.
office_feestringrequiredUCR office fee from the fee schedule at charting time. Always the base production amount — never replaced by fee_override.
patientobjectLightweight reference to a related entity — exposes UUID and optional name.
priorityobjectLightweight reference to a related entity — exposes UUID and optional name.
procedure_categorystringprocedure_codestringprocedure_descriptionstringprognosisobjectLightweight reference to a related entity — exposes UUID and optional name.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
quadrantstringsextantstringstatusstringrequiredProcedure lifecycle status. One of: treatment_planned, scheduled, in_progress, complete, complete_referred, existing_current, existing_other, referred.
surfacesstringtooth_numberstringtooth_rangestringupdated_atstring (date-time)requiredRecord last-update timestamp.
versionintegerrequiredCurrent version for optimistic concurrency.
visit_phase_hintintegerdetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/procedures/{procedure_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/procedures/{procedure_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/procedures/active-claim-refsList active claim references for charted procedures
Return a compact active-claim badge read model keyed by procedure UUID.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
procedure_uuidsstring[]requiredCharted procedure UUIDs to look up.
Responses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/procedures/active-claim-refs" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/procedures/active-claim-refs" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/procedures/unscheduled-treatment/agent-worklistList unscheduled treatment worklist for agents
Return an agent-safe worklist without clinical notes, billing notes, contact info, or addresses.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
as_of_datestringOnly include procedures planned on or before this date.
max_resultsintegerMaximum worklist rows to return.
Default: 10
min_fee_centsintegerMinimum total unscheduled treatment value in cents.
Default: 0
min_days_unscheduledintegerOnly include treatment planned at least this many days ago.
location_uuidstringrequiredProcedure location UUID filter. Required for PHI worklist scoping.
sort"oldest_planned_asc" | "value_desc"Sort order for worklist rows.
oldest_planned_ascvalue_descDefault: "value_desc"
Responses
as_of_datestring (date)requireditemsobject[]requiredpage_sizeintegerrequiredtotal_countintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/procedures/unscheduled-treatment/agent-worklist" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/procedures/unscheduled-treatment/agent-worklist" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/chart-bundleCreate procedure bundle
Create a bundle of charted procedures from an explosion code. Resolves each explosion code entry into an individual charted procedure. Optional entries may be excluded via excluded_entry_uuids. Raises 404 if the patient, explosion code, provider, or any referenced entry is not found. Raises 422 if validation fails.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredRequest Body
archenumlowerupperdate_servicestring (date)excluded_entry_uuidsstring (uuid)[]UUIDs of explosion code entries to exclude from this bundle chart.
explosion_code_uuidstring (uuid)requiredUUID of the explosion code (bundle definition) to chart.
location_uuidstring (uuid)notestringprovider_uuidstring (uuid)requiredUUID of the rendering provider.
quadrantenumLLLRULURsextantenum123456surfacesstringtooth_numberstringResponses
bundle_group_idintegerrequiredInternal group ID linking all procedures created from this bundle.
proceduresobject[]requiredList of charted procedures created from the bundle.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/chart-bundle" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"arch": "string",
"date_service": "string",
"excluded_entry_uuids": [],
"explosion_code_uuid": "00000000-0000-0000-0000-000000000000",
"location_uuid": "string",
"provider_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/chart-bundle" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"arch": "string",
"date_service": "string",
"excluded_entry_uuids": [],
"explosion_code_uuid": "00000000-0000-0000-0000-000000000000",
"location_uuid": "string",
"provider_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/clinical/patients/{patient_uuid}/conditionsCreate patient condition
Create a new patient condition record. Defaults date_identified to today if not provided. Raises 404 if the patient, provider, or diagnostic code is not found. Raises 422 if validation fails.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredRequest Body
condition_typeenumrequiredType of condition. One of: caries, fracture, abscess, impaction, open_contact, diastema, abrasion, erosion, attrition, watch, periapical_lesion, periodontal, decalcification, defective_restoration, other.
abrasionabscessankylosisattritioncariesdecalcificationdefective_restorationdiastemadilacerationerosionfracturefracture_rootfusiongeminationhypoplasiaimpactionluxationmacrodontiamicrodontiaopen_contactotherperiapical_lesionperiodontalroot_resorption_externalroot_resorption_internalwatchdate_identifiedstring (date)diagnostic_code_uuidstring (uuid)notestringprovider_uuidstring (uuid)severityenummildmoderateseveresurfacestringtooth_numberstringResponses
condition_typeenumrequiredType of condition. One of: caries, fracture, abscess, impaction, open_contact, diastema, abrasion, erosion, attrition, watch, periapical_lesion, periodontal, decalcification, defective_restoration, other.
abrasionabscessankylosisattritioncariesdecalcificationdefective_restorationdiastemadilacerationerosionfracturefracture_rootfusiongeminationhypoplasiaimpactionluxationmacrodontiamicrodontiaopen_contactotherperiapical_lesionperiodontalroot_resorption_externalroot_resorption_internalwatchcreated_atstring (date-time)requiredRecord creation timestamp.
date_identifiedstring (date)requiredDate the condition was identified.
date_resolvedstring (date)diagnostic_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
idstring (uuid)requiredUUID of the patient condition.
notestringrequiredClinical note describing the condition.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
severityenummildmoderateseverestatusenumrequiredCondition monitoring status. One of: active, resolved, monitoring.
activemonitoringresolvedsurfacestringtooth_numberstringupdated_atstring (date-time)requiredRecord last-update timestamp.
versionintegerrequiredCurrent version for optimistic concurrency.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/conditions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"condition_type": "abrasion",
"date_identified": "string",
"diagnostic_code_uuid": "string",
"note": "string",
"provider_uuid": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/conditions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"condition_type": "abrasion",
"date_identified": "string",
"diagnostic_code_uuid": "string",
"note": "string",
"provider_uuid": "string"
}'/api/v1/{org_id}/clinical/patients/{patient_uuid}/proceduresCreate charted procedure
Create a new charted procedure for a patient. Raises 404 if patient, procedure code, provider, or any referenced entity is not found. Raises 422 if validation fails (e.g., priority_uuid does not reference a priority definition).
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredRequest Body
appointment_uuidstring (uuid)archenumlowerupperbilling_order_codeenumDDDDMMMDMDDMMDNdate_original_prostheticstring (date)date_servicestring (date)diagnostic_code_uuidstring (uuid)do_not_bill_insurancebooleanWhen true, this charted procedure is excluded from insurance claim creation.
fee_overridenumberis_prostheticbooleanWhether this is a prosthetic procedure.
location_uuidstring (uuid)material_type_codestringnotestringpriority_uuidstring (uuid)procedure_code_uuidstring (uuid)requiredUUID of the procedure code to chart.
prognosis_uuidstring (uuid)provider_uuidstring (uuid)requiredUUID of the rendering provider.
quadrantenumLLLRULURsextantenum123456source_procedure_uuidstring (uuid)statusstringsurfacesstringtooth_numberstringtooth_rangestringResponses
appointmentobjectLightweight reference to a related entity — exposes UUID and optional name.
archstringbilling_notestringbilling_order_codeenumrequiredEffective CareStack billing-order letter code; N means non-insurance.
DDDDMMMDMDDMMDNbundle_group_idintegerclinical_notestringcode_sentstringcreated_atstring (date-time)requiredRecord creation timestamp.
date_completedstring (date-time)date_original_prostheticstring (date)date_servicestring (date)requiredDate of service.
date_treatment_plannedstring (date)deleted_atstring (date-time)diagnosis_code_1stringdiagnosis_code_2stringdiagnosis_code_3stringdiagnosis_code_4stringdiagnostic_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
do_not_bill_insurancebooleanTrue when this charted procedure is intentionally excluded from insurance claim creation.
effective_feestringrequiredThe fee actually used for finance: fee_override if set, otherwise office_fee.
explosion_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
fee_overridestringfee_sourcestringrequiredHow the effective fee was determined. One of: fee_schedule, override.
has_active_claimbooleanTrue when a non-voided active claim already references this charted procedure.
idstring (uuid)requiredUUID of the charted procedure.
is_prostheticbooleanrequiredWhether this is a prosthetic procedure.
item_orderintegerDisplay order within a treatment plan or visit.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
material_type_codestringnotestringrequiredClinical note for this procedure.
office_feestringrequiredUCR office fee from the fee schedule at charting time. Always the base production amount — never replaced by fee_override.
patientobjectLightweight reference to a related entity — exposes UUID and optional name.
priorityobjectLightweight reference to a related entity — exposes UUID and optional name.
procedure_categorystringprocedure_codestringprocedure_descriptionstringprognosisobjectLightweight reference to a related entity — exposes UUID and optional name.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
quadrantstringsextantstringstatusstringrequiredProcedure lifecycle status. One of: treatment_planned, scheduled, in_progress, complete, complete_referred, existing_current, existing_other, referred.
surfacesstringtooth_numberstringtooth_rangestringupdated_atstring (date-time)requiredRecord last-update timestamp.
versionintegerrequiredCurrent version for optimistic concurrency.
visit_phase_hintintegerdetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/procedures" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"appointment_uuid": "string",
"arch": "string",
"billing_order_code": "string",
"date_original_prosthetic": "string",
"date_service": "string",
"procedure_code_uuid": "00000000-0000-0000-0000-000000000000",
"provider_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/procedures" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"appointment_uuid": "string",
"arch": "string",
"billing_order_code": "string",
"date_original_prosthetic": "string",
"date_service": "string",
"procedure_code_uuid": "00000000-0000-0000-0000-000000000000",
"provider_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/clinical/patients/{patient_uuid}/procedures/bulkBulk import procedures
Bulk import up to 500 charted procedures for a patient. Raises 404 if the patient is not found. Raises 422 if any row fails validation; per-row errors are returned in the response body.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredRequest Body
metaobjectTop-level execution options for a bulk request.
rowsobject[]requiredResponses
createdintegerfailedintegerresultsobject[]requiredskippedintegertotalintegerrequiredupdatedintegervalidatedintegerdetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/procedures/bulk" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"meta": {},
"rows": []
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/procedures/bulk" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"meta": {},
"rows": []
}'/api/v1/{org_id}/clinical/patients/{patient_uuid}/spansCreate procedure span
Create a new procedure span linking multiple charted procedures. Raises 404 if the patient, span definition, or any member charted procedure is not found. Raises 422 if validation fails.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredRequest Body
membersobject[]requiredList of charted procedures to include in the span. At least one required.
notestringspan_definition_uuidstring (uuid)requiredUUID of the span definition that governs this span.
Responses
created_atstring (date-time)requiredRecord creation timestamp.
deleted_atstring (date-time)idstring (uuid)requiredUUID of the procedure span.
membersobject[]requiredOrdered list of procedures that make up this span.
notestringrequiredClinical note for this span.
span_definitionobjectLightweight reference to a related entity — exposes UUID and optional name.
statusstringrequiredCurrent status of the span (e.g., 'active', 'completed').
updated_atstring (date-time)requiredRecord last-update timestamp.
versionintegerrequiredCurrent version for optimistic concurrency.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"members": [],
"note": "string",
"span_definition_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"members": [],
"note": "string",
"span_definition_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-statuses/seedSeed initial dentition
Seed or refresh tooth status records for a patient based on date of birth. Modes: - ``age_based``: Initial setup for new patients. Creates all age-appropriate teeth. Idempotent: returns 0 if patient already has records. - ``reseed``: Refresh from current DOB. Soft-deletes all ``age_seeded`` records and re-seeds from the current DOB. Preserves clinician-set statuses (source = manual, clinical_chart, imported). Use for DOB corrections or returning patients. Raises 404 if the patient is not found. Raises 422 if the patient has no date of birth or mode is invalid.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredRequest Body
modestringrequiredSeeding mode: 'age_based' for initial setup (empty charts only), 'reseed' to refresh from current DOB (replaces age_seeded records, preserves clinician-set statuses).
Responses
teeth_removedintegerNumber of stale age_seeded records removed (reseed mode only).
teeth_seededintegerrequiredNumber of tooth status records created. 0 if already seeded.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-statuses/seed" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-statuses/seed" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "string"
}'/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-transitionAtomic tooth transition
Atomically transition a primary tooth to its permanent successor. Sets both the primary tooth status and the successor tooth status in a single database transaction. Validates the succession mapping (e.g., D→7 is valid, D→14 is not). The primary_tooth_number must have a known permanent successor, and the provided successor_tooth_number must match that expected successor. Raises 422 if the succession mapping is invalid or field validation fails. Raises 404 if the patient is not found.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredRequest Body
primary_statusenumrequiredStatus to set on the primary tooth. One of: over_retained, exfoliating.
exfoliatingover_retainedprimary_tooth_numberstringrequiredPrimary tooth letter (A-T).
successor_eruption_pctintegersuccessor_eruption_stagestringsuccessor_root_completionstringsuccessor_statusenumrequiredStatus to set on the successor tooth. One of: partially_erupted, present.
partially_eruptedpresentsuccessor_tooth_numberstringrequiredPermanent successor tooth number (1-32).
Responses
primaryobjectrequiredOutput schema for a tooth status record.
successorobjectrequiredOutput schema for a tooth status record.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-transition" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"primary_status": "exfoliating",
"primary_tooth_number": "string",
"successor_eruption_pct": 1,
"successor_eruption_stage": "string",
"successor_root_completion": "string",
"successor_status": "partially_erupted",
"successor_tooth_number": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-transition" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"primary_status": "exfoliating",
"primary_tooth_number": "string",
"successor_eruption_pct": 1,
"successor_eruption_stage": "string",
"successor_root_completion": "string",
"successor_status": "partially_erupted",
"successor_tooth_number": "string"
}'/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans/{plan_uuid}/estimateEstimate treatment plan
Run insurance estimation for all procedures in a treatment plan. Estimates each procedure against each of the patient's active insurance plans in COB order. Creates or updates ProcedureEstimate rows. Raises 404 if patient, treatment plan, or patient plans not found. Raises 422 if patient has no active insurance plans.
Parameters
Path Parameters
patient_uuidstringrequiredplan_uuidstringrequiredorg_idstringrequiredResponses
estimate_countintegerrequiredTotal number of estimates.
estimatesobject[]requiredIndividual estimate results.
stale_countintegerrequiredNumber of stale estimates.
total_fee_billedstringrequiredSum of all fee_billed amounts.
total_insurance_estimatestringrequiredSum of all effective insurance estimates.
total_patient_estimatestringrequiredSum of all patient estimates.
total_write_offstringrequiredSum of all effective write-off amounts.
treatment_plan_uuidstring (uuid)requiredUUID of the treatment plan that was estimated.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans/{plan_uuid}/estimate" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans/{plan_uuid}/estimate" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans/{plan_uuid}/re-estimateRe-estimate treatment plan
Re-estimate stale estimates in a treatment plan. By default only re-estimates stale estimates (where inputs_hash differs). Set force=true to re-estimate all regardless of staleness. Raises 404 if patient or treatment plan not found.
Parameters
Path Parameters
patient_uuidstringrequiredplan_uuidstringrequiredorg_idstringrequiredRequest Body
forcebooleanIf true, re-estimate all procedures regardless of staleness.
Responses
estimate_countintegerrequiredTotal number of estimates.
estimatesobject[]requiredIndividual estimate results.
stale_countintegerrequiredNumber of stale estimates.
total_fee_billedstringrequiredSum of all fee_billed amounts.
total_insurance_estimatestringrequiredSum of all effective insurance estimates.
total_patient_estimatestringrequiredSum of all patient estimates.
total_write_offstringrequiredSum of all effective write-off amounts.
treatment_plan_uuidstring (uuid)requiredUUID of the treatment plan that was estimated.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans/{plan_uuid}/re-estimate" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"force": false
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans/{plan_uuid}/re-estimate" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"force": false
}'/api/v1/{org_id}/clinical/procedures/{procedure_uuid}/completeComplete charted procedure
Mark a charted procedure as completed. Transitions the procedure to completed status and records the service date. Raises 404 if not found. Raises 409 if base_version is stale. Raises 422 if the procedure is not in a completable status.
Parameters
Path Parameters
procedure_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
date_servicestring (date)notestringResponses
appointmentobjectLightweight reference to a related entity — exposes UUID and optional name.
archstringbilling_notestringbilling_order_codeenumrequiredEffective CareStack billing-order letter code; N means non-insurance.
DDDDMMMDMDDMMDNbundle_group_idintegerclinical_notestringcode_sentstringcreated_atstring (date-time)requiredRecord creation timestamp.
date_completedstring (date-time)date_original_prostheticstring (date)date_servicestring (date)requiredDate of service.
date_treatment_plannedstring (date)deleted_atstring (date-time)diagnosis_code_1stringdiagnosis_code_2stringdiagnosis_code_3stringdiagnosis_code_4stringdiagnostic_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
do_not_bill_insurancebooleanTrue when this charted procedure is intentionally excluded from insurance claim creation.
effective_feestringrequiredThe fee actually used for finance: fee_override if set, otherwise office_fee.
explosion_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
fee_overridestringfee_sourcestringrequiredHow the effective fee was determined. One of: fee_schedule, override.
has_active_claimbooleanTrue when a non-voided active claim already references this charted procedure.
idstring (uuid)requiredUUID of the charted procedure.
is_prostheticbooleanrequiredWhether this is a prosthetic procedure.
item_orderintegerDisplay order within a treatment plan or visit.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
material_type_codestringnotestringrequiredClinical note for this procedure.
office_feestringrequiredUCR office fee from the fee schedule at charting time. Always the base production amount — never replaced by fee_override.
patientobjectLightweight reference to a related entity — exposes UUID and optional name.
priorityobjectLightweight reference to a related entity — exposes UUID and optional name.
procedure_categorystringprocedure_codestringprocedure_descriptionstringprognosisobjectLightweight reference to a related entity — exposes UUID and optional name.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
quadrantstringsextantstringstatusstringrequiredProcedure lifecycle status. One of: treatment_planned, scheduled, in_progress, complete, complete_referred, existing_current, existing_other, referred.
surfacesstringtooth_numberstringtooth_rangestringupdated_atstring (date-time)requiredRecord last-update timestamp.
versionintegerrequiredCurrent version for optimistic concurrency.
visit_phase_hintintegerdetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/procedures/{procedure_uuid}/complete" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"date_service": "string",
"note": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/procedures/{procedure_uuid}/complete" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"date_service": "string",
"note": "string"
}'/api/v1/{org_id}/clinical/procedures/{procedure_uuid}/transitionTransition procedure status
Transition a charted procedure to a target status. Raises 404 if not found. Raises 409 if base_version is stale. Raises 422 if the requested status transition is not allowed.
Parameters
Path Parameters
procedure_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
notestringstatusstringrequiredTarget procedure status. One of: treatment_planned, scheduled, in_progress, complete, complete_referred, existing_current, existing_other, referred.
Responses
appointmentobjectLightweight reference to a related entity — exposes UUID and optional name.
archstringbilling_notestringbilling_order_codeenumrequiredEffective CareStack billing-order letter code; N means non-insurance.
DDDDMMMDMDDMMDNbundle_group_idintegerclinical_notestringcode_sentstringcreated_atstring (date-time)requiredRecord creation timestamp.
date_completedstring (date-time)date_original_prostheticstring (date)date_servicestring (date)requiredDate of service.
date_treatment_plannedstring (date)deleted_atstring (date-time)diagnosis_code_1stringdiagnosis_code_2stringdiagnosis_code_3stringdiagnosis_code_4stringdiagnostic_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
do_not_bill_insurancebooleanTrue when this charted procedure is intentionally excluded from insurance claim creation.
effective_feestringrequiredThe fee actually used for finance: fee_override if set, otherwise office_fee.
explosion_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
fee_overridestringfee_sourcestringrequiredHow the effective fee was determined. One of: fee_schedule, override.
has_active_claimbooleanTrue when a non-voided active claim already references this charted procedure.
idstring (uuid)requiredUUID of the charted procedure.
is_prostheticbooleanrequiredWhether this is a prosthetic procedure.
item_orderintegerDisplay order within a treatment plan or visit.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
material_type_codestringnotestringrequiredClinical note for this procedure.
office_feestringrequiredUCR office fee from the fee schedule at charting time. Always the base production amount — never replaced by fee_override.
patientobjectLightweight reference to a related entity — exposes UUID and optional name.
priorityobjectLightweight reference to a related entity — exposes UUID and optional name.
procedure_categorystringprocedure_codestringprocedure_descriptionstringprognosisobjectLightweight reference to a related entity — exposes UUID and optional name.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
quadrantstringsextantstringstatusstringrequiredProcedure lifecycle status. One of: treatment_planned, scheduled, in_progress, complete, complete_referred, existing_current, existing_other, referred.
surfacesstringtooth_numberstringtooth_rangestringupdated_atstring (date-time)requiredRecord last-update timestamp.
versionintegerrequiredCurrent version for optimistic concurrency.
visit_phase_hintintegerdetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/procedures/{procedure_uuid}/transition" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"note": "string",
"status": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/procedures/{procedure_uuid}/transition" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"note": "string",
"status": "string"
}'/api/v1/{org_id}/clinical/procedures/{procedure_uuid}/voidVoid completed procedure
Void a completed procedure and remove any treatment-plan links. Raises 404 if not found, 409 if base_version is stale, and 422 if the procedure is not in a voidable completed status.
Parameters
Path Parameters
procedure_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
reasonstringResponses
appointmentobjectLightweight reference to a related entity — exposes UUID and optional name.
archstringbilling_notestringbilling_order_codeenumrequiredEffective CareStack billing-order letter code; N means non-insurance.
DDDDMMMDMDDMMDNbundle_group_idintegerclinical_notestringcode_sentstringcreated_atstring (date-time)requiredRecord creation timestamp.
date_completedstring (date-time)date_original_prostheticstring (date)date_servicestring (date)requiredDate of service.
date_treatment_plannedstring (date)deleted_atstring (date-time)diagnosis_code_1stringdiagnosis_code_2stringdiagnosis_code_3stringdiagnosis_code_4stringdiagnostic_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
do_not_bill_insurancebooleanTrue when this charted procedure is intentionally excluded from insurance claim creation.
effective_feestringrequiredThe fee actually used for finance: fee_override if set, otherwise office_fee.
explosion_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
fee_overridestringfee_sourcestringrequiredHow the effective fee was determined. One of: fee_schedule, override.
has_active_claimbooleanTrue when a non-voided active claim already references this charted procedure.
idstring (uuid)requiredUUID of the charted procedure.
is_prostheticbooleanrequiredWhether this is a prosthetic procedure.
item_orderintegerDisplay order within a treatment plan or visit.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
material_type_codestringnotestringrequiredClinical note for this procedure.
office_feestringrequiredUCR office fee from the fee schedule at charting time. Always the base production amount — never replaced by fee_override.
patientobjectLightweight reference to a related entity — exposes UUID and optional name.
priorityobjectLightweight reference to a related entity — exposes UUID and optional name.
procedure_categorystringprocedure_codestringprocedure_descriptionstringprognosisobjectLightweight reference to a related entity — exposes UUID and optional name.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
quadrantstringsextantstringstatusstringrequiredProcedure lifecycle status. One of: treatment_planned, scheduled, in_progress, complete, complete_referred, existing_current, existing_other, referred.
surfacesstringtooth_numberstringtooth_rangestringupdated_atstring (date-time)requiredRecord last-update timestamp.
versionintegerrequiredCurrent version for optimistic concurrency.
visit_phase_hintintegerdetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/procedures/{procedure_uuid}/void" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"reason": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/procedures/{procedure_uuid}/void" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"reason": "string"
}'/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-statusesSet tooth status
Set (upsert) the status of a specific tooth for a patient. Creates a new tooth status record or supersedes an existing one for the same tooth. Optional expected_version enforces optimistic concurrency. Raises 404 if the patient or referenced charted procedure is not found. Raises 409 if expected_version is stale. Raises 422 if validation fails.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredRequest Body
charted_procedure_uuidstring (uuid)ectopic_slot_indexintegereffective_datestring (date)eruption_pctintegereruption_stagestringexpected_versionintegerimpaction_anglestringimpaction_depthstringnotestringroot_completionstringrotatenumberRotation angle in degrees (-180 to +180).
scale_factornumbershift_bnumberBuccal shift in mm (-10 to +10).
shift_mnumberMesial shift in mm (-10 to +10).
shift_onumberOcclusal shift in mm (-10 to +10).
sourcestringstatusstringrequiredTooth status classification. One of: present, missing, primary, prosthetic, unerupted, supernumerary, hidden, congenitally_absent, partially_erupted, over_retained, residual_root, impacted, avulsed, exfoliating.
tip_bnumberBuccal tip angle in degrees (-45 to +45).
tip_mnumberMesial tip angle in degrees (-45 to +45).
tooth_numberstringrequiredUniversal tooth number (1-32 permanent, A-T primary).
transposition_withstringResponses
created_atstring (date-time)requiredRecord creation timestamp.
ectopic_slot_indexintegereffective_datestring (date)requiredDate this status became effective.
eruption_pctintegereruption_stagestringidstring (uuid)requiredUUID of the tooth status record.
impaction_anglestringimpaction_depthstringnotestringrequiredClinical note for this tooth status entry.
root_completionstringrotatenumberrequiredRotation angle in degrees (-180 to +180).
scale_factornumbershift_bnumberrequiredBuccal shift in mm (-10 to +10).
shift_mnumberrequiredMesial shift in mm (-10 to +10).
shift_onumberrequiredOcclusal shift in mm (-10 to +10).
sourcestringrequiredSource of the tooth status data. One of: manual, imported, clinical_chart.
statusstringrequiredTooth status classification. One of: present, missing, primary, prosthetic, unerupted, supernumerary, hidden, congenitally_absent, partially_erupted, over_retained, residual_root, impacted, avulsed, exfoliating.
tip_bnumberrequiredBuccal tip angle in degrees (-45 to +45).
tip_mnumberrequiredMesial tip angle in degrees (-45 to +45).
tooth_numberstringrequiredUniversal tooth number (1-32 permanent, A-T primary).
transposition_withstringupdated_atstring (date-time)requiredRecord last-update timestamp.
versionintegerrequiredCurrent version for optimistic concurrency.
detailobject[]curl -X PUT "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-statuses" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"charted_procedure_uuid": "string",
"ectopic_slot_index": 1,
"effective_date": "string",
"eruption_pct": 1,
"eruption_stage": "string",
"status": "string",
"tooth_number": "string"
}'curl -X PUT "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/tooth-statuses" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"charted_procedure_uuid": "string",
"ectopic_slot_index": 1,
"effective_date": "string",
"eruption_pct": 1,
"eruption_stage": "string",
"status": "string",
"tooth_number": "string"
}'/api/v1/{org_id}/clinical/conditions/{condition_uuid}Update patient condition
Partially update a patient condition, or resolve it. If status is set to 'resolved', the condition is resolved and date_resolved is set to today. Otherwise performs a standard partial update. Raises 404 if not found. Raises 409 if base_version is stale. Raises 422 if validation fails.
Parameters
Path Parameters
condition_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
notestringseverityenummildmoderateseverestatusenumactivemonitoringresolvedsurfacestringResponses
condition_typeenumrequiredType of condition. One of: caries, fracture, abscess, impaction, open_contact, diastema, abrasion, erosion, attrition, watch, periapical_lesion, periodontal, decalcification, defective_restoration, other.
abrasionabscessankylosisattritioncariesdecalcificationdefective_restorationdiastemadilacerationerosionfracturefracture_rootfusiongeminationhypoplasiaimpactionluxationmacrodontiamicrodontiaopen_contactotherperiapical_lesionperiodontalroot_resorption_externalroot_resorption_internalwatchcreated_atstring (date-time)requiredRecord creation timestamp.
date_identifiedstring (date)requiredDate the condition was identified.
date_resolvedstring (date)diagnostic_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
idstring (uuid)requiredUUID of the patient condition.
notestringrequiredClinical note describing the condition.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
severityenummildmoderateseverestatusenumrequiredCondition monitoring status. One of: active, resolved, monitoring.
activemonitoringresolvedsurfacestringtooth_numberstringupdated_atstring (date-time)requiredRecord last-update timestamp.
versionintegerrequiredCurrent version for optimistic concurrency.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical/conditions/{condition_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"note": "string",
"severity": "string",
"status": "string",
"surface": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical/conditions/{condition_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"note": "string",
"severity": "string",
"status": "string",
"surface": "string"
}'/api/v1/{org_id}/clinical/estimates/{estimate_uuid}/overridesSet estimate overrides
Set override values on a procedure estimate. Override values take precedence over calculated values via the COALESCE pattern: effective_value = COALESCE(override, calculated). Only fields present in the request body are updated. Set a field to null to clear that override. Raises 404 if estimate not found. Raises 409 if base_version doesn't match (optimistic concurrency).
Parameters
Path Parameters
estimate_uuidstringrequiredorg_idstringrequiredRequest Body
allowed_overridenumberbase_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
copay_overridenumberdeductible_overridenumberinsurance_estimate_overridenumberpercentage_overridenumberwrite_off_overridenumberResponses
allowed_feestringbase_estimatestringrequiredBase estimate before deductible and coverage calculations in dollars.
calculated_atstring (date-time)charted_procedure_uuidstring (uuid)requiredUUID of the charted procedure this estimate belongs to.
code_sentstringcopay_amountstringrequiredFixed copay amount in dollars.
coverage_percentstringrequiredInsurance coverage percentage for this procedure (0–100).
created_atstring (date-time)requiredRecord creation timestamp.
date_estimatedstring (date-time)requiredTimestamp when this estimate was calculated.
deductible_appliedstringrequiredDeductible amount applied to this procedure in dollars.
effective_allowed_feestringeffective_copaystringrequiredCOALESCE(copay_override, copay_amount).
effective_coverage_percentstringrequiredCOALESCE(percentage_override, coverage_percent).
effective_deductiblestringrequiredCOALESCE(deductible_override, deductible_applied).
effective_insurance_estimatestringrequiredCOALESCE(insurance_estimate_override, insurance_estimate).
effective_write_offstringrequiredCOALESCE(write_off_override, write_off_estimate).
estimate_notestringrequiredNote or explanation associated with this estimate.
estimate_statusstringrequiredAuthorization status of the estimate. One of: estimate, preauth, preauth_received.
exclusion_reasonstringfee_billedstringrequiredFee amount billed to insurance in dollars.
has_allowed_overridebooleanTrue if allowed_override is set.
has_copay_overridebooleanTrue if copay_override is set.
has_deductible_overridebooleanTrue if deductible_override is set.
has_insurance_estimate_overridebooleanTrue if insurance_estimate_override is set.
has_percentage_overridebooleanTrue if percentage_override is set.
has_write_off_overridebooleanTrue if write_off_override is set.
idstring (uuid)requiredUUID of the procedure estimate.
inputs_hashstringinsurance_estimatestringrequiredEstimated insurance payment in dollars.
is_excludedbooleanrequiredWhether this estimate is excluded from benefit calculations.
is_stalebooleanrequiredTrue if the estimate needs re-computation.
ordinalintegerrequiredOrdinal position when multiple estimates exist for the same procedure (e.g., primary vs. secondary insurance).
paid_other_insurancestringrequiredAmount paid by another insurance plan (coordination of benefits) in dollars.
patient_estimatestringrequiredEstimated patient responsibility in dollars.
ppo_feestringpreauth_amountstringpreauth_datestring (date)preauth_numberstringupdated_atstring (date-time)requiredRecord last-update timestamp.
versionintegerrequiredCurrent version for optimistic concurrency.
write_off_estimatestringrequiredEstimated contractual write-off amount in dollars.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical/estimates/{estimate_uuid}/overrides" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"allowed_override": null,
"base_version": 1,
"copay_override": null,
"deductible_override": null,
"insurance_estimate_override": null
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical/estimates/{estimate_uuid}/overrides" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"allowed_override": null,
"base_version": 1,
"copay_override": null,
"deductible_override": null,
"insurance_estimate_override": null
}'/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}Update procedure span
Partially update a procedure span. Raises 404 if not found or the span does not belong to the specified patient. Raises 409 if base_version is stale. Raises 422 if validation fails.
Parameters
Path Parameters
patient_uuidstringrequiredspan_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
notestringstatusstringResponses
created_atstring (date-time)requiredRecord creation timestamp.
deleted_atstring (date-time)idstring (uuid)requiredUUID of the procedure span.
membersobject[]requiredOrdered list of procedures that make up this span.
notestringrequiredClinical note for this span.
span_definitionobjectLightweight reference to a related entity — exposes UUID and optional name.
statusstringrequiredCurrent status of the span (e.g., 'active', 'completed').
updated_atstring (date-time)requiredRecord last-update timestamp.
versionintegerrequiredCurrent version for optimistic concurrency.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"note": "string",
"status": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"note": "string",
"status": "string"
}'/api/v1/{org_id}/clinical/procedures/{procedure_uuid}Update charted procedure
Partially update a charted procedure. Raises 404 if not found. Raises 409 if base_version is stale. Raises 422 if validation fails (e.g., invalid status transition).
Parameters
Path Parameters
procedure_uuidstringrequiredorg_idstringrequiredRequest Body
archenumlowerupperbase_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
billing_notestringbilling_order_codeenumDDDDMMMDMDDMMDNclinical_notestringdate_original_prostheticstring (date)date_servicestring (date)diagnostic_code_uuidstring (uuid)do_not_bill_insurancebooleanfee_overridenumberis_prostheticbooleanmaterial_type_codestringnotestringpriority_uuidstring (uuid)procedure_code_uuidstring (uuid)prognosis_uuidstring (uuid)quadrantenumLLLRULURsextantenum123456surfacesstringtooth_numberstringtooth_rangestringResponses
appointmentobjectLightweight reference to a related entity — exposes UUID and optional name.
archstringbilling_notestringbilling_order_codeenumrequiredEffective CareStack billing-order letter code; N means non-insurance.
DDDDMMMDMDDMMDNbundle_group_idintegerclinical_notestringcode_sentstringcreated_atstring (date-time)requiredRecord creation timestamp.
date_completedstring (date-time)date_original_prostheticstring (date)date_servicestring (date)requiredDate of service.
date_treatment_plannedstring (date)deleted_atstring (date-time)diagnosis_code_1stringdiagnosis_code_2stringdiagnosis_code_3stringdiagnosis_code_4stringdiagnostic_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
do_not_bill_insurancebooleanTrue when this charted procedure is intentionally excluded from insurance claim creation.
effective_feestringrequiredThe fee actually used for finance: fee_override if set, otherwise office_fee.
explosion_codeobjectLightweight reference to a related entity — exposes UUID and optional name.
fee_overridestringfee_sourcestringrequiredHow the effective fee was determined. One of: fee_schedule, override.
has_active_claimbooleanTrue when a non-voided active claim already references this charted procedure.
idstring (uuid)requiredUUID of the charted procedure.
is_prostheticbooleanrequiredWhether this is a prosthetic procedure.
item_orderintegerDisplay order within a treatment plan or visit.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
material_type_codestringnotestringrequiredClinical note for this procedure.
office_feestringrequiredUCR office fee from the fee schedule at charting time. Always the base production amount — never replaced by fee_override.
patientobjectLightweight reference to a related entity — exposes UUID and optional name.
priorityobjectLightweight reference to a related entity — exposes UUID and optional name.
procedure_categorystringprocedure_codestringprocedure_descriptionstringprognosisobjectLightweight reference to a related entity — exposes UUID and optional name.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
quadrantstringsextantstringstatusstringrequiredProcedure lifecycle status. One of: treatment_planned, scheduled, in_progress, complete, complete_referred, existing_current, existing_other, referred.
surfacesstringtooth_numberstringtooth_rangestringupdated_atstring (date-time)requiredRecord last-update timestamp.
versionintegerrequiredCurrent version for optimistic concurrency.
visit_phase_hintintegerdetailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical/procedures/{procedure_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"arch": "string",
"base_version": 1,
"billing_note": "string",
"billing_order_code": "string",
"clinical_note": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical/procedures/{procedure_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"arch": "string",
"base_version": 1,
"billing_note": "string",
"billing_order_code": "string",
"clinical_note": "string"
}'/api/v1/{org_id}/clinical/conditions/{condition_uuid}Delete patient condition
Soft-delete a patient condition. Raises 404 if not found, 409 if base_version is stale.
Parameters
Path Parameters
condition_uuidstringrequiredorg_idstringrequiredQuery Parameters
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
Responses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/conditions/{condition_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/conditions/{condition_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/procedures/{procedure_uuid}/estimates/{estimate_uuid}Delete procedure estimate
Soft-delete a procedure estimate. Archives the estimate, removing it from active calculations. Raises 404 if the patient, procedure, or estimate is not found. Raises 409 if base_version is stale.
Parameters
Path Parameters
patient_uuidstringrequiredprocedure_uuidstringrequiredestimate_uuidstringrequiredorg_idstringrequiredQuery Parameters
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
Responses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/procedures/{procedure_uuid}/estimates/{estimate_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/procedures/{procedure_uuid}/estimates/{estimate_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}Delete procedure span
Soft-delete a procedure span. Raises 404 if not found or span does not belong to the patient, 409 if base_version is stale.
Parameters
Path Parameters
patient_uuidstringrequiredspan_uuidstringrequiredorg_idstringrequiredQuery Parameters
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
Responses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}/cascadeCascade delete span with procedures
Cascade-delete a span: soft-delete the span, hard-delete member rows, and soft-delete all non-completed member procedures. Completed and complete_referred procedures are preserved as standalone records. Raises 404 if not found, 409 if base_version is stale.
Parameters
Path Parameters
patient_uuidstringrequiredspan_uuidstringrequiredorg_idstringrequiredQuery Parameters
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
Responses
deleted_procedure_uuidsstring (uuid)[]requiredProcedures that were soft-deleted.
preserved_procedure_uuidsstring (uuid)[]requiredCompleted procedures that were preserved as standalone records.
span_uuidstring (uuid)requiredUUID of the deleted span.
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}/cascade" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/spans/{span_uuid}/cascade" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/procedures/{procedure_uuid}Delete charted procedure
Soft-delete a charted procedure and remove treatment-plan links. Raises 404 if not found, 409 if base_version is stale, 422 if procedure is in a non-deletable status (complete, complete_referred).
Parameters
Path Parameters
procedure_uuidstringrequiredorg_idstringrequiredQuery Parameters
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
Responses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/procedures/{procedure_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/procedures/{procedure_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/tooth-statuses/{status_uuid}Delete tooth status
Soft-delete a tooth status record. Supersedes the record and marks it as deleted, removing the tooth from the active chart. Idempotent: returns 204 if already deleted. Raises 404 if not found, 409 if base_version is stale.
Parameters
Path Parameters
status_uuidstringrequiredorg_idstringrequiredQuery Parameters
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
Responses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/tooth-statuses/{status_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/tooth-statuses/{status_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"Clinical Notes
58 endpoints
/api/v1/{org_id}/clinical-notes/auto-rulesList auto-note rules
List auto-note rules with optional filters. Returns a paginated list ordered by priority (desc), name (asc).
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
trigger_eventstringFilter by trigger event type.
is_activebooleanFilter by active status.
pageintegerPage number (1-based).
Default: 1
page_sizeintegerNumber of items per page.
Default: 50
Responses
itemsobject[]requiredList of auto-note rules.
pageintegerrequiredCurrent page number (1-based).
page_sizeintegerrequiredNumber of items per page.
totalintegerrequiredTotal number of matching rules.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/auto-rules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/auto-rules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/auto-rules/{rule_uuid}Get auto-note rule
Get a single auto-note rule by UUID. Raises 404 if the rule does not exist.
Parameters
Path Parameters
rule_uuidstringrequiredorg_idstringrequiredResponses
created_atstring (date-time)requiredWhen the rule was created.
descriptionstringidstring (uuid)requiredPublic UUID of the auto-note rule.
is_activebooleanrequiredWhether the rule is active.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
merge_strategystringrequiredHow auto-generated notes are merged.
namestringrequiredDisplay name of the rule.
priorityintegerrequiredRule priority (higher = evaluated first).
procedure_categorystringprocedure_code_patternstringproviderobjectLightweight reference to a related entity — exposes UUID and optional name.
templateobjectLightweight reference to a related entity — exposes UUID and optional name.
trigger_eventstringrequiredEvent that triggers note generation.
updated_atstring (date-time)requiredWhen the rule was last updated.
versionintegerrequiredCurrent version for optimistic concurrency.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/auto-rules/{rule_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/auto-rules/{rule_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}Get clinical note
Get a single clinical note by ID.
Parameters
Path Parameters
note_uuidstringrequiredorg_idstringrequiredResponses
addendumsobject[]Addendum notes linked to this note, ordered by created_at ASC.
case_idstringcontentstringrequiredNote content (rendered from template or manually entered).
content_editedbooleanrequiredWhether the content has been manually edited after generation.
content_formatenumrequiredContent format. One of: plain_text, markdown.
markdownplain_textcontent_modeenumrequiredAuthoritative content ownership mode. structured means template field responses are canonical; manual_override means templated content was user-edited; flattened_narrative means narrative content is canonical; signed_snapshot means the immutable signed snapshot is canonical.
flattened_narrativemanual_overridesigned_snapshotstructuredcreated_atstring (date-time)requiredTimestamp when the note was created.
deleted_atstring (date-time)field_response_itemsobject[]Structured field responses for templated notes.
field_stateobjectServer-owned field-state evaluation for a note detail response.
generation_sourceenumrequiredHow the note was created. One of: manual, template, auto_rule, ai_generated, ai_scribe.
ai_generatedai_scribeauto_rulemanualtemplateidstring (uuid)requiredUnique identifier of the clinical note.
is_lockedbooleanrequiredWhether the note is locked (signed notes are automatically locked).
is_signedbooleanrequiredWhether the note has been signed by a provider.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
note_datestring (date)requiredPractice-local calendar date in YYYY-MM-DD format. Clients resolve the note location's IANA timezone before sending; the API stores and filters this as a date-only value, not a UTC datetime.
note_typeenumrequiredType of note. One of: procedure, exam, hygiene, consultation, phone_call, general, addendum, treatment_plan, referral, lab.
addendumconsultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planparent_note_uuidstring (uuid)patientobjectLightweight reference to a related entity — exposes UUID and optional name.
primary_procedure_uuidstring (uuid)procedure_uuidsstring (uuid)[]UUIDs of charted procedures linked to this note.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
render_contract_versionintegerrerender_snapshotobjectMetadata returned when a draft note is explicitly re-rendered from structured fields.
signed_atstring (date-time)signed_byobjectLightweight reference to a related entity — exposes UUID and optional name.
signed_contentstringsigned_content_formatenummarkdownplain_textsigned_plain_textstringsigning_readinessobjectServer-owned signing readiness summary for note detail and unsigned queue rows.
templateobjectLightweight reference to a related entity — exposes UUID and optional name.
template_sign_deadline_hoursintegertemplate_uuidstring (uuid)template_versionintegertemplate_version_uuidstring (uuid)updated_atstring (date-time)requiredTimestamp of the last update.
versionintegerrequiredCurrent version number for optimistic concurrency.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/favoritesList template favorites
List the current user's pinned note templates.
Parameters
Path Parameters
org_idstringrequiredResponses
itemsobject[]requiredThe user's pinned template favorites.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/favorites" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/favorites" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/option-listsList clinical option lists
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
searchstringSearch key, name, description, category, or specialty.
categorystringFilter by clinical category.
status"archived" | "draft" | "published"Filter by status: draft, published, archived.
active_onlybooleanOnly return active option lists.
Default: true
pageintegerPage number (1-based).
Default: 1
page_sizeintegerItems per page.
Default: 50
Responses
itemsobject[]requiredOption lists on this page.
pageintegerrequiredCurrent page.
page_sizeintegerrequiredItems per page.
totalintegerrequiredTotal matching option lists.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/option-lists" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/option-lists" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}Get clinical option list
Parameters
Path Parameters
option_list_uuidstringrequiredorg_idstringrequiredResponses
categorystringcreated_atstring (date-time)requiredCreation timestamp.
descriptionstringidstring (uuid)requiredOption-list UUID.
is_activebooleanrequiredWhether available for use.
item_orderintegerrequiredSort order.
keystringrequiredStable practice-scoped key.
namestringrequiredDisplay name.
published_versionintegerspecialtystringstatusenumrequireddraft, published, or archived.
archiveddraftpublishedupdated_atstring (date-time)requiredUpdate timestamp.
usage_countintegerNumber of templates referencing this option list.
versionintegerrequiredOptimistic concurrency version.
versionsobject[]Known versions.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}/usageGet clinical option-list usage
Parameters
Path Parameters
option_list_uuidstringrequiredorg_idstringrequiredResponses
itemsobject[]Referencing fields.
option_list_idstring (uuid)requiredOption-list UUID.
option_list_keystringrequiredOption-list key.
option_list_namestringrequiredOption-list name.
total_fieldsintegerrequiredNumber of template fields referencing the list.
total_templatesintegerrequiredNumber of distinct templates referencing the list.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}/usage" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}/usage" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/patients/{patient_uuid}/clinical-notesList clinical notes
List clinical notes for a patient with optional filters.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredQuery Parameters
note_type"addendum" | "consultation" | "exam" | "general" | "hygiene" | "lab" | "phone_call" | "procedure" | "referral" | "treatment_plan"Filter by note type (e.g., procedure, exam, addendum).
note_typesstringComma-separated list of note types. When provided, notes matching any listed type are returned.
date_fromstringInclude notes on or after this practice-local date (YYYY-MM-DD). Clients must compute this boundary from the note location's IANA timezone.
date_tostringInclude notes on or before this practice-local date (YYYY-MM-DD). Clients must compute this boundary from the note location's IANA timezone.
is_signedbooleanFilter by signed status.
provider_uuidstringFilter by authoring provider UUID.
template_uuidstringFilter by source clinical note template UUID.
generation_source"ai_generated" | "ai_scribe" | "auto_rule" | "manual" | "template"Filter by generation source. One of: manual, template, auto_rule, ai_generated, ai_scribe.
case_idstringFilter by case identifier.
searchstringText search across note content, note type, case id, patient name, provider name, and template name.
sort"created_asc" | "created_desc" | "newest" | "oldest" | "provider_az" | "signature_due_at"Sort order. One of: newest, oldest, created_desc, created_asc, signature_due_at, provider_az.
pageintegerPage number (1-based).
Default: 1
page_sizeintegerItems per page.
Default: 50
Responses
itemsobject[]requiredList of clinical notes on this page.
pageintegerrequiredCurrent page number (1-based).
page_sizeintegerrequiredNumber of items per page.
totalintegerrequiredTotal number of matching notes across all pages.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/patients/{patient_uuid}/clinical-notes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/patients/{patient_uuid}/clinical-notes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/patients/{patient_uuid}/clinical-notes/casesList clinical note case summaries
List compact per-case summaries for a patient.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/patients/{patient_uuid}/clinical-notes/cases" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/patients/{patient_uuid}/clinical-notes/cases" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/preset-blocksList preset blocks
List field preset blocks with optional filters. Results are ordered by item_order ascending, then name ascending.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
categorystringFilter by category.
active_onlybooleanOnly return active blocks.
Default: true
pageintegerPage number (1-based).
Default: 1
page_sizeintegerItems per page.
Default: 50
Responses
itemsobject[]requiredPage of preset block records.
pageintegerrequiredCurrent page number (1-based).
page_sizeintegerrequiredNumber of items per page.
totalintegerrequiredTotal count matching the filters.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/preset-blocks" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/preset-blocks" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/preset-blocks/{block_uuid}Get preset block
Get a single field preset block by UUID. Raises 404 if the block does not exist or has been archived.
Parameters
Path Parameters
block_uuidstringrequiredorg_idstringrequiredResponses
categorystringcreated_atstring (date-time)requiredWhen the block was created.
descriptionstringfieldsobject[]Typed array of field definitions.
idstring (uuid)requiredPublic UUID of the preset block.
is_activebooleanrequiredWhether the block is active.
item_orderintegerrequiredSort order.
namestringrequiredDisplay name.
updated_atstring (date-time)requiredWhen the block was last updated.
usage_countintegerNumber of templates currently using fields from this preset block.
versionintegerrequiredOptimistic concurrency version.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/preset-blocks/{block_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/preset-blocks/{block_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/providers/{provider_uuid}/unsigned-notesList unsigned notes for provider
List unsigned clinical notes for a specific provider. Provides the 'unsigned queue' workflow — notes awaiting provider signature.
Parameters
Path Parameters
provider_uuidstringrequiredorg_idstringrequiredQuery Parameters
date_fromstringInclude notes on or after this practice-local date (YYYY-MM-DD). Clients must compute this boundary from the note location's IANA timezone.
date_tostringInclude notes on or before this practice-local date (YYYY-MM-DD). Clients must compute this boundary from the note location's IANA timezone.
searchstringText search across note content, note type, case id, patient name, provider name, and template name.
sort"created_asc" | "created_desc" | "newest" | "oldest" | "provider_az" | "signature_due_at"Sort order. One of: newest, oldest, created_desc, created_asc, signature_due_at, provider_az.
Default: "signature_due_at"
pageintegerPage number (1-based).
Default: 1
page_sizeintegerItems per page.
Default: 50
Responses
itemsobject[]requiredList of clinical notes on this page.
pageintegerrequiredCurrent page number (1-based).
page_sizeintegerrequiredNumber of items per page.
totalintegerrequiredTotal number of matching notes across all pages.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/providers/{provider_uuid}/unsigned-notes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/providers/{provider_uuid}/unsigned-notes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/settingsGet clinical notes settings
Get (or auto-create) the org-level clinical notes settings. If no settings row exists yet for the org, one is created with sensible defaults and returned. Raises 404 if the org context is not available (should not occur in normal use).
Parameters
Path Parameters
org_idstringrequiredResponses
auto_save_interval_msintegerrequiredMilliseconds of inactivity before a note is auto-saved. 0 disables auto-save.
created_atstring (date-time)requiredTimestamp when the settings record was created.
default_sign_deadline_hoursintegerrequiredDefault hours after note creation before signing is overdue. 0 disables the default deadline. Used when the template has no explicit deadline.
default_sortenumrequiredDefault sort order for the notes panel. One of: newest, oldest, created_desc.
created_descnewestoldestidstring (uuid)requiredPublic UUID identifier for this settings record.
phrase_trigger_charstringrequiredSingle character that activates smart phrase typeahead during note entry.
updated_atstring (date-time)requiredTimestamp of the last update.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/settings" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/settings" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/smart-phrasesList smart phrases
List smart phrases with optional filters. Supports filtering by scope, category, and owner. When no scope is specified and owner_uuid is provided, returns org phrases plus the user's personal phrases. Raises 404 if owner_uuid does not match a known user.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
scopestringFilter by scope: org or personal.
categorystringFilter by category.
owner_uuidstringFilter personal phrases by owner UUID.
active_onlybooleanIf true, return only active phrases.
Default: true
pageintegerPage number (1-based).
Default: 1
page_sizeintegerItems per page.
Default: 50
Responses
itemsobject[]requiredList of smart phrase items.
pageintegerrequiredCurrent page number (1-based).
page_sizeintegerrequiredNumber of items per page.
totalintegerrequiredTotal number of matching phrases.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/smart-phrases" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/smart-phrases" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/smart-phrases/{phrase_uuid}Get smart phrase
Get a single smart phrase by UUID. Raises 404 if not found.
Parameters
Path Parameters
phrase_uuidstringrequiredorg_idstringrequiredResponses
categorystringcontentstringrequiredTemplate text with merge fields.
created_atstring (date-time)requiredTimestamp when created.
idstring (uuid)requiredPublic UUID identifier.
is_activebooleanrequiredWhether the phrase is active.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
scopestringrequiredVisibility scope: org or personal.
titlestringrequiredHuman-readable title.
trigger_keystringrequiredShortcode trigger key.
updated_atstring (date-time)requiredTimestamp of last update.
versionintegerrequiredCurrent version for optimistic concurrency.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/smart-phrases/{phrase_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/smart-phrases/{phrase_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/smart-phrases/resolveResolve smart phrase typeahead
Resolve smart phrase typeahead by trigger_key prefix or title prefix. Returns matching phrases with override precedence: personal > location-scoped org > global org. When context UUIDs are provided (patient_uuid, provider_uuid, appointment_uuid), merge fields (e.g. ``{{patient.first_name}}``, ``{{provider.name}}``, ``{{appointment.date}}``) in the content are replaced with resolved values in ``resolved_content``. Raises 404 if any provided UUID does not match a known entity. Requires clinical.note:create permission (used during note authoring).
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
qstringrequiredTrigger key or title prefix to search for.
owner_uuidstringOwner UUID to include personal phrases.
location_uuidstringLocation UUID for location-scoped resolution.
patient_uuidstringPatient UUID for merge field resolution (e.g. {{patient.first_name}}).
provider_uuidstringProvider UUID for merge field resolution (e.g. {{provider.name}}).
appointment_uuidstringAppointment UUID for merge field resolution (e.g. {{appointment.date}}).
limitintegerMaximum number of results.
Default: 10
Responses
itemsobject[]requiredList of matching smart phrases with resolved merge fields, with override precedence applied (personal > location org > global org).
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/smart-phrases/resolve" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/smart-phrases/resolve" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/templatesList note templates
List clinical note templates with optional filters.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
searchstringText search across template name, description, category, and specialty.
category"administrative" | "endodontic" | "exam" | "general" | "implant" | "orthodontic" | "pediatric" | "periodontic" | "preventive" | "prosthodontic" | "restorative" | "surgery"Filter by template category.
specialtystringFilter by template specialty. Templates with no specialty tag remain visible in any specialty scope.
note_type"consultation" | "exam" | "general" | "hygiene" | "lab" | "phone_call" | "procedure" | "referral" | "treatment_plan"Filter by note type.
status"draft" | "published"Filter by template status (draft or published).
active_onlybooleanWhen true, only return active templates.
Default: true
pageintegerPage number (1-based).
Default: 1
page_sizeintegerItems per page.
Default: 50
Responses
itemsobject[]requiredList of templates on this page.
pageintegerrequiredCurrent page number (1-based).
page_sizeintegerrequiredNumber of items per page.
totalintegerrequiredTotal number of matching templates across all pages.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/templates/{template_uuid}Get note template
Get a single clinical note template by UUID.
Parameters
Path Parameters
template_uuidstringrequiredorg_idstringrequiredResponses
categoryenumrequiredTemplate category.
administrativeendodonticexamgeneralimplantorthodonticpediatricperiodonticpreventiveprosthodonticrestorativesurgerycompiled_schema_versionintegercompletion_rulesobjectcontent_formatenumrequiredContent format. One of: plain_text, markdown.
markdownplain_textcreated_atstring (date-time)requiredTimestamp when the template was created.
descriptionstringfieldsobject[]Structured field definitions for the template.
idstring (uuid)requiredUnique identifier of the template.
is_activebooleanrequiredWhether the template is active and available for use.
is_systembooleanrequiredWhether this is a system-provided immutable template.
item_orderintegerrequiredDisplay order among templates.
namestringrequiredDisplay name of the template.
note_typeenumrequiredType of note this template produces.
addendumconsultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planpublished_atstring (date-time)published_versionintegerrender_templatestringspecialtystringstatusenumrequiredTemplate status. One of: draft, published.
draftpublishedupdated_atstring (date-time)requiredTimestamp of the last update.
versionintegerrequiredCurrent version number for optimistic concurrency.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/impactGet template impact analysis
Analyze the impact of modifying or deleting a template. Returns counts of sub-template usages, auto-note rules, notes created, and unsigned notes that reference this template. Raises 404 if the template does not exist.
Parameters
Path Parameters
template_uuidstringrequiredorg_idstringrequiredResponses
auto_note_rulesobject[]Active auto-note rules using this template.
notes_createdintegerrequiredTotal clinical notes created from this template.
sub_template_usagesobject[]Templates that reference this one as a sub-template field.
template_uuidstring (uuid)requiredUUID of the analyzed template.
unsigned_notesobject[]Sample of unsigned notes (first 10) created from this template.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/impact" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/impact" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/prefill-suggestionsGet prefill suggestions for a template
Return per-field suggested values derived from the current user's (and, as fallback, the practice's) historical signed notes for this template. Only structured fields (single_select, multi_select, boolean) with sufficient support are returned. Raises 404 if the template does not exist.
Parameters
Path Parameters
template_uuidstringrequiredorg_idstringrequiredResponses
suggestionsobjectrequiredMap of field_key -> suggested value. Only eligible structured fields (single_select, multi_select, boolean) with sufficient support appear.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/prefill-suggestions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/prefill-suggestions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/versionsGet template version history
Return the version history for a template, derived from audit log entries. Each entry represents a create, update, publish, or archive action with the version number, timestamp, actor name, and change summary. Raises 404 if the template does not exist.
Parameters
Path Parameters
template_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/versions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/versions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/templates/merge-fieldsList clinical merge fields
Return available merge fields for clinical note templates. Groups fields by namespace. Each field is a ``namespace.property`` string (e.g. ``patient.first_name``). Used by the template editor to populate the merge field insertion dropdown.
Parameters
Path Parameters
org_idstringrequiredResponses
groupsobject[]requireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/merge-fields" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/merge-fields" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/templates/specialtiesList note template specialties
List distinct template specialty labels for picker filters.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
status"draft" | "published"Filter specialties by template status.
Default: "published"
active_onlybooleanWhen true, only include active templates.
Default: true
Responses
itemsstring[]requiredSorted distinct specialty labels from matching note templates.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/specialties" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/specialties" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/templates/summariesList note template summaries
List compact template summaries for quick-access picker surfaces.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
template_uuidsstring[]Template UUIDs to validate and summarize.
status"draft" | "published"Filter summaries by template status.
Default: "published"
active_onlybooleanWhen true, only include active templates.
Default: true
Responses
itemsobject[]requiredValidated template summaries.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/summaries" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/summaries" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/auto-rulesCreate auto-note rule
Create a new auto-note rule. Raises 422 if trigger_event or merge_strategy is invalid, or if neither procedure_code_pattern nor procedure_category is provided. Raises 404 if the referenced template does not exist. Raises 422 if the template is not active or not published.
Parameters
Path Parameters
org_idstringrequiredRequest Body
descriptionstringis_activebooleanWhether the rule is active and will trigger note generation.
location_uuidstring (uuid)merge_strategystringHow auto-generated notes are merged when multiple procedures trigger the same rule. One of: per_procedure, per_appointment, per_day.
namestringrequiredDisplay name for the auto-note rule.
priorityintegerRule priority — higher values are evaluated first.
procedure_categorystringprocedure_code_patternstringprovider_uuidstring (uuid)template_uuidstring (uuid)requiredUUID of the clinical note template to use.
trigger_eventstringrequiredEvent that triggers note generation. One of: on_procedure_complete, on_procedure_treatment_planned.
Responses
created_atstring (date-time)requiredWhen the rule was created.
descriptionstringidstring (uuid)requiredPublic UUID of the auto-note rule.
is_activebooleanrequiredWhether the rule is active.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
merge_strategystringrequiredHow auto-generated notes are merged.
namestringrequiredDisplay name of the rule.
priorityintegerrequiredRule priority (higher = evaluated first).
procedure_categorystringprocedure_code_patternstringproviderobjectLightweight reference to a related entity — exposes UUID and optional name.
templateobjectLightweight reference to a related entity — exposes UUID and optional name.
trigger_eventstringrequiredEvent that triggers note generation.
updated_atstring (date-time)requiredWhen the rule was last updated.
versionintegerrequiredCurrent version for optimistic concurrency.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/auto-rules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"description": "string",
"is_active": true,
"location_uuid": "string",
"merge_strategy": "per_procedure",
"name": "string",
"template_uuid": "00000000-0000-0000-0000-000000000000",
"trigger_event": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/auto-rules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"description": "string",
"is_active": true,
"location_uuid": "string",
"merge_strategy": "per_procedure",
"name": "string",
"template_uuid": "00000000-0000-0000-0000-000000000000",
"trigger_event": "string"
}'/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/addendumsCreate addendum
Create an addendum to a signed clinical note.
Parameters
Path Parameters
note_uuidstringrequiredorg_idstringrequiredRequest Body
contentstringnote_datestring (date)requiredPractice-local calendar date in YYYY-MM-DD format. Clients resolve the note location's IANA timezone before sending; the API stores and filters this as a date-only value, not a UTC datetime.
provider_uuidstring (uuid)requiredUUID of the provider creating the addendum.
Responses
case_idstringcontentstringrequiredNote content (rendered from template or manually entered).
content_editedbooleanrequiredWhether the content has been manually edited after generation.
content_formatenumrequiredContent format. One of: plain_text, markdown.
markdownplain_textcontent_modeenumrequiredAuthoritative content ownership mode. structured means template field responses are canonical; manual_override means templated content was user-edited; flattened_narrative means narrative content is canonical; signed_snapshot means the immutable signed snapshot is canonical.
flattened_narrativemanual_overridesigned_snapshotstructuredcreated_atstring (date-time)requiredTimestamp when the note was created.
deleted_atstring (date-time)generation_sourceenumrequiredHow the note was created. One of: manual, template, auto_rule, ai_generated, ai_scribe.
ai_generatedai_scribeauto_rulemanualtemplateidstring (uuid)requiredUnique identifier of the clinical note.
is_lockedbooleanrequiredWhether the note is locked (signed notes are automatically locked).
is_signedbooleanrequiredWhether the note has been signed by a provider.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
note_datestring (date)requiredPractice-local calendar date in YYYY-MM-DD format. Clients resolve the note location's IANA timezone before sending; the API stores and filters this as a date-only value, not a UTC datetime.
note_typeenumrequiredType of note. One of: procedure, exam, hygiene, consultation, phone_call, general, addendum, treatment_plan, referral, lab.
addendumconsultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planparent_note_uuidstring (uuid)patientobjectLightweight reference to a related entity — exposes UUID and optional name.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
render_contract_versionintegerrerender_snapshotobjectMetadata returned when a draft note is explicitly re-rendered from structured fields.
signed_atstring (date-time)signed_byobjectLightweight reference to a related entity — exposes UUID and optional name.
signed_contentstringsigned_content_formatenummarkdownplain_textsigned_plain_textstringsigning_readinessobjectServer-owned signing readiness summary for note detail and unsigned queue rows.
templateobjectLightweight reference to a related entity — exposes UUID and optional name.
template_sign_deadline_hoursintegertemplate_uuidstring (uuid)template_versionintegertemplate_version_uuidstring (uuid)updated_atstring (date-time)requiredTimestamp of the last update.
versionintegerrequiredCurrent version number for optimistic concurrency.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/addendums" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "string",
"note_date": "2025-01-15",
"provider_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/addendums" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "string",
"note_date": "2025-01-15",
"provider_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/addendums/{addendum_uuid}/signSign addendum
Sign and lock a draft addendum attached to a signed clinical note.
Parameters
Path Parameters
note_uuidstringrequiredaddendum_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent addendum version for optimistic concurrency — rejected with 409 if stale.
signed_by_uuidstring (uuid)requiredUUID of the provider signing the addendum.
Responses
case_idstringcontentstringrequiredNote content (rendered from template or manually entered).
content_editedbooleanrequiredWhether the content has been manually edited after generation.
content_formatenumrequiredContent format. One of: plain_text, markdown.
markdownplain_textcontent_modeenumrequiredAuthoritative content ownership mode. structured means template field responses are canonical; manual_override means templated content was user-edited; flattened_narrative means narrative content is canonical; signed_snapshot means the immutable signed snapshot is canonical.
flattened_narrativemanual_overridesigned_snapshotstructuredcreated_atstring (date-time)requiredTimestamp when the note was created.
deleted_atstring (date-time)generation_sourceenumrequiredHow the note was created. One of: manual, template, auto_rule, ai_generated, ai_scribe.
ai_generatedai_scribeauto_rulemanualtemplateidstring (uuid)requiredUnique identifier of the clinical note.
is_lockedbooleanrequiredWhether the note is locked (signed notes are automatically locked).
is_signedbooleanrequiredWhether the note has been signed by a provider.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
note_datestring (date)requiredPractice-local calendar date in YYYY-MM-DD format. Clients resolve the note location's IANA timezone before sending; the API stores and filters this as a date-only value, not a UTC datetime.
note_typeenumrequiredType of note. One of: procedure, exam, hygiene, consultation, phone_call, general, addendum, treatment_plan, referral, lab.
addendumconsultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planparent_note_uuidstring (uuid)patientobjectLightweight reference to a related entity — exposes UUID and optional name.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
render_contract_versionintegerrerender_snapshotobjectMetadata returned when a draft note is explicitly re-rendered from structured fields.
signed_atstring (date-time)signed_byobjectLightweight reference to a related entity — exposes UUID and optional name.
signed_contentstringsigned_content_formatenummarkdownplain_textsigned_plain_textstringsigning_readinessobjectServer-owned signing readiness summary for note detail and unsigned queue rows.
templateobjectLightweight reference to a related entity — exposes UUID and optional name.
template_sign_deadline_hoursintegertemplate_uuidstring (uuid)template_versionintegertemplate_version_uuidstring (uuid)updated_atstring (date-time)requiredTimestamp of the last update.
versionintegerrequiredCurrent version number for optimistic concurrency.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/addendums/{addendum_uuid}/sign" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"signed_by_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/addendums/{addendum_uuid}/sign" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"signed_by_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/proceduresLink procedures to note
Link charted procedures to a clinical note. Duplicate links are silently skipped.
Parameters
Path Parameters
note_uuidstringrequiredorg_idstringrequiredRequest Body
primary_procedure_uuidstring (uuid)procedure_uuidsstring (uuid)[]requiredList of charted procedure UUIDs to link to the note.
Responses
itemsobject[]requiredList of procedure links.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/procedures" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"primary_procedure_uuid": "string",
"procedure_uuids": []
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/procedures" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"primary_procedure_uuid": "string",
"procedure_uuids": []
}'/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/signSign clinical note
Sign and lock a clinical note.
Parameters
Path Parameters
note_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
signed_by_uuidstring (uuid)requiredUUID of the provider signing the note.
Responses
case_idstringcontentstringrequiredNote content (rendered from template or manually entered).
content_editedbooleanrequiredWhether the content has been manually edited after generation.
content_formatenumrequiredContent format. One of: plain_text, markdown.
markdownplain_textcontent_modeenumrequiredAuthoritative content ownership mode. structured means template field responses are canonical; manual_override means templated content was user-edited; flattened_narrative means narrative content is canonical; signed_snapshot means the immutable signed snapshot is canonical.
flattened_narrativemanual_overridesigned_snapshotstructuredcreated_atstring (date-time)requiredTimestamp when the note was created.
deleted_atstring (date-time)generation_sourceenumrequiredHow the note was created. One of: manual, template, auto_rule, ai_generated, ai_scribe.
ai_generatedai_scribeauto_rulemanualtemplateidstring (uuid)requiredUnique identifier of the clinical note.
is_lockedbooleanrequiredWhether the note is locked (signed notes are automatically locked).
is_signedbooleanrequiredWhether the note has been signed by a provider.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
note_datestring (date)requiredPractice-local calendar date in YYYY-MM-DD format. Clients resolve the note location's IANA timezone before sending; the API stores and filters this as a date-only value, not a UTC datetime.
note_typeenumrequiredType of note. One of: procedure, exam, hygiene, consultation, phone_call, general, addendum, treatment_plan, referral, lab.
addendumconsultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planparent_note_uuidstring (uuid)patientobjectLightweight reference to a related entity — exposes UUID and optional name.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
render_contract_versionintegerrerender_snapshotobjectMetadata returned when a draft note is explicitly re-rendered from structured fields.
signed_atstring (date-time)signed_byobjectLightweight reference to a related entity — exposes UUID and optional name.
signed_contentstringsigned_content_formatenummarkdownplain_textsigned_plain_textstringsigning_readinessobjectServer-owned signing readiness summary for note detail and unsigned queue rows.
templateobjectLightweight reference to a related entity — exposes UUID and optional name.
template_sign_deadline_hoursintegertemplate_uuidstring (uuid)template_versionintegertemplate_version_uuidstring (uuid)updated_atstring (date-time)requiredTimestamp of the last update.
versionintegerrequiredCurrent version number for optimistic concurrency.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/sign" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"signed_by_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/sign" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"signed_by_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/clinical-notes/clinical-notes/batch-signBatch sign notes
Sign multiple clinical notes in one call. Each note is signed independently — failures do not roll back successes. Returns separate lists of successfully signed notes and failures. Raises 404 if the signing provider does not exist.
Parameters
Path Parameters
org_idstringrequiredRequest Body
notesobject[]requiredList of notes to sign, each with UUID and base_version.
signed_by_uuidstring (uuid)requiredUUID of the provider performing the signing.
Responses
failedobject[]Notes that failed to sign.
signedobject[]Notes that were successfully signed.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/batch-sign" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"notes": [],
"signed_by_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/batch-sign" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"notes": [],
"signed_by_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/clinical-notes/clinical-notes/batch-sign/previewPreview batch note signing
Preview selected notes before batch signing without mutating them.
Parameters
Path Parameters
org_idstringrequiredRequest Body
notesobject[]requiredList of notes to sign, each with UUID and base_version.
signed_by_uuidstring (uuid)requiredUUID of the provider performing the signing.
Responses
blocked_countintegerrequiredNumber of selected notes blocked by signing rules.
itemsobject[]Ordered preview results for selected notes.
not_found_countintegerrequiredNumber of selected notes that no longer exist.
ready_countintegerrequiredNumber of selected notes ready to sign.
stale_countintegerrequiredNumber of selected notes with stale base_version values.
totalintegerrequiredNumber of selected notes evaluated.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/batch-sign/preview" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"notes": [],
"signed_by_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/batch-sign/preview" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"notes": [],
"signed_by_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/clinical-notes/favoritesAdd template favorite
Pin a note template as a favorite for the current user. Raises 409 if the template is already a favorite for this user.
Parameters
Path Parameters
org_idstringrequiredRequest Body
item_orderintegerSort order for the favorite (lower values appear first).
template_uuidstring (uuid)requiredUUID of the template to pin as a favorite.
Responses
created_atstring (date-time)requiredTimestamp when the favorite was created.
idstring (uuid)requiredUUID of the favorite record.
item_orderintegerrequiredSort order for the favorite.
template_categoryenumadministrativeendodonticexamgeneralimplantorthodonticpediatricperiodonticpreventiveprosthodonticrestorativesurgerytemplate_is_activebooleantemplate_namestringtemplate_note_typeenumaddendumconsultationexamgeneralhygienelabphone_callprocedurereferraltreatment_plantemplate_statusenumdraftpublishedtemplate_uuidstring (uuid)requireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/favorites" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"item_order": 0,
"template_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/favorites" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"item_order": 0,
"template_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/clinical-notes/option-listsCreate clinical option list
Parameters
Path Parameters
org_idstringrequiredRequest Body
categorystringdescriptionstringitem_orderintegerSort order in admin lists.
keystringrequiredStable practice-scoped key, e.g. anesthetics.
namestringrequiredDisplay name.
optionsobject[]requiredInitial draft options.
specialtystringResponses
categorystringcreated_atstring (date-time)requiredCreation timestamp.
descriptionstringidstring (uuid)requiredOption-list UUID.
is_activebooleanrequiredWhether available for use.
item_orderintegerrequiredSort order.
keystringrequiredStable practice-scoped key.
namestringrequiredDisplay name.
published_versionintegerspecialtystringstatusenumrequireddraft, published, or archived.
archiveddraftpublishedupdated_atstring (date-time)requiredUpdate timestamp.
usage_countintegerNumber of templates referencing this option list.
versionintegerrequiredOptimistic concurrency version.
versionsobject[]Known versions.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/option-lists" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"category": "string",
"description": "string",
"item_order": 0,
"key": "string",
"name": "string",
"options": []
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/option-lists" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"category": "string",
"description": "string",
"item_order": 0,
"key": "string",
"name": "string",
"options": []
}'/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}/publishPublish clinical option list
Parameters
Path Parameters
option_list_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent option-list version for optimistic concurrency.
Responses
categorystringcreated_atstring (date-time)requiredCreation timestamp.
descriptionstringidstring (uuid)requiredOption-list UUID.
is_activebooleanrequiredWhether available for use.
item_orderintegerrequiredSort order.
keystringrequiredStable practice-scoped key.
namestringrequiredDisplay name.
published_versionintegerspecialtystringstatusenumrequireddraft, published, or archived.
archiveddraftpublishedupdated_atstring (date-time)requiredUpdate timestamp.
usage_countintegerNumber of templates referencing this option list.
versionintegerrequiredOptimistic concurrency version.
versionsobject[]Known versions.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}/publish" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}/publish" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1
}'/api/v1/{org_id}/clinical-notes/patients/{patient_uuid}/clinical-notesCreate draft clinical note
Create a persisted draft clinical note for a patient.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredRequest Body
appointment_uuidstring (uuid)case_idstringcontentstringcontent_editedbooleancontent_formatenummarkdownplain_textfield_responsesobjectlocation_uuidstring (uuid)requiredUUID of the location where the note is created.
note_datestring (date)requiredPractice-local calendar date in YYYY-MM-DD format. Clients resolve the note location's IANA timezone before sending; the API stores and filters this as a date-only value, not a UTC datetime.
note_typeenumrequiredType of non-addendum note. Addendums must use the dedicated addendum endpoint.
consultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planprimary_procedure_uuidstring (uuid)procedure_uuidsstring (uuid)[]provider_uuidstring (uuid)requiredUUID of the authoring provider.
template_uuidstring (uuid)Responses
case_idstringcontentstringrequiredNote content (rendered from template or manually entered).
content_editedbooleanrequiredWhether the content has been manually edited after generation.
content_formatenumrequiredContent format. One of: plain_text, markdown.
markdownplain_textcontent_modeenumrequiredAuthoritative content ownership mode. structured means template field responses are canonical; manual_override means templated content was user-edited; flattened_narrative means narrative content is canonical; signed_snapshot means the immutable signed snapshot is canonical.
flattened_narrativemanual_overridesigned_snapshotstructuredcreated_atstring (date-time)requiredTimestamp when the note was created.
deleted_atstring (date-time)generation_sourceenumrequiredHow the note was created. One of: manual, template, auto_rule, ai_generated, ai_scribe.
ai_generatedai_scribeauto_rulemanualtemplateidstring (uuid)requiredUnique identifier of the clinical note.
is_lockedbooleanrequiredWhether the note is locked (signed notes are automatically locked).
is_signedbooleanrequiredWhether the note has been signed by a provider.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
note_datestring (date)requiredPractice-local calendar date in YYYY-MM-DD format. Clients resolve the note location's IANA timezone before sending; the API stores and filters this as a date-only value, not a UTC datetime.
note_typeenumrequiredType of note. One of: procedure, exam, hygiene, consultation, phone_call, general, addendum, treatment_plan, referral, lab.
addendumconsultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planparent_note_uuidstring (uuid)patientobjectLightweight reference to a related entity — exposes UUID and optional name.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
render_contract_versionintegerrerender_snapshotobjectMetadata returned when a draft note is explicitly re-rendered from structured fields.
signed_atstring (date-time)signed_byobjectLightweight reference to a related entity — exposes UUID and optional name.
signed_contentstringsigned_content_formatenummarkdownplain_textsigned_plain_textstringsigning_readinessobjectServer-owned signing readiness summary for note detail and unsigned queue rows.
templateobjectLightweight reference to a related entity — exposes UUID and optional name.
template_sign_deadline_hoursintegertemplate_uuidstring (uuid)template_versionintegertemplate_version_uuidstring (uuid)updated_atstring (date-time)requiredTimestamp of the last update.
versionintegerrequiredCurrent version number for optimistic concurrency.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/patients/{patient_uuid}/clinical-notes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"appointment_uuid": "string",
"case_id": "string",
"content": "string",
"content_edited": null,
"content_format": "string",
"location_uuid": "00000000-0000-0000-0000-000000000000",
"note_date": "2025-01-15",
"note_type": "consultation",
"provider_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/patients/{patient_uuid}/clinical-notes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"appointment_uuid": "string",
"case_id": "string",
"content": "string",
"content_edited": null,
"content_format": "string",
"location_uuid": "00000000-0000-0000-0000-000000000000",
"note_date": "2025-01-15",
"note_type": "consultation",
"provider_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/clinical-notes/preset-blocksCreate preset block
Create a new field preset block. Raises 409 if a preset block with the same name already exists.
Parameters
Path Parameters
org_idstringrequiredRequest Body
categorystringdescriptionstringfieldsobject[]Array of typed field definitions.
is_activebooleanWhether the preset block is active and visible for selection.
item_orderintegerSort order within category listings. Lower values appear first.
namestringrequiredUnique display name for the preset block.
Responses
categorystringcreated_atstring (date-time)requiredWhen the block was created.
descriptionstringfieldsobject[]Typed array of field definitions.
idstring (uuid)requiredPublic UUID of the preset block.
is_activebooleanrequiredWhether the block is active.
item_orderintegerrequiredSort order.
namestringrequiredDisplay name.
updated_atstring (date-time)requiredWhen the block was last updated.
usage_countintegerNumber of templates currently using fields from this preset block.
versionintegerrequiredOptimistic concurrency version.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/preset-blocks" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"category": "string",
"description": "string",
"fields": [],
"is_active": true,
"item_order": 0,
"name": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/preset-blocks" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"category": "string",
"description": "string",
"fields": [],
"is_active": true,
"item_order": 0,
"name": "string"
}'/api/v1/{org_id}/clinical-notes/smart-phrasesCreate smart phrase
Create a new smart phrase. Validates trigger_key format. Raises 409 if a phrase with the same trigger_key already exists in the same scope. Raises 422 for invalid trigger_key format or scope.
Parameters
Path Parameters
org_idstringrequiredRequest Body
categorystringcontentstringrequiredTemplate text with optional merge fields like {{patient.first_name}}.
is_activebooleanWhether the phrase is active and available for use.
location_uuidstring (uuid)owner_uuidstring (uuid)scopestringVisibility scope. One of: org, personal.
titlestringrequiredHuman-readable title for the smart phrase.
trigger_keystringrequiredShortcode trigger (lowercase alphanumeric, hyphens, underscores). Must match ^[a-z0-9][a-z0-9\-_]{1,49}$.
Responses
categorystringcontentstringrequiredTemplate text with merge fields.
created_atstring (date-time)requiredTimestamp when created.
idstring (uuid)requiredPublic UUID identifier.
is_activebooleanrequiredWhether the phrase is active.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
scopestringrequiredVisibility scope: org or personal.
titlestringrequiredHuman-readable title.
trigger_keystringrequiredShortcode trigger key.
updated_atstring (date-time)requiredTimestamp of last update.
versionintegerrequiredCurrent version for optimistic concurrency.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/smart-phrases" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"category": "string",
"content": "string",
"is_active": true,
"location_uuid": "string",
"owner_uuid": "string",
"title": "string",
"trigger_key": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/smart-phrases" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"category": "string",
"content": "string",
"is_active": true,
"location_uuid": "string",
"owner_uuid": "string",
"title": "string",
"trigger_key": "string"
}'/api/v1/{org_id}/clinical-notes/templatesCreate note template
Create a new clinical note template. Optionally include a ``fields`` array to create structured field definitions. Raises 409 if a template with the same name already exists.
Parameters
Path Parameters
org_idstringrequiredRequest Body
categoryenumrequiredTemplate category. One of: exam, restorative, endodontic, periodontic, preventive, surgery, orthodontic, prosthodontic, implant, pediatric, general, administrative.
administrativeendodonticexamgeneralimplantorthodonticpediatricperiodonticpreventiveprosthodonticrestorativesurgerycompletion_rulesobjectcontent_formatenummarkdownplain_textdescriptionstringfieldsobject[]namestringrequiredDisplay name of the template.
note_typeenumrequiredType of note this template produces. One of: procedure, exam, hygiene, consultation, phone_call, general, treatment_plan, referral, lab.
consultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planrender_templatestringspecialtystringResponses
categoryenumrequiredTemplate category.
administrativeendodonticexamgeneralimplantorthodonticpediatricperiodonticpreventiveprosthodonticrestorativesurgerycompiled_schema_versionintegercompletion_rulesobjectcontent_formatenumrequiredContent format. One of: plain_text, markdown.
markdownplain_textcreated_atstring (date-time)requiredTimestamp when the template was created.
descriptionstringfieldsobject[]Structured field definitions for the template.
idstring (uuid)requiredUnique identifier of the template.
is_activebooleanrequiredWhether the template is active and available for use.
is_systembooleanrequiredWhether this is a system-provided immutable template.
item_orderintegerrequiredDisplay order among templates.
namestringrequiredDisplay name of the template.
note_typeenumrequiredType of note this template produces.
addendumconsultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planpublished_atstring (date-time)published_versionintegerrender_templatestringspecialtystringstatusenumrequiredTemplate status. One of: draft, published.
draftpublishedupdated_atstring (date-time)requiredTimestamp of the last update.
versionintegerrequiredCurrent version number for optimistic concurrency.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/templates" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"category": "administrative",
"completion_rules": null,
"content_format": "string",
"description": "string",
"fields": null,
"name": "string",
"note_type": "consultation"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/templates" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"category": "administrative",
"completion_rules": null,
"content_format": "string",
"description": "string",
"fields": null,
"name": "string",
"note_type": "consultation"
}'/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/apply-presetApply preset block to template
Apply a field preset block to a template by copying its field definitions. Copies all fields from the specified preset block into the template's field list at the given insertion order. Raises 404 if the template or preset block does not exist. Raises 422 if the preset block is inactive.
Parameters
Path Parameters
template_uuidstringrequiredorg_idstringrequiredRequest Body
block_namestringrequiredDisplay name for the applied block section within the template.
insert_at_orderintegerOrder position at which to insert the preset fields. Defaults to 0 (beginning).
preset_block_uuidstring (uuid)requiredUUID of the FieldPresetBlock to apply to the template.
Responses
categoryenumrequiredTemplate category.
administrativeendodonticexamgeneralimplantorthodonticpediatricperiodonticpreventiveprosthodonticrestorativesurgerycompiled_schema_versionintegercompletion_rulesobjectcontent_formatenumrequiredContent format. One of: plain_text, markdown.
markdownplain_textcreated_atstring (date-time)requiredTimestamp when the template was created.
descriptionstringfieldsobject[]Structured field definitions for the template.
idstring (uuid)requiredUnique identifier of the template.
is_activebooleanrequiredWhether the template is active and available for use.
is_systembooleanrequiredWhether this is a system-provided immutable template.
item_orderintegerrequiredDisplay order among templates.
namestringrequiredDisplay name of the template.
note_typeenumrequiredType of note this template produces.
addendumconsultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planpublished_atstring (date-time)published_versionintegerrender_templatestringspecialtystringstatusenumrequiredTemplate status. One of: draft, published.
draftpublishedupdated_atstring (date-time)requiredTimestamp of the last update.
versionintegerrequiredCurrent version number for optimistic concurrency.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/apply-preset" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"block_name": "string",
"insert_at_order": 0,
"preset_block_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/apply-preset" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"block_name": "string",
"insert_at_order": 0,
"preset_block_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/lintLint template
Run lint checks on a template's render_template and field definitions. Returns a list of errors (blocking) and warnings (non-blocking). Does not modify the template. Raises 404 if the template does not exist.
Parameters
Path Parameters
template_uuidstringrequiredorg_idstringrequiredResponses
errorsobject[]Blocking issues that prevent publishing.
validbooleanrequiredTrue if no errors were found (warnings are non-blocking).
warningsobject[]Non-blocking suggestions.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/lint" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/lint" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/publishPublish template
Publish a template: run lint, compile render_template and completion_rules, freeze version. Raises 404 if the template does not exist. Raises 409 if base_version is stale. Raises 422 if lint finds errors.
Parameters
Path Parameters
template_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
Responses
impactobjectrequiredTemplate impact analysis returned with the publish result.
lint_resultobjectrequiredBackend lint result used to authorize publishing.
published_template_version_uuidstring (uuid)published_versionintegerrequiredImmutable published version number created or acknowledged.
templateobjectrequiredOutput schema for a clinical note template.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/publish" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}/publish" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1
}'/api/v1/{org_id}/clinical-notes/templates/render-previewPreview note template rendering
Render a draft template through the backend materialization path.
Parameters
Path Parameters
org_idstringrequiredRequest Body
field_responsesobjectfieldsobject[]Draft structured field definitions used for preview materialization.
patient_uuidstring (uuid)render_templatestringrequiredRender template using {{field:key}} syntax.
Responses
contentstringrequiredRendered HTML preview.
field_valuesobjectDisplay-ready field values used to render token chips.
render_contract_versionintegerrequiredBackend render/materialization contract version used for this preview.
unresolved_field_keysstring[]Field token keys referenced by the template but absent from the supplied field definitions.
unresolved_merge_keysstring[]Merge token keys not known to the clinical merge-field registry.
warningsobject[]Non-blocking materialization warnings.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/render-preview" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"field_responses": null,
"fields": [],
"patient_uuid": "string",
"render_template": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/render-preview" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"field_responses": null,
"fields": [],
"patient_uuid": "string",
"render_template": "string"
}'/api/v1/{org_id}/clinical-notes/settingsUpdate clinical notes settings
Update the org-level clinical notes settings (partial update). Auto-creates defaults first if no settings row exists yet. Only provided fields are applied — omit a field to leave it unchanged. Raises 422 for invalid field values (e.g., phrase_trigger_char longer than 1 character).
Parameters
Path Parameters
org_idstringrequiredRequest Body
auto_save_interval_msintegerdefault_sign_deadline_hoursintegerdefault_sortenumcreated_descnewestoldestphrase_trigger_charstringResponses
auto_save_interval_msintegerrequiredMilliseconds of inactivity before a note is auto-saved. 0 disables auto-save.
created_atstring (date-time)requiredTimestamp when the settings record was created.
default_sign_deadline_hoursintegerrequiredDefault hours after note creation before signing is overdue. 0 disables the default deadline. Used when the template has no explicit deadline.
default_sortenumrequiredDefault sort order for the notes panel. One of: newest, oldest, created_desc.
created_descnewestoldestidstring (uuid)requiredPublic UUID identifier for this settings record.
phrase_trigger_charstringrequiredSingle character that activates smart phrase typeahead during note entry.
updated_atstring (date-time)requiredTimestamp of the last update.
detailobject[]curl -X PUT "https://api.example.com/api/v1/{org_id}/clinical-notes/settings" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"auto_save_interval_ms": 1,
"default_sign_deadline_hours": 1,
"default_sort": "string",
"phrase_trigger_char": "string"
}'curl -X PUT "https://api.example.com/api/v1/{org_id}/clinical-notes/settings" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"auto_save_interval_ms": 1,
"default_sign_deadline_hours": 1,
"default_sort": "string",
"phrase_trigger_char": "string"
}'/api/v1/{org_id}/clinical-notes/auto-rules/{rule_uuid}Update auto-note rule
Update an auto-note rule. Raises 404 if the rule does not exist. Raises 409 if the base_version does not match (version conflict). Raises 422 if trigger_event or merge_strategy is invalid.
Parameters
Path Parameters
rule_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version for optimistic concurrency -- rejected with 409 if stale.
descriptionstringis_activebooleanlocation_uuidstring (uuid)merge_strategystringnamestringpriorityintegerprocedure_categorystringprocedure_code_patternstringprovider_uuidstring (uuid)template_uuidstring (uuid)trigger_eventstringResponses
created_atstring (date-time)requiredWhen the rule was created.
descriptionstringidstring (uuid)requiredPublic UUID of the auto-note rule.
is_activebooleanrequiredWhether the rule is active.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
merge_strategystringrequiredHow auto-generated notes are merged.
namestringrequiredDisplay name of the rule.
priorityintegerrequiredRule priority (higher = evaluated first).
procedure_categorystringprocedure_code_patternstringproviderobjectLightweight reference to a related entity — exposes UUID and optional name.
templateobjectLightweight reference to a related entity — exposes UUID and optional name.
trigger_eventstringrequiredEvent that triggers note generation.
updated_atstring (date-time)requiredWhen the rule was last updated.
versionintegerrequiredCurrent version for optimistic concurrency.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical-notes/auto-rules/{rule_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"description": "string",
"is_active": null,
"location_uuid": "string",
"merge_strategy": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical-notes/auto-rules/{rule_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"description": "string",
"is_active": null,
"location_uuid": "string",
"merge_strategy": "string"
}'/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}Save draft clinical note
Save a draft clinical note (only if unlocked).
Parameters
Path Parameters
note_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
case_idstringcontentstringcontent_editedbooleancontent_formatenummarkdownplain_textfield_responsesobjectforce_rerenderbooleanIf true and note has a template, re-render content from template using current field_values. Ignores any content update in this request.
location_uuidstring (uuid)note_datestring (date)note_typeenumconsultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planprovider_uuidstring (uuid)Responses
case_idstringcontentstringrequiredNote content (rendered from template or manually entered).
content_editedbooleanrequiredWhether the content has been manually edited after generation.
content_formatenumrequiredContent format. One of: plain_text, markdown.
markdownplain_textcontent_modeenumrequiredAuthoritative content ownership mode. structured means template field responses are canonical; manual_override means templated content was user-edited; flattened_narrative means narrative content is canonical; signed_snapshot means the immutable signed snapshot is canonical.
flattened_narrativemanual_overridesigned_snapshotstructuredcreated_atstring (date-time)requiredTimestamp when the note was created.
deleted_atstring (date-time)generation_sourceenumrequiredHow the note was created. One of: manual, template, auto_rule, ai_generated, ai_scribe.
ai_generatedai_scribeauto_rulemanualtemplateidstring (uuid)requiredUnique identifier of the clinical note.
is_lockedbooleanrequiredWhether the note is locked (signed notes are automatically locked).
is_signedbooleanrequiredWhether the note has been signed by a provider.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
note_datestring (date)requiredPractice-local calendar date in YYYY-MM-DD format. Clients resolve the note location's IANA timezone before sending; the API stores and filters this as a date-only value, not a UTC datetime.
note_typeenumrequiredType of note. One of: procedure, exam, hygiene, consultation, phone_call, general, addendum, treatment_plan, referral, lab.
addendumconsultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planparent_note_uuidstring (uuid)patientobjectLightweight reference to a related entity — exposes UUID and optional name.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
render_contract_versionintegerrerender_snapshotobjectMetadata returned when a draft note is explicitly re-rendered from structured fields.
signed_atstring (date-time)signed_byobjectLightweight reference to a related entity — exposes UUID and optional name.
signed_contentstringsigned_content_formatenummarkdownplain_textsigned_plain_textstringsigning_readinessobjectServer-owned signing readiness summary for note detail and unsigned queue rows.
templateobjectLightweight reference to a related entity — exposes UUID and optional name.
template_sign_deadline_hoursintegertemplate_uuidstring (uuid)template_versionintegertemplate_version_uuidstring (uuid)updated_atstring (date-time)requiredTimestamp of the last update.
versionintegerrequiredCurrent version number for optimistic concurrency.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"case_id": "string",
"content": "string",
"content_edited": null,
"content_format": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"case_id": "string",
"content": "string",
"content_edited": null,
"content_format": "string"
}'/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/addendums/{addendum_uuid}Update addendum
Update a draft addendum attached to a signed clinical note.
Parameters
Path Parameters
note_uuidstringrequiredaddendum_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent addendum version for optimistic concurrency — rejected with 409 if stale.
contentstringrequiredAddendum content.
Responses
case_idstringcontentstringrequiredNote content (rendered from template or manually entered).
content_editedbooleanrequiredWhether the content has been manually edited after generation.
content_formatenumrequiredContent format. One of: plain_text, markdown.
markdownplain_textcontent_modeenumrequiredAuthoritative content ownership mode. structured means template field responses are canonical; manual_override means templated content was user-edited; flattened_narrative means narrative content is canonical; signed_snapshot means the immutable signed snapshot is canonical.
flattened_narrativemanual_overridesigned_snapshotstructuredcreated_atstring (date-time)requiredTimestamp when the note was created.
deleted_atstring (date-time)generation_sourceenumrequiredHow the note was created. One of: manual, template, auto_rule, ai_generated, ai_scribe.
ai_generatedai_scribeauto_rulemanualtemplateidstring (uuid)requiredUnique identifier of the clinical note.
is_lockedbooleanrequiredWhether the note is locked (signed notes are automatically locked).
is_signedbooleanrequiredWhether the note has been signed by a provider.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
note_datestring (date)requiredPractice-local calendar date in YYYY-MM-DD format. Clients resolve the note location's IANA timezone before sending; the API stores and filters this as a date-only value, not a UTC datetime.
note_typeenumrequiredType of note. One of: procedure, exam, hygiene, consultation, phone_call, general, addendum, treatment_plan, referral, lab.
addendumconsultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planparent_note_uuidstring (uuid)patientobjectLightweight reference to a related entity — exposes UUID and optional name.
providerobjectLightweight reference to a related entity — exposes UUID and optional name.
render_contract_versionintegerrerender_snapshotobjectMetadata returned when a draft note is explicitly re-rendered from structured fields.
signed_atstring (date-time)signed_byobjectLightweight reference to a related entity — exposes UUID and optional name.
signed_contentstringsigned_content_formatenummarkdownplain_textsigned_plain_textstringsigning_readinessobjectServer-owned signing readiness summary for note detail and unsigned queue rows.
templateobjectLightweight reference to a related entity — exposes UUID and optional name.
template_sign_deadline_hoursintegertemplate_uuidstring (uuid)template_versionintegertemplate_version_uuidstring (uuid)updated_atstring (date-time)requiredTimestamp of the last update.
versionintegerrequiredCurrent version number for optimistic concurrency.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/addendums/{addendum_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"content": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/addendums/{addendum_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"content": "string"
}'/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}Update clinical option list
Parameters
Path Parameters
option_list_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent option-list version for optimistic concurrency.
categorystringdescriptionstringis_activebooleanitem_orderintegerkeystringnamestringoptionsobject[]specialtystringResponses
categorystringcreated_atstring (date-time)requiredCreation timestamp.
descriptionstringidstring (uuid)requiredOption-list UUID.
is_activebooleanrequiredWhether available for use.
item_orderintegerrequiredSort order.
keystringrequiredStable practice-scoped key.
namestringrequiredDisplay name.
published_versionintegerspecialtystringstatusenumrequireddraft, published, or archived.
archiveddraftpublishedupdated_atstring (date-time)requiredUpdate timestamp.
usage_countintegerNumber of templates referencing this option list.
versionintegerrequiredOptimistic concurrency version.
versionsobject[]Known versions.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"category": "string",
"description": "string",
"is_active": null,
"item_order": 1
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"category": "string",
"description": "string",
"is_active": null,
"item_order": 1
}'/api/v1/{org_id}/clinical-notes/preset-blocks/{block_uuid}Update preset block
Update a field preset block. Raises 404 if the block does not exist. Raises 409 if base_version is stale or name conflicts with an existing block.
Parameters
Path Parameters
block_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
categorystringdescriptionstringfieldsobject[]is_activebooleanitem_orderintegernamestringResponses
categorystringcreated_atstring (date-time)requiredWhen the block was created.
descriptionstringfieldsobject[]Typed array of field definitions.
idstring (uuid)requiredPublic UUID of the preset block.
is_activebooleanrequiredWhether the block is active.
item_orderintegerrequiredSort order.
namestringrequiredDisplay name.
updated_atstring (date-time)requiredWhen the block was last updated.
usage_countintegerNumber of templates currently using fields from this preset block.
versionintegerrequiredOptimistic concurrency version.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical-notes/preset-blocks/{block_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"category": "string",
"description": "string",
"fields": null,
"is_active": null
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical-notes/preset-blocks/{block_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"category": "string",
"description": "string",
"fields": null,
"is_active": null
}'/api/v1/{org_id}/clinical-notes/smart-phrases/{phrase_uuid}Update smart phrase
Update a smart phrase (partial update). Requires base_version for optimistic concurrency. Raises 404 if not found, 409 on version conflict or duplicate trigger_key.
Parameters
Path Parameters
phrase_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
categorystringcontentstringis_activebooleanlocation_uuidstring (uuid)owner_uuidstring (uuid)scopestringtitlestringtrigger_keystringResponses
categorystringcontentstringrequiredTemplate text with merge fields.
created_atstring (date-time)requiredTimestamp when created.
idstring (uuid)requiredPublic UUID identifier.
is_activebooleanrequiredWhether the phrase is active.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
scopestringrequiredVisibility scope: org or personal.
titlestringrequiredHuman-readable title.
trigger_keystringrequiredShortcode trigger key.
updated_atstring (date-time)requiredTimestamp of last update.
versionintegerrequiredCurrent version for optimistic concurrency.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical-notes/smart-phrases/{phrase_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"category": "string",
"content": "string",
"is_active": null,
"location_uuid": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical-notes/smart-phrases/{phrase_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"category": "string",
"content": "string",
"is_active": null,
"location_uuid": "string"
}'/api/v1/{org_id}/clinical-notes/templates/{template_uuid}Update note template
Update a clinical note template. Optionally include a ``fields`` array to replace structured field definitions. Published templates are automatically transitioned back to draft on edit. Raises 404 if the template does not exist. Raises 409 if base_version is stale or name conflicts with an existing template.
Parameters
Path Parameters
template_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version for optimistic concurrency — rejected with 409 if stale.
categoryenumadministrativeendodonticexamgeneralimplantorthodonticpediatricperiodonticpreventiveprosthodonticrestorativesurgerycompletion_rulesobjectcontent_formatenummarkdownplain_textdescriptionstringfieldsobject[]is_activebooleannamestringnote_typeenumconsultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planrender_templatestringspecialtystringResponses
categoryenumrequiredTemplate category.
administrativeendodonticexamgeneralimplantorthodonticpediatricperiodonticpreventiveprosthodonticrestorativesurgerycompiled_schema_versionintegercompletion_rulesobjectcontent_formatenumrequiredContent format. One of: plain_text, markdown.
markdownplain_textcreated_atstring (date-time)requiredTimestamp when the template was created.
descriptionstringfieldsobject[]Structured field definitions for the template.
idstring (uuid)requiredUnique identifier of the template.
is_activebooleanrequiredWhether the template is active and available for use.
is_systembooleanrequiredWhether this is a system-provided immutable template.
item_orderintegerrequiredDisplay order among templates.
namestringrequiredDisplay name of the template.
note_typeenumrequiredType of note this template produces.
addendumconsultationexamgeneralhygienelabphone_callprocedurereferraltreatment_planpublished_atstring (date-time)published_versionintegerrender_templatestringspecialtystringstatusenumrequiredTemplate status. One of: draft, published.
draftpublishedupdated_atstring (date-time)requiredTimestamp of the last update.
versionintegerrequiredCurrent version number for optimistic concurrency.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"category": "string",
"completion_rules": null,
"content_format": "string",
"description": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"category": "string",
"completion_rules": null,
"content_format": "string",
"description": "string"
}'/api/v1/{org_id}/clinical-notes/auto-rules/{rule_uuid}Archive auto-note rule
Archive an auto-note rule (soft delete). Raises 404 if the rule does not exist.
Parameters
Path Parameters
rule_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/auto-rules/{rule_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/auto-rules/{rule_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}Delete clinical note
Soft-delete a clinical note. Only unsigned notes can be deleted. Signed notes must be amended instead. Raises 404 if the note does not exist. Raises 422 if the note is signed.
Parameters
Path Parameters
note_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/procedures/{procedure_uuid}Unlink procedure from note
Remove a charted procedure link from a clinical note.
Parameters
Path Parameters
note_uuidstringrequiredprocedure_uuidstringrequiredorg_idstringrequiredResponses
itemsobject[]requiredList of procedure links.
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/procedures/{procedure_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/clinical-notes/{note_uuid}/procedures/{procedure_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/favorites/{favorite_uuid}Remove template favorite
Remove a template from the current user's favorites. Raises 404 if the favorite does not exist or does not belong to the current user.
Parameters
Path Parameters
favorite_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/favorites/{favorite_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/favorites/{favorite_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}Archive clinical option list
Parameters
Path Parameters
option_list_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/option-lists/{option_list_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/preset-blocks/{block_uuid}Archive preset block
Archive a field preset block (soft delete). Raises 404 if the block does not exist.
Parameters
Path Parameters
block_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/preset-blocks/{block_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/preset-blocks/{block_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/smart-phrases/{phrase_uuid}Archive smart phrase
Archive a smart phrase (soft delete). Raises 404 if not found.
Parameters
Path Parameters
phrase_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/smart-phrases/{phrase_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/smart-phrases/{phrase_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical-notes/templates/{template_uuid}Archive note template
Archive a clinical note template (soft delete).
Parameters
Path Parameters
template_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical-notes/templates/{template_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"Treatment Plans
14 endpoints
/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plansList Treatment Plans
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredQuery Parameters
statusstringpageintegerDefault: 1
page_sizeintegerDefault: 50
Responses
itemsobject[]requiredpageintegerrequiredpage_sizeintegerrequiredtotalintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}Get Plan
Parameters
Path Parameters
plan_uuidstringrequiredorg_idstringrequiredResponses
alternate_group_idintegercreated_atstring (date-time)requireddate_acceptedstring (date-time)date_presentedstring (date-time)date_rejectedstring (date-time)deleted_atstring (date-time)headingstringrequiredidstring (uuid)requiredis_recommendedbooleanrequiredlocation_uuidstring (uuid)notestringrequiredplan_typestringrequiredprovider_uuidstring (uuid)rejection_reasonstringstatusstringrequiredupdated_atstring (date-time)requiredversionintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/proceduresList Procedures
Parameters
Path Parameters
plan_uuidstringrequiredorg_idstringrequiredResponses
itemsobject[]requireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/procedures" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/procedures" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/snapshotsList Snapshots
Parameters
Path Parameters
plan_uuidstringrequiredorg_idstringrequiredResponses
itemsobject[]requireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/snapshots" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/snapshots" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plansCreate Plan
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredRequest Body
alternate_group_idintegerheadingstringrequiredis_recommendedbooleanlocation_uuidstring (uuid)requirednotestringplan_typestringprovider_uuidstring (uuid)responsible_party_uuidstring (uuid)Responses
alternate_group_idintegercreated_atstring (date-time)requireddate_acceptedstring (date-time)date_presentedstring (date-time)date_rejectedstring (date-time)deleted_atstring (date-time)headingstringrequiredidstring (uuid)requiredis_recommendedbooleanrequiredlocation_uuidstring (uuid)notestringrequiredplan_typestringrequiredprovider_uuidstring (uuid)rejection_reasonstringstatusstringrequiredupdated_atstring (date-time)requiredversionintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"alternate_group_id": 1,
"heading": "string",
"is_recommended": false,
"location_uuid": "00000000-0000-0000-0000-000000000000",
"note": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/treatment-plans" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"alternate_group_id": 1,
"heading": "string",
"is_recommended": false,
"location_uuid": "00000000-0000-0000-0000-000000000000",
"note": "string"
}'/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/acceptAccept Plan
Parameters
Path Parameters
plan_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredplan_dataobjectrequiredResponses
alternate_group_idintegercreated_atstring (date-time)requireddate_acceptedstring (date-time)date_presentedstring (date-time)date_rejectedstring (date-time)deleted_atstring (date-time)headingstringrequiredidstring (uuid)requiredis_recommendedbooleanrequiredlocation_uuidstring (uuid)notestringrequiredplan_typestringrequiredprovider_uuidstring (uuid)rejection_reasonstringstatusstringrequiredupdated_atstring (date-time)requiredversionintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/accept" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"plan_data": {}
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/accept" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"plan_data": {}
}'/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/presentPresent Plan
Parameters
Path Parameters
plan_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredResponses
alternate_group_idintegercreated_atstring (date-time)requireddate_acceptedstring (date-time)date_presentedstring (date-time)date_rejectedstring (date-time)deleted_atstring (date-time)headingstringrequiredidstring (uuid)requiredis_recommendedbooleanrequiredlocation_uuidstring (uuid)notestringrequiredplan_typestringrequiredprovider_uuidstring (uuid)rejection_reasonstringstatusstringrequiredupdated_atstring (date-time)requiredversionintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/present" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/present" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1
}'/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/proceduresAdd Procedure
Parameters
Path Parameters
plan_uuidstringrequiredorg_idstringrequiredRequest Body
charted_procedure_uuidstring (uuid)requireditem_orderintegerpriority_uuidstring (uuid)visit_numberintegerResponses
charted_procedure_uuidstring (uuid)created_atstring (date-time)requiredfeestringidstring (uuid)requiredis_scheduledbooleanWhether the charted procedure is linked to an appointment.
item_orderintegerrequiredpriority_uuidstring (uuid)procedure_codestringprocedure_code_uuidstring (uuid)procedure_descriptionstringquadrantstringscheduled_appointment_uuidstring (uuid)surfacestringtooth_numstringvisit_numberintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/procedures" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"charted_procedure_uuid": "00000000-0000-0000-0000-000000000000",
"item_order": 0,
"priority_uuid": "string",
"visit_number": 1
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/procedures" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"charted_procedure_uuid": "00000000-0000-0000-0000-000000000000",
"item_order": 0,
"priority_uuid": "string",
"visit_number": 1
}'/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/rejectReject Plan
Parameters
Path Parameters
plan_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredrejection_reasonstringResponses
alternate_group_idintegercreated_atstring (date-time)requireddate_acceptedstring (date-time)date_presentedstring (date-time)date_rejectedstring (date-time)deleted_atstring (date-time)headingstringrequiredidstring (uuid)requiredis_recommendedbooleanrequiredlocation_uuidstring (uuid)notestringrequiredplan_typestringrequiredprovider_uuidstring (uuid)rejection_reasonstringstatusstringrequiredupdated_atstring (date-time)requiredversionintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/reject" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"rejection_reason": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/reject" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"rejection_reason": "string"
}'/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/reorderReorder Procedures
Parameters
Path Parameters
plan_uuidstringrequiredorg_idstringrequiredRequest Body
procedure_orderobject[]requiredResponses
itemsobject[]requireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/reorder" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"procedure_order": []
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/reorder" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"procedure_order": []
}'/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/snapshotsCreate Snapshot
Parameters
Path Parameters
plan_uuidstringrequiredorg_idstringrequiredRequest Body
plan_dataobjectrequiredResponses
created_atstring (date-time)requiredheadingstringidstring (uuid)requiredis_patient_signedbooleanrequiredis_practice_signedbooleanrequirednotestringpatient_signaturestringpatient_signed_atstring (date-time)patient_signer_namestringplan_dataobjectrequiredpractice_signaturestringpractice_signed_atstring (date-time)practice_signer_namestringsnapshot_datestring (date-time)requiredsnapshot_typestringrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/snapshots" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"plan_data": {}
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}/snapshots" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"plan_data": {}
}'/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}Update Plan
Parameters
Path Parameters
plan_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredheadingstringis_recommendedbooleanlocation_uuidstring (uuid)notestringprovider_uuidstring (uuid)Responses
alternate_group_idintegercreated_atstring (date-time)requireddate_acceptedstring (date-time)date_presentedstring (date-time)date_rejectedstring (date-time)deleted_atstring (date-time)headingstringrequiredidstring (uuid)requiredis_recommendedbooleanrequiredlocation_uuidstring (uuid)notestringrequiredplan_typestringrequiredprovider_uuidstring (uuid)rejection_reasonstringstatusstringrequiredupdated_atstring (date-time)requiredversionintegerrequireddetailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"heading": "string",
"is_recommended": null,
"location_uuid": "string",
"note": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"heading": "string",
"is_recommended": null,
"location_uuid": "string",
"note": "string"
}'/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}Delete Plan
Parameters
Path Parameters
plan_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/{plan_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/treatment-plans/procedures/{link_uuid}Remove Procedure
Parameters
Path Parameters
link_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/procedures/{link_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/treatment-plans/procedures/{link_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"Perio
8 endpoints
/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}Get perio voice session
Parameters
Path Parameters
voice_session_uuidstringrequiredorg_idstringrequiredResponses
audio_chunk_countintegerrequiredaudio_formatstringrequiredcancelled_atstring (date-time)completed_atstring (date-time)created_atstring (date-time)requiredexam_refstring (uuid)requiredfailed_atstring (date-time)failure_codestringfailure_messagestringfinal_transcript_countintegerrequiredfinal_transcript_hmac_sha256stringhost_practice_refstringrequiredidstring (uuid)requiredinterim_transcript_countintegerrequiredlast_event_atstring (date-time)localestringrequiredlocation_refstringpatient_refstringrequiredprovider_refstringprovider_session_refstringraw_audio_retainedbooleanrequiredraw_transcript_retainedbooleanrequiredretention_policystringrequiredsafe_metadataobjectsample_rate_hzintegerstarted_atstring (date-time)started_by_refstringstatusenumrequiredcancelledcompletedcreatedfailedlisteningstt_providerstringrequiredtranscript_char_countintegerrequiredtranscript_fingerprint_policystringrequiredupdated_atstring (date-time)requiredversionintegerrequireddetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/support-replayGet safe Perio voice support replay
Return support-safe BFF and Perio-MS voice replay summaries.
Parameters
Path Parameters
voice_session_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/support-replay" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/support-replay" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/voice-sessionsCreate perio voice session
Create a voice session through Perio-MS without exposing service identity.
Parameters
Path Parameters
exam_uuidstringrequiredorg_idstringrequiredRequest Body
audio_formatstringclient_session_refstringlocalestringprovider_session_refstringsafe_metadataobjectsample_rate_hzintegerstt_providerstringrequiredResponses
audio_chunk_countintegerrequiredaudio_formatstringrequiredcancelled_atstring (date-time)completed_atstring (date-time)created_atstring (date-time)requiredexam_refstring (uuid)requiredfailed_atstring (date-time)failure_codestringfailure_messagestringfinal_transcript_countintegerrequiredfinal_transcript_hmac_sha256stringhost_practice_refstringrequiredidstring (uuid)requiredinterim_transcript_countintegerrequiredlast_event_atstring (date-time)localestringrequiredlocation_refstringpatient_refstringrequiredprovider_refstringprovider_session_refstringraw_audio_retainedbooleanrequiredraw_transcript_retainedbooleanrequiredretention_policystringrequiredsafe_metadataobjectsample_rate_hzintegerstarted_atstring (date-time)started_by_refstringstatusenumrequiredcancelledcompletedcreatedfailedlisteningstt_providerstringrequiredtranscript_char_countintegerrequiredtranscript_fingerprint_policystringrequiredupdated_atstring (date-time)requiredversionintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/voice-sessions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"audio_format": "webm-opus",
"client_session_ref": "string",
"locale": "en-US",
"provider_session_ref": "string",
"safe_metadata": {},
"stt_provider": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/voice-sessions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"audio_format": "webm-opus",
"client_session_ref": "string",
"locale": "en-US",
"provider_session_ref": "string",
"safe_metadata": {},
"stt_provider": "string"
}'/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/cancelCancel perio voice session
Parameters
Path Parameters
voice_session_uuidstringrequiredorg_idstringrequiredRequest Body
audio_chunk_countintegerfinal_transcript_countintegerfinal_transcript_hmac_sha256stringinterim_transcript_countintegerprovider_session_refstringsafe_metadataobjecttranscript_char_countintegerResponses
audio_chunk_countintegerrequiredaudio_formatstringrequiredcancelled_atstring (date-time)completed_atstring (date-time)created_atstring (date-time)requiredexam_refstring (uuid)requiredfailed_atstring (date-time)failure_codestringfailure_messagestringfinal_transcript_countintegerrequiredfinal_transcript_hmac_sha256stringhost_practice_refstringrequiredidstring (uuid)requiredinterim_transcript_countintegerrequiredlast_event_atstring (date-time)localestringrequiredlocation_refstringpatient_refstringrequiredprovider_refstringprovider_session_refstringraw_audio_retainedbooleanrequiredraw_transcript_retainedbooleanrequiredretention_policystringrequiredsafe_metadataobjectsample_rate_hzintegerstarted_atstring (date-time)started_by_refstringstatusenumrequiredcancelledcompletedcreatedfailedlisteningstt_providerstringrequiredtranscript_char_countintegerrequiredtranscript_fingerprint_policystringrequiredupdated_atstring (date-time)requiredversionintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/cancel" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"audio_chunk_count": 1,
"final_transcript_count": 1,
"final_transcript_hmac_sha256": "string",
"interim_transcript_count": 1,
"provider_session_ref": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/cancel" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"audio_chunk_count": 1,
"final_transcript_count": 1,
"final_transcript_hmac_sha256": "string",
"interim_transcript_count": 1,
"provider_session_ref": "string"
}'/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/direct-credentialCreate perio voice direct credential
Mint a short-lived provider credential through Perio-MS without exposing root keys.
Parameters
Path Parameters
voice_session_uuidstringrequiredorg_idstringrequiredRequest Body
provider_profile_refstringrequested_ttl_secondsintegerResponses
accessTokenstringrequiredallowedTransportModestringrequiredauthTransportstringrequiredcredentialRefstringrequiredexpiresAtstringrequiredproviderstringrequiredproviderProfileRefstringrequiredqueryobjectrequiredsessionRefstringrequiredtranscriptFingerprintPolicystringrequiredwebsocketUrlstringrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/direct-credential" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"provider_profile_ref": "string",
"requested_ttl_seconds": 1
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/direct-credential" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"provider_profile_ref": "string",
"requested_ttl_seconds": 1
}'/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/finishFinish perio voice session
Parameters
Path Parameters
voice_session_uuidstringrequiredorg_idstringrequiredRequest Body
audio_chunk_countintegerfinal_transcript_countintegerfinal_transcript_hmac_sha256stringinterim_transcript_countintegerprovider_session_refstringsafe_metadataobjecttranscript_char_countintegerResponses
audio_chunk_countintegerrequiredaudio_formatstringrequiredcancelled_atstring (date-time)completed_atstring (date-time)created_atstring (date-time)requiredexam_refstring (uuid)requiredfailed_atstring (date-time)failure_codestringfailure_messagestringfinal_transcript_countintegerrequiredfinal_transcript_hmac_sha256stringhost_practice_refstringrequiredidstring (uuid)requiredinterim_transcript_countintegerrequiredlast_event_atstring (date-time)localestringrequiredlocation_refstringpatient_refstringrequiredprovider_refstringprovider_session_refstringraw_audio_retainedbooleanrequiredraw_transcript_retainedbooleanrequiredretention_policystringrequiredsafe_metadataobjectsample_rate_hzintegerstarted_atstring (date-time)started_by_refstringstatusenumrequiredcancelledcompletedcreatedfailedlisteningstt_providerstringrequiredtranscript_char_countintegerrequiredtranscript_fingerprint_policystringrequiredupdated_atstring (date-time)requiredversionintegerrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/finish" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"audio_chunk_count": 0,
"final_transcript_count": 0,
"final_transcript_hmac_sha256": "string",
"interim_transcript_count": 0,
"provider_session_ref": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/finish" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"audio_chunk_count": 0,
"final_transcript_count": 0,
"final_transcript_hmac_sha256": "string",
"interim_transcript_count": 0,
"provider_session_ref": "string"
}'/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/runtime-telemetryForward Perio voice browser/runtime telemetry
Forward browser/runtime voice telemetry to Perio-MS.
Parameters
Path Parameters
voice_session_uuidstringrequiredorg_idstringrequiredRequest Body
eventsobject[]requiredResponses
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/runtime-telemetry" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"events": []
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/runtime-telemetry" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"events": []
}'/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/stream-ticketCreate perio voice stream ticket
Mint a short-lived browser-safe ticket for the Perio voice WebSocket.
Parameters
Path Parameters
voice_session_uuidstringrequiredorg_idstringrequiredResponses
expires_atstring (date-time)requiredticketstringrequireddetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/stream-ticket" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-voice-sessions/{voice_session_uuid}/stream-ticket" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"Exams
13 endpoints
/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-bootGet perio chart boot data
Single-request initialization for the perio charting UI.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredQuery Parameters
provider_uuidstringOptional provider UUID for settings resolution
location_uuidstringOptional location UUID for settings resolution
Responses
implant_teethstring[]Tooth numbers identified as implants. Currently always returns an empty list — implant tracking via tooth status is not yet implemented. Reserved for future use when an 'implant' tooth status value is added.
missing_teethstring[]requiredTooth numbers recorded as missing.
present_teethstring[]requiredTooth numbers currently present in the patient's mouth (universal numbering '1'-'32' / 'A'-'T').
recent_examsobject[]requiredUp to the last 5 exams for this patient, ordered by exam_date descending, with measurement counts.
resolved_settingsobjectrequiredFully merged perio settings from the hierarchy (system defaults -> practice -> location -> provider), including '_sources' metadata indicating the origin level of each value.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-boot" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-boot" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-comparisonCompare two perio exams
Compare two perio exams side by side.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredQuery Parameters
exam_uuid_1stringrequiredFirst exam (typically earlier)
exam_uuid_2stringrequiredSecond exam (typically later)
Responses
comparisonobjectPer-tooth comparison keyed by tooth number. Each value is a dict of site surfaces (e.g. 'DB') or per-tooth fields (e.g. 'furcation'), each containing: {'delta': int, 'direction': 'improved'|'worsened'|'unchanged', 'significant': bool}. 'significant' is True when abs(delta) >= 2.
exam_1objectrequiredFirst (earlier) exam in the comparison.
exam_2objectrequiredSecond (later) exam in the comparison.
summary_comparisonobjectAggregate delta between exam_1 and exam_2 summaries: 'average_probing_depth_delta', 'bleeding_pct_delta', etc. Each value is a signed float.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-comparison" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-comparison" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-examsList perio exams
List all perio exams for a patient ordered by date descending.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredQuery Parameters
exam_typestringFilter by exam type: full, psr, or plaque_bleeding
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page (1-200)
Default: 50
Responses
itemsobject[]requiredPage of exam records.
pageintegerrequiredCurrent page number (1-based).
page_sizeintegerrequiredMaximum items per page.
totalintegerrequiredTotal number of matching exams.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-exams" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-exams" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-trendsGet perio trends
Longitudinal trend data across all exams for a patient.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredQuery Parameters
exam_typestringFilter by exam type: full, psr, or plaque_bleeding
limitintegerMaximum number of exams to return.
Default: 20
Responses
examsobject[]requiredExam snapshots in chronological order (oldest first), each containing summary statistics and per-tooth data.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-trends" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-trends" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}Get perio exam detail
Retrieve a perio exam with nested measurements and summary statistics.
Parameters
Path Parameters
exam_uuidstringrequiredorg_idstringrequiredResponses
appointmentobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when the exam was created.
exam_datestring (date)requiredDate the exam was performed.
exam_typeenumrequiredExam scope: 'full' (comprehensive), 'psr' (screening), or 'plaque_bleeding' (O'Leary plaque/bleeding index).
fullplaque_bleedingpsridstring (uuid)requiredUnique identifier of the exam.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
measurementsobjectrequiredNested measurement data keyed by tooth number, then by site code (e.g., 'F0', 'L3'), with measurement values per sequence type.
notestringrequiredFree-text clinical note.
providerobjectrequiredLightweight reference to a related entity — exposes UUID and optional name.
statusenumrequiredLifecycle status of the exam.
completedin_progressreviewedsummaryobjectrequiredComputed clinical statistics: average probing depth, percentage of sites with bleeding on probing, max probing depth, attachment loss distribution, and other aggregate metrics.
updated_atstring (date-time)requiredTimestamp of the last modification.
versionintegerrequiredOptimistic-concurrency version for conflict detection.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/patient-reportGet latest perio patient report
Return the latest patient report status for the exam, or null when none exists.
Parameters
Path Parameters
exam_uuidstringrequiredorg_idstringrequiredResponses
exam_refstring (uuid)requiredExam this report belongs to.
failure_codestringhost_document_refstringidstring (uuid)requiredReport public id.
statusstringrequiredOne of: pending, generated, delivering, delivered, failed, skipped_no_data, skipped_disabled.
triggerstringrequiredOne of: auto, manual.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/patient-report" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/patient-report" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-examsCreate perio exam
Create a new periodontal examination for a patient.
Parameters
Path Parameters
patient_uuidstringrequiredorg_idstringrequiredRequest Body
appointment_uuidstring (uuid)exam_datestring (date)exam_typeenumfullplaque_bleedingpsrlocation_uuidstring (uuid)notestringprovider_uuidstring (uuid)requiredUUID of the provider performing the exam.
Responses
appointmentobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when the exam was created.
exam_datestring (date)requiredDate the exam was performed.
exam_typeenumrequiredExam scope: 'full' (comprehensive), 'psr' (screening), or 'plaque_bleeding' (O'Leary plaque/bleeding index).
fullplaque_bleedingpsridstring (uuid)requiredUnique identifier of the exam.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
notestringrequiredFree-text clinical note.
providerobjectrequiredLightweight reference to a related entity — exposes UUID and optional name.
statusenumrequiredLifecycle status of the exam.
completedin_progressreviewedupdated_atstring (date-time)requiredTimestamp of the last modification.
versionintegerrequiredOptimistic-concurrency version; include in updates to detect conflicts.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-exams" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"appointment_uuid": "string",
"exam_date": "string",
"exam_type": "string",
"location_uuid": "string",
"note": "string",
"provider_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/patients/{patient_uuid}/perio-exams" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"appointment_uuid": "string",
"exam_date": "string",
"exam_type": "string",
"location_uuid": "string",
"note": "string",
"provider_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/convert-to-fullConvert PSR to full exam
Create a new full periodontal exam from a completed PSR screening.
Parameters
Path Parameters
exam_uuidstringrequiredorg_idstringrequiredResponses
appointmentobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when the exam was created.
exam_datestring (date)requiredDate the exam was performed.
exam_typeenumrequiredExam scope: 'full' (comprehensive), 'psr' (screening), or 'plaque_bleeding' (O'Leary plaque/bleeding index).
fullplaque_bleedingpsridstring (uuid)requiredUnique identifier of the exam.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
notestringrequiredFree-text clinical note.
providerobjectrequiredLightweight reference to a related entity — exposes UUID and optional name.
statusenumrequiredLifecycle status of the exam.
completedin_progressreviewedupdated_atstring (date-time)requiredTimestamp of the last modification.
versionintegerrequiredOptimistic-concurrency version; include in updates to detect conflicts.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/convert-to-full" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/convert-to-full" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/measurementsSave measurements
Batch upsert measurements for a perio exam.
Parameters
Path Parameters
exam_uuidstringrequiredorg_idstringrequiredRequest Body
measurementsobject[]requiredList of individual measurement records to upsert. Existing measurements for the same tooth/surface/site/sequence are overwritten.
provenanceobjectSafe source metadata for measurement saves. This intentionally excludes transcripts, audio, provider raw events, and measurement payload details.
Responses
measurementsobjectrequiredNested dict of saved measurements keyed by tooth number, then by site code, containing the persisted measurement values.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/measurements" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"measurements": [],
"provenance": null
}'curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/measurements" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"measurements": [],
"provenance": null
}'/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/patient-reportGenerate perio patient report
Manually generate the patient-facing report. Raises 409 if one is already generating, 422 if patient reports are disabled or the exam is not completed.
Parameters
Path Parameters
exam_uuidstringrequiredorg_idstringrequiredResponses
exam_refstring (uuid)requiredExam this report belongs to.
failure_codestringhost_document_refstringidstring (uuid)requiredReport public id.
statusstringrequiredOne of: pending, generated, delivering, delivered, failed, skipped_no_data, skipped_disabled.
triggerstringrequiredOne of: auto, manual.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/patient-report" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/patient-report" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/completeComplete perio exam
Transition exam status from in_progress to completed.
Parameters
Path Parameters
exam_uuidstringrequiredorg_idstringrequiredResponses
appointmentobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when the exam was created.
exam_datestring (date)requiredDate the exam was performed.
exam_typeenumrequiredExam scope: 'full' (comprehensive), 'psr' (screening), or 'plaque_bleeding' (O'Leary plaque/bleeding index).
fullplaque_bleedingpsridstring (uuid)requiredUnique identifier of the exam.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
notestringrequiredFree-text clinical note.
providerobjectrequiredLightweight reference to a related entity — exposes UUID and optional name.
statusenumrequiredLifecycle status of the exam.
completedin_progressreviewedupdated_atstring (date-time)requiredTimestamp of the last modification.
versionintegerrequiredOptimistic-concurrency version; include in updates to detect conflicts.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/complete" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/complete" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/reviewReview perio exam
Transition exam status from completed to reviewed.
Parameters
Path Parameters
exam_uuidstringrequiredorg_idstringrequiredResponses
appointmentobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when the exam was created.
exam_datestring (date)requiredDate the exam was performed.
exam_typeenumrequiredExam scope: 'full' (comprehensive), 'psr' (screening), or 'plaque_bleeding' (O'Leary plaque/bleeding index).
fullplaque_bleedingpsridstring (uuid)requiredUnique identifier of the exam.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
notestringrequiredFree-text clinical note.
providerobjectrequiredLightweight reference to a related entity — exposes UUID and optional name.
statusenumrequiredLifecycle status of the exam.
completedin_progressreviewedupdated_atstring (date-time)requiredTimestamp of the last modification.
versionintegerrequiredOptimistic-concurrency version; include in updates to detect conflicts.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/review" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X PATCH "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}/review" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}Delete perio exam
Soft-delete a periodontal exam.
Parameters
Path Parameters
exam_uuidstringrequiredorg_idstringrequiredResponses
appointmentobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when the exam was created.
exam_datestring (date)requiredDate the exam was performed.
exam_typeenumrequiredExam scope: 'full' (comprehensive), 'psr' (screening), or 'plaque_bleeding' (O'Leary plaque/bleeding index).
fullplaque_bleedingpsridstring (uuid)requiredUnique identifier of the exam.
locationobjectLightweight reference to a related entity — exposes UUID and optional name.
notestringrequiredFree-text clinical note.
providerobjectrequiredLightweight reference to a related entity — exposes UUID and optional name.
statusenumrequiredLifecycle status of the exam.
completedin_progressreviewedupdated_atstring (date-time)requiredTimestamp of the last modification.
versionintegerrequiredOptimistic-concurrency version; include in updates to detect conflicts.
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/perio-exams/{exam_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"Settings
11 endpoints
/api/v1/{org_id}/clinical/perio-settings/locationsList location overrides
List all location-level settings overrides.
Parameters
Path Parameters
org_idstringrequiredResponses
itemsobject[]requiredLocation settings override summaries.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/locations" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/locations" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-settings/locations/{location_uuid}Get location settings
Get location-level settings override.
Parameters
Path Parameters
location_uuidstringrequiredorg_idstringrequiredResponses
idstring (uuid)requiredUnique identifier of the override record.
is_activebooleanrequiredWhether location-level overrides are currently enabled.
location_uuidstring (uuid)override_payloadobjectrequiredJSON dict of setting keys overridden at this location.
versionintegerrequiredOptimistic-concurrency version for safe updates.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/locations/{location_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/locations/{location_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-settings/practiceGet practice settings
Get practice-level perio settings.
Parameters
Path Parameters
org_idstringrequiredResponses
comparison_configobjectrequiredExam comparison view settings.
default_exam_typestringrequiredDefault exam type for new exams ('full', 'psr', or 'plaque_bleeding').
exam_configobjectrequiredExam behavior configuration (sites per tooth, default sequences, etc.).
idstring (uuid)patient_report_configobjectrequiredPatient report generation settings.
print_export_configobjectrequiredPrint layout and PDF export settings.
psr_configobjectrequiredPSR screening-specific settings.
summary_configobjectrequiredSummary statistics computation and display settings.
threshold_configobjectrequiredClinical threshold definitions for color-coding probing depths and other metrics.
traversal_configobjectrequiredTooth traversal order and navigation settings.
validation_configobjectrequiredMeasurement range validation rules per sequence type.
versionintegerrequiredOptimistic-concurrency version; supply as base_version in the next update.
visibility_configobjectrequiredDefault column visibility for measurement sequence types.
voice_configobjectrequiredVoice charting dictation settings.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/practice" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/practice" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-settings/providersList provider preferences
List all provider-level preference records.
Parameters
Path Parameters
org_idstringrequiredResponses
itemsobject[]requiredProvider preference summaries.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/providers" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/providers" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-settings/providers/{provider_uuid}Get provider preferences
Get provider-level preferences.
Parameters
Path Parameters
provider_uuidstringrequiredorg_idstringrequiredQuery Parameters
location_uuidstringOptional location UUID to scope preferences to a specific location
Responses
auto_advancebooleanrequiredWhether the cursor auto-advances after measurement entry.
idstring (uuid)requiredUnique identifier of the preferences record.
is_activebooleanrequiredWhether provider-level overrides are currently enabled.
location_uuidstring (uuid)override_payloadobjectrequiredJSON dict of setting keys overridden by this provider.
versionintegerrequiredOptimistic-concurrency version for safe updates.
voice_charting_enabledbooleanrequiredWhether voice dictation input is enabled.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/providers/{provider_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/providers/{provider_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-settings/resolvedGet resolved settings
Get effective settings resolved from the hierarchy.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
provider_uuidstringOptional provider UUID for hierarchy resolution
location_uuidstringOptional location UUID for hierarchy resolution
Responses
settingsobjectrequiredFully merged settings dictionary. Each top-level key is a config section (e.g., 'threshold_config', 'visibility_config'). A special '_sources' key maps each setting to the hierarchy level it was resolved from ('system', 'practice', 'location', or 'provider').
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/resolved" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/resolved" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-settings/locations/{location_uuid}Update location settings
Create or update location-level settings override.
Parameters
Path Parameters
location_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegeris_activebooleanoverride_payloadobjectJSON dict of setting keys to override at this location. Keys correspond to practice-level config section names (e.g., 'threshold_config', 'visibility_config'). Only included keys override the practice default; omitted keys inherit.
Responses
idstring (uuid)requiredUnique identifier of the override record.
is_activebooleanrequiredWhether location-level overrides are currently enabled.
location_uuidstring (uuid)override_payloadobjectrequiredJSON dict of setting keys overridden at this location.
versionintegerrequiredOptimistic-concurrency version for safe updates.
detailobject[]curl -X PUT "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/locations/{location_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"is_active": null,
"override_payload": {}
}'curl -X PUT "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/locations/{location_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"is_active": null,
"override_payload": {}
}'/api/v1/{org_id}/clinical/perio-settings/practiceUpdate practice settings
Create or update practice-level perio settings.
Parameters
Path Parameters
org_idstringrequiredRequest Body
base_versionintegercomparison_configobjectdefault_exam_typeenumfullplaque_bleedingpsrexam_configobjectpatient_report_configobjectprint_export_configobjectpsr_configobjectsummary_configobjectthreshold_configobjecttraversal_configobjectvalidation_configobjectvisibility_configobjectvoice_configobjectResponses
comparison_configobjectrequiredExam comparison view settings.
default_exam_typestringrequiredDefault exam type for new exams ('full', 'psr', or 'plaque_bleeding').
exam_configobjectrequiredExam behavior configuration (sites per tooth, default sequences, etc.).
idstring (uuid)patient_report_configobjectrequiredPatient report generation settings.
print_export_configobjectrequiredPrint layout and PDF export settings.
psr_configobjectrequiredPSR screening-specific settings.
summary_configobjectrequiredSummary statistics computation and display settings.
threshold_configobjectrequiredClinical threshold definitions for color-coding probing depths and other metrics.
traversal_configobjectrequiredTooth traversal order and navigation settings.
validation_configobjectrequiredMeasurement range validation rules per sequence type.
versionintegerrequiredOptimistic-concurrency version; supply as base_version in the next update.
visibility_configobjectrequiredDefault column visibility for measurement sequence types.
voice_configobjectrequiredVoice charting dictation settings.
detailobject[]curl -X PUT "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/practice" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"comparison_config": null,
"default_exam_type": "string",
"exam_config": null,
"patient_report_config": null
}'curl -X PUT "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/practice" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"comparison_config": null,
"default_exam_type": "string",
"exam_config": null,
"patient_report_config": null
}'/api/v1/{org_id}/clinical/perio-settings/providers/{provider_uuid}Update provider preferences
Create or update provider-level preferences.
Parameters
Path Parameters
provider_uuidstringrequiredorg_idstringrequiredRequest Body
auto_advancebooleanbase_versionintegeris_activebooleanlocation_uuidstring (uuid)override_payloadobjectJSON dict of setting keys to override at the provider level. Keys correspond to practice/location config section names.
voice_charting_enabledbooleanResponses
auto_advancebooleanrequiredWhether the cursor auto-advances after measurement entry.
idstring (uuid)requiredUnique identifier of the preferences record.
is_activebooleanrequiredWhether provider-level overrides are currently enabled.
location_uuidstring (uuid)override_payloadobjectrequiredJSON dict of setting keys overridden by this provider.
versionintegerrequiredOptimistic-concurrency version for safe updates.
voice_charting_enabledbooleanrequiredWhether voice dictation input is enabled.
detailobject[]curl -X PUT "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/providers/{provider_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"auto_advance": null,
"base_version": 1,
"is_active": null,
"location_uuid": "string",
"override_payload": {}
}'curl -X PUT "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/providers/{provider_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"auto_advance": null,
"base_version": 1,
"is_active": null,
"location_uuid": "string",
"override_payload": {}
}'/api/v1/{org_id}/clinical/perio-settings/locations/{location_uuid}Delete location settings
Delete location settings override.
Parameters
Path Parameters
location_uuidstringrequiredorg_idstringrequiredResponses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/locations/{location_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/locations/{location_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/clinical/perio-settings/providers/{provider_uuid}Delete provider preferences
Delete provider preferences.
Parameters
Path Parameters
provider_uuidstringrequiredorg_idstringrequiredQuery Parameters
location_uuidstringOptional location UUID to scope the deletion to a specific location
Responses
detailobject[]curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/providers/{provider_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X DELETE "https://api.example.com/api/v1/{org_id}/clinical/perio-settings/providers/{provider_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"