Odontogram
107 endpoints
Auto-Codes
11 endpoints
/api/v1/{org_id}/odontogram/auto-codes/auto-code-familiesList auto-code families
List auto-code families with optional filtering by active status or search. Results are paginated.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page
Default: 50
is_activebooleanFilter by active status
searchstringSearch by family name or display name
Responses
itemsobject[]requiredList of auto-code family records.
totalintegerrequiredTotal number of auto-code families matching the query.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-families" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-families" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}Get auto-code family
Retrieve a single auto-code family by UUID. Raises 404 if not found.
Parameters
Path Parameters
family_uuidstringrequiredorg_idstringrequiredResponses
base_procedure_codestringcreated_atstring (date-time)requiredTimestamp when this auto-code family was created.
descriptionstringdisplay_namestringrequiredHuman-readable display name (e.g., 'Amalgam by Surface Count').
family_namestringrequiredUnique machine-readable family identifier (e.g., 'amalgam_by_surface', 'composite_by_surface').
idstring (uuid)requiredUnique identifier (UUID) of this auto-code family.
is_activebooleanrequiredWhether this family is active and available for auto-code resolution.
requires_material_familybooleanrequiredTrue if any active rule in this family requires material_family in the resolution context.
selection_typeenumrequiredCriterion type for selecting the correct code. One of: surface_count, tooth_type, arch, unit_count, material, age, combined.
agearchcombineddentitionmaterialsurface_counttooth_positiontooth_typeunit_countupdated_atstring (date-time)requiredTimestamp when this auto-code family was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}/rulesList rules for family
List all auto-code rules belonging to a specific family. Results are paginated and ordered by priority (descending).
Parameters
Path Parameters
family_uuidstringrequiredorg_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page
Default: 50
Responses
itemsobject[]requiredList of auto-code rule records.
totalintegerrequiredTotal number of auto-code rules matching the query.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}/rules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}/rules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/auto-codes/auto-code-rules/{rule_uuid}Get auto-code rule
Retrieve a single auto-code rule by UUID. Raises 404 if not found.
Parameters
Path Parameters
rule_uuidstringrequiredorg_idstringrequiredResponses
conditionsobjectrequiredJSON object defining the matching criteria. Structure depends on the family's selection_type.
created_atstring (date-time)requiredTimestamp when this auto-code rule was created.
familyobjectLightweight reference to a related entity — exposes UUID and optional name.
idstring (uuid)requiredUnique identifier (UUID) of this auto-code rule.
is_activebooleanrequiredWhether this rule is active and eligible for matching.
priorityintegerrequiredEvaluation priority. Higher-priority rules are checked first.
procedure_codestringrequiredCDT procedure code selected when this rule's conditions match (e.g., 'D2140', 'D2150').
updated_atstring (date-time)requiredTimestamp when this auto-code rule was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-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}/odontogram/auto-codes/auto-code-rules/{rule_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/auto-codes/auto-code-familiesCreate auto-code family
Create a new auto-code family. A family groups related auto-code rules that select the correct CDT procedure code based on clinical context (e.g., surface count, tooth type). Raises 409 if a family with the same `family_name` already exists.
Parameters
Path Parameters
org_idstringrequiredRequest Body
base_procedure_codestringdescriptionstringdisplay_namestringrequiredHuman-readable display name (e.g., 'Amalgam by Surface Count').
family_namestringrequiredUnique machine-readable family identifier (e.g., 'amalgam_by_surface', 'composite_by_surface'). Immutable after creation.
is_activebooleanWhether this family is active and available for auto-code resolution.
selection_typeenumrequiredCriterion type for selecting the correct code. One of: surface_count, tooth_type, arch, unit_count, material, age, combined.
agearchcombineddentitionmaterialsurface_counttooth_positiontooth_typeunit_countResponses
base_procedure_codestringcreated_atstring (date-time)requiredTimestamp when this auto-code family was created.
descriptionstringdisplay_namestringrequiredHuman-readable display name (e.g., 'Amalgam by Surface Count').
family_namestringrequiredUnique machine-readable family identifier (e.g., 'amalgam_by_surface', 'composite_by_surface').
idstring (uuid)requiredUnique identifier (UUID) of this auto-code family.
is_activebooleanrequiredWhether this family is active and available for auto-code resolution.
requires_material_familybooleanrequiredTrue if any active rule in this family requires material_family in the resolution context.
selection_typeenumrequiredCriterion type for selecting the correct code. One of: surface_count, tooth_type, arch, unit_count, material, age, combined.
agearchcombineddentitionmaterialsurface_counttooth_positiontooth_typeunit_countupdated_atstring (date-time)requiredTimestamp when this auto-code family was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-families" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_procedure_code": "string",
"description": "string",
"display_name": "string",
"family_name": "string",
"is_active": true,
"selection_type": "age"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-families" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_procedure_code": "string",
"description": "string",
"display_name": "string",
"family_name": "string",
"is_active": true,
"selection_type": "age"
}'/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}/archiveArchive auto-code family
Soft-delete an auto-code family and all its rules. Raises 404 if not found.
Parameters
Path Parameters
family_uuidstringrequiredorg_idstringrequiredResponses
base_procedure_codestringcreated_atstring (date-time)requiredTimestamp when this auto-code family was created.
descriptionstringdisplay_namestringrequiredHuman-readable display name (e.g., 'Amalgam by Surface Count').
family_namestringrequiredUnique machine-readable family identifier (e.g., 'amalgam_by_surface', 'composite_by_surface').
idstring (uuid)requiredUnique identifier (UUID) of this auto-code family.
is_activebooleanrequiredWhether this family is active and available for auto-code resolution.
requires_material_familybooleanrequiredTrue if any active rule in this family requires material_family in the resolution context.
selection_typeenumrequiredCriterion type for selecting the correct code. One of: surface_count, tooth_type, arch, unit_count, material, age, combined.
agearchcombineddentitionmaterialsurface_counttooth_positiontooth_typeunit_countupdated_atstring (date-time)requiredTimestamp when this auto-code family was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}/rulesCreate auto-code rule
Create a new rule within an auto-code family. Each rule maps a set of clinical conditions to a specific CDT procedure code. Raises 404 if the parent family does not exist.
Parameters
Path Parameters
family_uuidstringrequiredorg_idstringrequiredRequest Body
conditionsobjectrequiredJSON object defining the matching criteria. Structure depends on the family's selection_type. Example for surface_count: {"surface_count": 1}. Example for combined: {"surface_count": {"min": 2, "max": 3}, "tooth_type": "posterior"}.
is_activebooleanWhether this rule is active and eligible for matching.
priorityintegerEvaluation priority. Higher-priority rules are checked first. Default 0.
procedure_codestringrequiredCDT procedure code selected when this rule's conditions match (e.g., 'D2140', 'D2150').
Responses
conditionsobjectrequiredJSON object defining the matching criteria. Structure depends on the family's selection_type.
created_atstring (date-time)requiredTimestamp when this auto-code rule was created.
familyobjectLightweight reference to a related entity — exposes UUID and optional name.
idstring (uuid)requiredUnique identifier (UUID) of this auto-code rule.
is_activebooleanrequiredWhether this rule is active and eligible for matching.
priorityintegerrequiredEvaluation priority. Higher-priority rules are checked first.
procedure_codestringrequiredCDT procedure code selected when this rule's conditions match (e.g., 'D2140', 'D2150').
updated_atstring (date-time)requiredTimestamp when this auto-code rule was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}/rules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"conditions": {},
"is_active": true,
"priority": 0,
"procedure_code": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}/rules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"conditions": {},
"is_active": true,
"priority": 0,
"procedure_code": "string"
}'/api/v1/{org_id}/odontogram/auto-codes/auto-code-rules/{rule_uuid}/archiveArchive auto-code rule
Soft-delete an auto-code rule. Raises 404 if not found.
Parameters
Path Parameters
rule_uuidstringrequiredorg_idstringrequiredResponses
conditionsobjectrequiredJSON object defining the matching criteria. Structure depends on the family's selection_type.
created_atstring (date-time)requiredTimestamp when this auto-code rule was created.
familyobjectLightweight reference to a related entity — exposes UUID and optional name.
idstring (uuid)requiredUnique identifier (UUID) of this auto-code rule.
is_activebooleanrequiredWhether this rule is active and eligible for matching.
priorityintegerrequiredEvaluation priority. Higher-priority rules are checked first.
procedure_codestringrequiredCDT procedure code selected when this rule's conditions match (e.g., 'D2140', 'D2150').
updated_atstring (date-time)requiredTimestamp when this auto-code rule was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-rules/{rule_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-rules/{rule_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/auto-codes/resolveResolve auto-code
Resolve the correct CDT procedure code for a given auto-code family and clinical context. Evaluates rules in priority order and returns the first match. Returns the base_procedure_code as fallback if no rule matches. Returns null procedure_code if no rule matches and no fallback exists. Raises 404 if the family does not exist.
Parameters
Path Parameters
org_idstringrequiredRequest Body
contextobjectrequiredClinical context for resolution. Provide only the fields relevant to this family's selection type.
family_uuidstring (uuid)requiredUUID of the auto-code family to resolve against.
Responses
family_namestringrequiredName of the auto-code family that was resolved.
matched_rule_uuidstring (uuid)procedure_codestringdetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/resolve" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"context": {},
"family_uuid": "00000000-0000-0000-0000-000000000000"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/resolve" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"context": {},
"family_uuid": "00000000-0000-0000-0000-000000000000"
}'/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}Update auto-code family
Partially update an auto-code family. The `family_name` is immutable. Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
family_uuidstringrequiredorg_idstringrequiredRequest Body
base_procedure_codestringbase_versionintegerrequiredCurrent version of the entity. Required for optimistic concurrency — rejected if stale.
descriptionstringdisplay_namestringis_activebooleanselection_typeenumagearchcombineddentitionmaterialsurface_counttooth_positiontooth_typeunit_countResponses
base_procedure_codestringcreated_atstring (date-time)requiredTimestamp when this auto-code family was created.
descriptionstringdisplay_namestringrequiredHuman-readable display name (e.g., 'Amalgam by Surface Count').
family_namestringrequiredUnique machine-readable family identifier (e.g., 'amalgam_by_surface', 'composite_by_surface').
idstring (uuid)requiredUnique identifier (UUID) of this auto-code family.
is_activebooleanrequiredWhether this family is active and available for auto-code resolution.
requires_material_familybooleanrequiredTrue if any active rule in this family requires material_family in the resolution context.
selection_typeenumrequiredCriterion type for selecting the correct code. One of: surface_count, tooth_type, arch, unit_count, material, age, combined.
agearchcombineddentitionmaterialsurface_counttooth_positiontooth_typeunit_countupdated_atstring (date-time)requiredTimestamp when this auto-code family was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_procedure_code": "string",
"base_version": 1,
"description": "string",
"display_name": "string",
"is_active": null
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_procedure_code": "string",
"base_version": 1,
"description": "string",
"display_name": "string",
"is_active": null
}'/api/v1/{org_id}/odontogram/auto-codes/auto-code-rules/{rule_uuid}Update auto-code rule
Partially update an auto-code rule. Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
rule_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version of the entity. Required for optimistic concurrency — rejected if stale.
conditionsobjectis_activebooleanpriorityintegerprocedure_codestringResponses
conditionsobjectrequiredJSON object defining the matching criteria. Structure depends on the family's selection_type.
created_atstring (date-time)requiredTimestamp when this auto-code rule was created.
familyobjectLightweight reference to a related entity — exposes UUID and optional name.
idstring (uuid)requiredUnique identifier (UUID) of this auto-code rule.
is_activebooleanrequiredWhether this rule is active and eligible for matching.
priorityintegerrequiredEvaluation priority. Higher-priority rules are checked first.
procedure_codestringrequiredCDT procedure code selected when this rule's conditions match (e.g., 'D2140', 'D2150').
updated_atstring (date-time)requiredTimestamp when this auto-code rule was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-rules/{rule_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"conditions": null,
"is_active": null,
"priority": 1,
"procedure_code": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/auto-codes/auto-code-rules/{rule_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"conditions": null,
"is_active": null,
"priority": 1,
"procedure_code": "string"
}'Condition Types
5 endpoints
/api/v1/{org_id}/odontogram/condition-typesList condition types
List condition types with optional filtering by category, active status, or search term. Results are paginated and sorted by display_order.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page (1-100)
Default: 50
categorystringFilter by clinical category (e.g., 'restoration', 'prosthetic')
is_activebooleanFilter by active status
searchstringSearch by name or code (case-insensitive substring match)
Responses
itemsobject[]requiredList of condition type records.
totalintegerrequiredTotal number of records matching the query (before pagination).
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/condition-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/condition-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/condition-types/{condition_type_uuid}Get condition type
Retrieve a single condition type by its UUID. Raises 404 if the condition type does not exist.
Parameters
Path Parameters
condition_type_uuidstringrequiredorg_idstringrequiredResponses
abbreviated_descriptionstringaffects_tooth_statusbooleanrequiredWhether recording this condition changes the tooth's clinical status (e.g., marking a tooth as missing).
categoryenumrequiredClinical category. One of: tooth_status, pathology, structural, soft_tissue, monitoring, finding.
findingmonitoringpathologysoft_tissuestructuraltooth_statuscodestringrequiredUnique machine-readable identifier for this condition type (e.g., 'caries', 'missing'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this condition type was created.
default_colorstringdisplay_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
icd10_codestringicd10_descriptionstringiconstringidstring (uuid)requiredUnique identifier (UUID) of this condition type.
is_activebooleanrequiredWhether this condition type is active and available for use.
is_chartablebooleanrequiredTrue if painted on the odontogram (paintable tier); false for coded findings/diagnoses not visually charted.
is_systembooleanrequiredWhether this is a built-in system condition type (true) or user-created (false).
is_watchablebooleanrequiredWhether this condition can be placed on a watch list for monitoring.
namestringrequiredHuman-readable display name (e.g., 'Caries', 'Missing Tooth').
paint_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
snomed_codestringsurface_restrictionobjecttreatment_areaenumrequiredAnatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth, root, range. Default 'tooth'.
archmouthquadrantrangerootsextantsurfacetoothupdated_atstring (date-time)requiredTimestamp when this condition type was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/condition-types/{condition_type_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/condition-types/{condition_type_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/condition-typesCreate condition type
Create a new chart condition type defining a clinical condition recordable on the odontogram. Raises 409 if a condition type with the same `code` already exists.
Parameters
Path Parameters
org_idstringrequiredRequest Body
abbreviated_descriptionstringaffects_tooth_statusbooleanWhether recording this condition changes the tooth's clinical status (e.g., marking a tooth as missing).
categoryenumrequiredClinical category. One of: tooth_status, pathology, structural, soft_tissue, monitoring, finding.
findingmonitoringpathologysoft_tissuestructuraltooth_statuscodestringrequiredUnique machine-readable identifier for this condition type (e.g., 'caries', 'missing'). Immutable after creation.
default_colorstringdisplay_orderintegerSort order for display in UI lists. Lower values appear first.
icd10_codestringicd10_descriptionstringiconstringis_activebooleanWhether this condition type is active and available for use.
is_chartablebooleanTrue if painted on the odontogram; false for coded findings.
is_systembooleanWhether this is a built-in system condition type (true) or user-created (false).
is_watchablebooleanWhether this condition can be placed on a watch list for monitoring.
namestringrequiredHuman-readable display name (e.g., 'Caries', 'Missing Tooth').
paint_type_uuidstring (uuid)snomed_codestringsurface_restrictionobjecttreatment_areaenumAnatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth, root, range. Default 'tooth'.
archmouthquadrantrangerootsextantsurfacetoothResponses
abbreviated_descriptionstringaffects_tooth_statusbooleanrequiredWhether recording this condition changes the tooth's clinical status (e.g., marking a tooth as missing).
categoryenumrequiredClinical category. One of: tooth_status, pathology, structural, soft_tissue, monitoring, finding.
findingmonitoringpathologysoft_tissuestructuraltooth_statuscodestringrequiredUnique machine-readable identifier for this condition type (e.g., 'caries', 'missing'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this condition type was created.
default_colorstringdisplay_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
icd10_codestringicd10_descriptionstringiconstringidstring (uuid)requiredUnique identifier (UUID) of this condition type.
is_activebooleanrequiredWhether this condition type is active and available for use.
is_chartablebooleanrequiredTrue if painted on the odontogram (paintable tier); false for coded findings/diagnoses not visually charted.
is_systembooleanrequiredWhether this is a built-in system condition type (true) or user-created (false).
is_watchablebooleanrequiredWhether this condition can be placed on a watch list for monitoring.
namestringrequiredHuman-readable display name (e.g., 'Caries', 'Missing Tooth').
paint_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
snomed_codestringsurface_restrictionobjecttreatment_areaenumrequiredAnatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth, root, range. Default 'tooth'.
archmouthquadrantrangerootsextantsurfacetoothupdated_atstring (date-time)requiredTimestamp when this condition type was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/condition-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"abbreviated_description": "string",
"affects_tooth_status": false,
"category": "finding",
"code": "string",
"default_color": "string",
"name": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/condition-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"abbreviated_description": "string",
"affects_tooth_status": false,
"category": "finding",
"code": "string",
"default_color": "string",
"name": "string"
}'/api/v1/{org_id}/odontogram/condition-types/{condition_type_uuid}/archiveArchive condition type
Soft-delete a condition type. Raises 404 if not found.
Parameters
Path Parameters
condition_type_uuidstringrequiredorg_idstringrequiredResponses
abbreviated_descriptionstringaffects_tooth_statusbooleanrequiredWhether recording this condition changes the tooth's clinical status (e.g., marking a tooth as missing).
categoryenumrequiredClinical category. One of: tooth_status, pathology, structural, soft_tissue, monitoring, finding.
findingmonitoringpathologysoft_tissuestructuraltooth_statuscodestringrequiredUnique machine-readable identifier for this condition type (e.g., 'caries', 'missing'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this condition type was created.
default_colorstringdisplay_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
icd10_codestringicd10_descriptionstringiconstringidstring (uuid)requiredUnique identifier (UUID) of this condition type.
is_activebooleanrequiredWhether this condition type is active and available for use.
is_chartablebooleanrequiredTrue if painted on the odontogram (paintable tier); false for coded findings/diagnoses not visually charted.
is_systembooleanrequiredWhether this is a built-in system condition type (true) or user-created (false).
is_watchablebooleanrequiredWhether this condition can be placed on a watch list for monitoring.
namestringrequiredHuman-readable display name (e.g., 'Caries', 'Missing Tooth').
paint_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
snomed_codestringsurface_restrictionobjecttreatment_areaenumrequiredAnatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth, root, range. Default 'tooth'.
archmouthquadrantrangerootsextantsurfacetoothupdated_atstring (date-time)requiredTimestamp when this condition type was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/condition-types/{condition_type_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/condition-types/{condition_type_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/condition-types/{condition_type_uuid}Update condition type
Partially update a condition type. Only provided fields are modified; the `code` field is immutable. Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
condition_type_uuidstringrequiredorg_idstringrequiredRequest Body
abbreviated_descriptionstringaffects_tooth_statusbooleanbase_versionintegerrequiredCurrent version of the entity. Required for optimistic concurrency — the update is rejected if this doesn't match the server's version.
categoryenumfindingmonitoringpathologysoft_tissuestructuraltooth_statusdefault_colorstringdisplay_orderintegericd10_codestringicd10_descriptionstringiconstringis_activebooleanis_chartablebooleanis_watchablebooleannamestringpaint_type_uuidstring (uuid)snomed_codestringsurface_restrictionobjecttreatment_areaenumarchmouthquadrantrangerootsextantsurfacetoothResponses
abbreviated_descriptionstringaffects_tooth_statusbooleanrequiredWhether recording this condition changes the tooth's clinical status (e.g., marking a tooth as missing).
categoryenumrequiredClinical category. One of: tooth_status, pathology, structural, soft_tissue, monitoring, finding.
findingmonitoringpathologysoft_tissuestructuraltooth_statuscodestringrequiredUnique machine-readable identifier for this condition type (e.g., 'caries', 'missing'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this condition type was created.
default_colorstringdisplay_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
icd10_codestringicd10_descriptionstringiconstringidstring (uuid)requiredUnique identifier (UUID) of this condition type.
is_activebooleanrequiredWhether this condition type is active and available for use.
is_chartablebooleanrequiredTrue if painted on the odontogram (paintable tier); false for coded findings/diagnoses not visually charted.
is_systembooleanrequiredWhether this is a built-in system condition type (true) or user-created (false).
is_watchablebooleanrequiredWhether this condition can be placed on a watch list for monitoring.
namestringrequiredHuman-readable display name (e.g., 'Caries', 'Missing Tooth').
paint_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
snomed_codestringsurface_restrictionobjecttreatment_areaenumrequiredAnatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth, root, range. Default 'tooth'.
archmouthquadrantrangerootsextantsurfacetoothupdated_atstring (date-time)requiredTimestamp when this condition type was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/condition-types/{condition_type_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"abbreviated_description": "string",
"affects_tooth_status": null,
"base_version": 1,
"category": "string",
"default_color": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/condition-types/{condition_type_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"abbreviated_description": "string",
"affects_tooth_status": null,
"base_version": 1,
"category": "string",
"default_color": "string"
}'Dentition
6 endpoints
/api/v1/{org_id}/odontogram/dentition-configsList dentition configs
List dentition configurations with optional filtering by dentition type and active status. Results are paginated and sorted by display_order.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page
Default: 50
dentition_typestringFilter by dentition type (permanent, primary, mixed)
is_activebooleanFilter by active status
Responses
itemsobject[]requiredList of dentition configuration records.
totalintegerrequiredTotal number of dentition configurations matching the query.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/dentition-configs" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/dentition-configs" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/dentition-configs/{config_uuid}Get dentition config
Retrieve a single dentition configuration by UUID, including its resolved slot indices. Raises 404 if not found.
Parameters
Path Parameters
config_uuidstringrequiredorg_idstringrequiredResponses
created_atstring (date-time)requiredTimestamp when this dentition configuration was created.
dentition_typestringrequiredDentition stage. One of: permanent, primary, mixed.
descriptionstringdisplay_orderintegerrequiredSort order for display. Lower values appear first.
end_ageintegeridstring (uuid)requiredUnique identifier (UUID) of this dentition configuration.
is_activebooleanrequiredWhether this configuration is currently active.
is_defaultbooleanrequiredWhether this is the default configuration for its dentition type.
namestringrequiredDisplay name for this dentition configuration (e.g., 'Adult Permanent', 'Child Primary', 'Mixed 6-12 years').
slot_indicesinteger[]requiredSorted list of tooth slot indices included in this dentition configuration.
start_ageintegerupdated_atstring (date-time)requiredTimestamp when this dentition configuration was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/dentition-configs/{config_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/dentition-configs/{config_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/dentition-configs/resolveResolve dentition config for patient
Resolve the dentition configuration appropriate for a patient's age. Computes age from the patient's date of birth and the service date (defaults to today). Returns the most specific age-range config, falling back to the org default. Raises 404 if no dentition configuration is available.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
dobstringrequiredPatient date of birth (ISO format YYYY-MM-DD).
service_datestringDate of service (ISO format YYYY-MM-DD). Defaults to today if not provided.
Responses
created_atstring (date-time)requiredTimestamp when this dentition configuration was created.
dentition_typestringrequiredDentition stage. One of: permanent, primary, mixed.
descriptionstringdisplay_orderintegerrequiredSort order for display. Lower values appear first.
end_ageintegeridstring (uuid)requiredUnique identifier (UUID) of this dentition configuration.
is_activebooleanrequiredWhether this configuration is currently active.
is_defaultbooleanrequiredWhether this is the default configuration for its dentition type.
namestringrequiredDisplay name for this dentition configuration (e.g., 'Adult Permanent', 'Child Primary', 'Mixed 6-12 years').
slot_indicesinteger[]requiredSorted list of tooth slot indices included in this dentition configuration.
start_ageintegerupdated_atstring (date-time)requiredTimestamp when this dentition configuration was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/dentition-configs/resolve" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/dentition-configs/resolve" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/dentition-configsCreate dentition config
Create a new dentition configuration defining which tooth slots are visible for a given dentition stage and patient age range. Optionally associates tooth slot indices at creation time.
Parameters
Path Parameters
org_idstringrequiredRequest Body
dentition_typestringrequiredDentition stage. One of: permanent, primary, mixed.
descriptionstringdisplay_orderintegerSort order for display. Lower values appear first.
end_ageintegeris_activebooleanWhether this configuration is currently active.
is_defaultbooleanWhether this is the default configuration for its dentition type.
namestringrequiredDisplay name for this dentition configuration (e.g., 'Adult Permanent', 'Child Primary', 'Mixed 6-12 years').
slot_indicesinteger[]start_ageintegerResponses
created_atstring (date-time)requiredTimestamp when this dentition configuration was created.
dentition_typestringrequiredDentition stage. One of: permanent, primary, mixed.
descriptionstringdisplay_orderintegerrequiredSort order for display. Lower values appear first.
end_ageintegeridstring (uuid)requiredUnique identifier (UUID) of this dentition configuration.
is_activebooleanrequiredWhether this configuration is currently active.
is_defaultbooleanrequiredWhether this is the default configuration for its dentition type.
namestringrequiredDisplay name for this dentition configuration (e.g., 'Adult Permanent', 'Child Primary', 'Mixed 6-12 years').
slot_indicesinteger[]requiredSorted list of tooth slot indices included in this dentition configuration.
start_ageintegerupdated_atstring (date-time)requiredTimestamp when this dentition configuration was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/dentition-configs" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"dentition_type": "string",
"description": "string",
"display_order": 0,
"end_age": 1,
"is_active": true,
"name": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/dentition-configs" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"dentition_type": "string",
"description": "string",
"display_order": 0,
"end_age": 1,
"is_active": true,
"name": "string"
}'/api/v1/{org_id}/odontogram/dentition-configs/{config_uuid}/archiveArchive dentition config
Soft-delete a dentition configuration. Raises 404 if not found.
Parameters
Path Parameters
config_uuidstringrequiredorg_idstringrequiredResponses
created_atstring (date-time)requiredTimestamp when this dentition configuration was created.
dentition_typestringrequiredDentition stage. One of: permanent, primary, mixed.
descriptionstringdisplay_orderintegerrequiredSort order for display. Lower values appear first.
end_ageintegeridstring (uuid)requiredUnique identifier (UUID) of this dentition configuration.
is_activebooleanrequiredWhether this configuration is currently active.
is_defaultbooleanrequiredWhether this is the default configuration for its dentition type.
namestringrequiredDisplay name for this dentition configuration (e.g., 'Adult Permanent', 'Child Primary', 'Mixed 6-12 years').
slot_indicesinteger[]requiredSorted list of tooth slot indices included in this dentition configuration.
start_ageintegerupdated_atstring (date-time)requiredTimestamp when this dentition configuration was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/dentition-configs/{config_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/dentition-configs/{config_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/dentition-configs/{config_uuid}Update dentition config
Partially update a dentition configuration. Slot indices can be updated to change which teeth are included. Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
config_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version of the entity. Required for optimistic concurrency — rejected if stale.
dentition_typestringdescriptionstringdisplay_orderintegerend_ageintegeris_activebooleanis_defaultbooleannamestringslot_indicesinteger[]start_ageintegerResponses
created_atstring (date-time)requiredTimestamp when this dentition configuration was created.
dentition_typestringrequiredDentition stage. One of: permanent, primary, mixed.
descriptionstringdisplay_orderintegerrequiredSort order for display. Lower values appear first.
end_ageintegeridstring (uuid)requiredUnique identifier (UUID) of this dentition configuration.
is_activebooleanrequiredWhether this configuration is currently active.
is_defaultbooleanrequiredWhether this is the default configuration for its dentition type.
namestringrequiredDisplay name for this dentition configuration (e.g., 'Adult Permanent', 'Child Primary', 'Mixed 6-12 years').
slot_indicesinteger[]requiredSorted list of tooth slot indices included in this dentition configuration.
start_ageintegerupdated_atstring (date-time)requiredTimestamp when this dentition configuration was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/dentition-configs/{config_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"dentition_type": "string",
"description": "string",
"display_order": 1,
"end_age": 1
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/dentition-configs/{config_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"dentition_type": "string",
"description": "string",
"display_order": 1,
"end_age": 1
}'Grid Layouts
5 endpoints
/api/v1/{org_id}/odontogram/grid-layoutsList grid layouts
List grid layouts with optional filtering by profile and search. Results are paginated.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page
Default: 50
profile_uuidstringFilter by chart profile UUID
searchstringSearch by layout name (case-insensitive substring match)
Responses
itemsobject[]requiredList of grid layout records.
totalintegerrequiredTotal number of grid layouts matching the query.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/grid-layouts" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/grid-layouts" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/grid-layouts/{grid_layout_uuid}Get grid layout
Retrieve a single grid layout by UUID. Raises 404 if not found.
Parameters
Path Parameters
grid_layout_uuidstringrequiredorg_idstringrequiredResponses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when this grid layout was created.
idstring (uuid)requiredUnique identifier (UUID) of this grid layout.
is_defaultbooleanrequiredWhether this is the default grid layout for its chart profile.
layout_namestringrequiredDisplay name for this layout (e.g., 'Standard Adult', 'Orthodontic View').
layout_variantstringrequiredVisual layout preset. One of: 'standard', 'mixed_dentition', 'ortho', 'implant_planning'.
max_slotsintegerrequiredMaximum number of visible tooth slots in this layout.
mixed_row_strategystringrequiredHow primary teeth are displayed alongside permanent teeth. One of: 'separate_rows', 'interleave'.
slot_configobjectrequiredJSON object defining slot arrangement, row assignments, and positioning rules for the tooth grid.
supports_supernumerarybooleanrequiredWhether this layout can display supernumerary tooth positions.
updated_atstring (date-time)requiredTimestamp when this grid layout was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/grid-layouts/{grid_layout_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/grid-layouts/{grid_layout_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/grid-layoutsCreate grid layout
Create a new tooth grid layout for a chart profile. Defines how tooth slots are visually arranged in the odontogram. Raises 404 if the referenced chart_profile_uuid does not exist.
Parameters
Path Parameters
org_idstringrequiredRequest Body
chart_profile_uuidstring (uuid)requiredUUID of the chart profile this grid layout belongs to.
is_defaultbooleanWhether this is the default grid layout for its chart profile.
layout_namestringrequiredDisplay name for this layout (e.g., 'Standard Adult', 'Orthodontic View').
layout_variantenumVisual layout preset. One of: 'standard' (standard dental chart), 'mixed_dentition' (optimized for mixed teeth), 'ortho' (orthodontic view), 'implant_planning' (implant site visualization).
implant_planningmixed_dentitionorthostandardmax_slotsintegerMaximum number of visible tooth slots in this layout. Default 32.
mixed_row_strategyenumHow primary teeth are displayed alongside permanent teeth. One of: 'separate_rows' (primary teeth in their own row below permanent), 'interleave' (primary teeth nested within the permanent row).
interleaveseparate_rowsslot_configobjectrequiredJSON object defining slot arrangement, row assignments, and positioning rules for the tooth grid.
supports_supernumerarybooleanWhether this layout can display supernumerary tooth positions.
Responses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when this grid layout was created.
idstring (uuid)requiredUnique identifier (UUID) of this grid layout.
is_defaultbooleanrequiredWhether this is the default grid layout for its chart profile.
layout_namestringrequiredDisplay name for this layout (e.g., 'Standard Adult', 'Orthodontic View').
layout_variantstringrequiredVisual layout preset. One of: 'standard', 'mixed_dentition', 'ortho', 'implant_planning'.
max_slotsintegerrequiredMaximum number of visible tooth slots in this layout.
mixed_row_strategystringrequiredHow primary teeth are displayed alongside permanent teeth. One of: 'separate_rows', 'interleave'.
slot_configobjectrequiredJSON object defining slot arrangement, row assignments, and positioning rules for the tooth grid.
supports_supernumerarybooleanrequiredWhether this layout can display supernumerary tooth positions.
updated_atstring (date-time)requiredTimestamp when this grid layout was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/grid-layouts" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chart_profile_uuid": "00000000-0000-0000-0000-000000000000",
"is_default": true,
"layout_name": "string",
"layout_variant": "implant_planning",
"max_slots": 32,
"slot_config": {}
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/grid-layouts" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chart_profile_uuid": "00000000-0000-0000-0000-000000000000",
"is_default": true,
"layout_name": "string",
"layout_variant": "implant_planning",
"max_slots": 32,
"slot_config": {}
}'/api/v1/{org_id}/odontogram/grid-layouts/{grid_layout_uuid}/archiveArchive grid layout
Soft-delete a grid layout. Raises 404 if not found.
Parameters
Path Parameters
grid_layout_uuidstringrequiredorg_idstringrequiredResponses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when this grid layout was created.
idstring (uuid)requiredUnique identifier (UUID) of this grid layout.
is_defaultbooleanrequiredWhether this is the default grid layout for its chart profile.
layout_namestringrequiredDisplay name for this layout (e.g., 'Standard Adult', 'Orthodontic View').
layout_variantstringrequiredVisual layout preset. One of: 'standard', 'mixed_dentition', 'ortho', 'implant_planning'.
max_slotsintegerrequiredMaximum number of visible tooth slots in this layout.
mixed_row_strategystringrequiredHow primary teeth are displayed alongside permanent teeth. One of: 'separate_rows', 'interleave'.
slot_configobjectrequiredJSON object defining slot arrangement, row assignments, and positioning rules for the tooth grid.
supports_supernumerarybooleanrequiredWhether this layout can display supernumerary tooth positions.
updated_atstring (date-time)requiredTimestamp when this grid layout was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/grid-layouts/{grid_layout_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/grid-layouts/{grid_layout_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/grid-layouts/{grid_layout_uuid}Update grid layout
Partially update a grid layout. The chart_profile association is immutable. Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
grid_layout_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version of the entity. Required for optimistic concurrency — rejected if stale.
is_defaultbooleanlayout_namestringlayout_variantenumimplant_planningmixed_dentitionorthostandardmax_slotsintegermixed_row_strategyenuminterleaveseparate_rowsslot_configobjectsupports_supernumerarybooleanResponses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when this grid layout was created.
idstring (uuid)requiredUnique identifier (UUID) of this grid layout.
is_defaultbooleanrequiredWhether this is the default grid layout for its chart profile.
layout_namestringrequiredDisplay name for this layout (e.g., 'Standard Adult', 'Orthodontic View').
layout_variantstringrequiredVisual layout preset. One of: 'standard', 'mixed_dentition', 'ortho', 'implant_planning'.
max_slotsintegerrequiredMaximum number of visible tooth slots in this layout.
mixed_row_strategystringrequiredHow primary teeth are displayed alongside permanent teeth. One of: 'separate_rows', 'interleave'.
slot_configobjectrequiredJSON object defining slot arrangement, row assignments, and positioning rules for the tooth grid.
supports_supernumerarybooleanrequiredWhether this layout can display supernumerary tooth positions.
updated_atstring (date-time)requiredTimestamp when this grid layout was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/grid-layouts/{grid_layout_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"is_default": null,
"layout_name": "string",
"layout_variant": "string",
"max_slots": 1
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/grid-layouts/{grid_layout_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"is_default": null,
"layout_name": "string",
"layout_variant": "string",
"max_slots": 1
}'Hotkeys
6 endpoints
/api/v1/{org_id}/odontogram/hotkeysList hotkey mappings
List hotkey mappings with optional filtering by owner type and profile. Results are paginated.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page
Default: 50
owner_typestringFilter by owner type (system, profile, user)
profile_uuidstringFilter by chart profile UUID
Responses
itemsobject[]requiredList of hotkey mapping records.
totalintegerrequiredTotal number of hotkey mappings matching the query.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/hotkeys" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/hotkeys" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/hotkeys/{hotkey_uuid}Get hotkey mapping
Retrieve a single hotkey mapping by UUID. Raises 404 if not found.
Parameters
Path Parameters
hotkey_uuidstringrequiredorg_idstringrequiredResponses
actionstringrequiredAction identifier triggered by this hotkey (e.g., 'toggle_missing', 'select_surface_mode', 'apply_paint').
action_contextobjectchart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when this hotkey was created.
display_orderintegerrequiredSort order for display in shortcut reference lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this hotkey mapping.
is_activebooleanrequiredWhether this hotkey mapping is currently active.
key_combostringrequiredKeyboard shortcut string (e.g., 'Ctrl+M', 'Shift+1', 'Alt+S').
owner_typestringrequiredOwnership level of this hotkey. One of: system, profile, user. Higher-priority levels override lower ones.
owner_user_uuidstring (uuid)versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/hotkeys/{hotkey_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/hotkeys/{hotkey_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/hotkeys/resolveResolve effective hotkeys
Resolve effective hotkeys by merging system, profile, and user layers. The cascade is: system defaults < profile overrides < user overrides. Same key_combo at a higher (narrower) scope replaces the lower scope. Raises 404 if a referenced profile or user UUID does not exist.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
profile_uuidstringUUID of the chart profile. If provided, profile-level hotkeys override system defaults.
user_uuidstringUUID of the user. If provided, user-level hotkeys override profile and system defaults.
Responses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/hotkeys/resolve" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/hotkeys/resolve" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/hotkeysCreate hotkey mapping
Create a new keyboard shortcut mapping for the odontogram. Hotkeys support a three-layer cascade: system defaults < profile overrides < user overrides. Raises 409 if a hotkey with the same key_combo+owner_type+profile already exists.
Parameters
Path Parameters
org_idstringrequiredRequest Body
actionstringrequiredAction identifier triggered by this hotkey (e.g., 'toggle_missing', 'select_surface_mode', 'apply_paint').
action_contextobjectchart_profile_uuidstring (uuid)display_orderintegerSort order for display in shortcut reference lists. Lower values appear first.
is_activebooleanWhether this hotkey mapping is currently active.
key_combostringrequiredKeyboard shortcut string (e.g., 'Ctrl+M', 'Shift+1', 'Alt+S').
owner_typestringOwnership level of this hotkey. One of: system, profile, user. Higher-priority levels override lower ones. Default 'system'.
owner_user_uuidstring (uuid)Responses
actionstringrequiredAction identifier triggered by this hotkey (e.g., 'toggle_missing', 'select_surface_mode', 'apply_paint').
action_contextobjectchart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when this hotkey was created.
display_orderintegerrequiredSort order for display in shortcut reference lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this hotkey mapping.
is_activebooleanrequiredWhether this hotkey mapping is currently active.
key_combostringrequiredKeyboard shortcut string (e.g., 'Ctrl+M', 'Shift+1', 'Alt+S').
owner_typestringrequiredOwnership level of this hotkey. One of: system, profile, user. Higher-priority levels override lower ones.
owner_user_uuidstring (uuid)versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/hotkeys" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"action": "string",
"action_context": null,
"chart_profile_uuid": "string",
"display_order": 0,
"is_active": true,
"key_combo": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/hotkeys" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"action": "string",
"action_context": null,
"chart_profile_uuid": "string",
"display_order": 0,
"is_active": true,
"key_combo": "string"
}'/api/v1/{org_id}/odontogram/hotkeys/{hotkey_uuid}/archiveArchive hotkey mapping
Soft-delete a hotkey mapping. Raises 404 if not found.
Parameters
Path Parameters
hotkey_uuidstringrequiredorg_idstringrequiredResponses
actionstringrequiredAction identifier triggered by this hotkey (e.g., 'toggle_missing', 'select_surface_mode', 'apply_paint').
action_contextobjectchart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when this hotkey was created.
display_orderintegerrequiredSort order for display in shortcut reference lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this hotkey mapping.
is_activebooleanrequiredWhether this hotkey mapping is currently active.
key_combostringrequiredKeyboard shortcut string (e.g., 'Ctrl+M', 'Shift+1', 'Alt+S').
owner_typestringrequiredOwnership level of this hotkey. One of: system, profile, user. Higher-priority levels override lower ones.
owner_user_uuidstring (uuid)versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/hotkeys/{hotkey_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/hotkeys/{hotkey_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/hotkeys/{hotkey_uuid}Update hotkey mapping
Partially update a hotkey mapping. Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
hotkey_uuidstringrequiredorg_idstringrequiredRequest Body
actionstringaction_contextobjectbase_versionintegerrequiredCurrent version of the entity. Required for optimistic concurrency — rejected if stale.
display_orderintegeris_activebooleankey_combostringResponses
actionstringrequiredAction identifier triggered by this hotkey (e.g., 'toggle_missing', 'select_surface_mode', 'apply_paint').
action_contextobjectchart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when this hotkey was created.
display_orderintegerrequiredSort order for display in shortcut reference lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this hotkey mapping.
is_activebooleanrequiredWhether this hotkey mapping is currently active.
key_combostringrequiredKeyboard shortcut string (e.g., 'Ctrl+M', 'Shift+1', 'Alt+S').
owner_typestringrequiredOwnership level of this hotkey. One of: system, profile, user. Higher-priority levels override lower ones.
owner_user_uuidstring (uuid)versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/hotkeys/{hotkey_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"action": "string",
"action_context": null,
"base_version": 1,
"display_order": 1,
"is_active": null
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/hotkeys/{hotkey_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"action": "string",
"action_context": null,
"base_version": 1,
"display_order": 1,
"is_active": null
}'Interaction Modes
5 endpoints
/api/v1/{org_id}/odontogram/interaction-modesList interaction modes
List interaction modes with optional search. Results are paginated and sorted by display_order.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page (1-100)
Default: 50
searchstringSearch by name or code (case-insensitive substring match)
Responses
itemsobject[]requiredList of chart interaction mode records.
totalintegerrequiredTotal number of records matching the query.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/interaction-modes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/interaction-modes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/interaction-modes/{mode_uuid}Get interaction mode
Retrieve a single interaction mode by its UUID. Raises 404 if not found.
Parameters
Path Parameters
mode_uuidstringrequiredorg_idstringrequiredResponses
allowed_scopesstring[]requiredList of render scopes this mode can interact with. Values from: surface, crown, root, whole_tooth, symbol, span, arch_object, canal, arch_overlay, quadrant_overlay, sextant_overlay, gingival_margin, attachment_point, occlusal_detail.
codestringrequiredUnique machine-readable identifier (e.g., 'single_surface', 'bridge_mode'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this interaction mode was created.
cursor_iconstringdefault_toolstringrequiredCursor tool activated when this mode is selected. One of: paint, select, annotate, measure.
descriptionstringdisplay_orderintegerrequiredSort order for display in UI. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this interaction mode.
is_systembooleanrequiredWhether this is a built-in system mode (true) or user-created (false).
namestringrequiredHuman-readable display name (e.g., 'Single Surface', 'Bridge Mode').
selection_typestringrequiredHow the user selects anatomy in this mode. One of: single_tooth, multi_tooth, surface, span, region.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/interaction-modes/{mode_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/interaction-modes/{mode_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/interaction-modesCreate interaction mode
Create a new interaction mode defining how the user interacts with the odontogram. Raises 409 if a mode with the same `code` already exists.
Parameters
Path Parameters
org_idstringrequiredRequest Body
allowed_scopesstring[]requiredList of render scopes this mode can interact with. Values from: surface, crown, root, whole_tooth, symbol, span, arch_object, canal, arch_overlay, quadrant_overlay, sextant_overlay, gingival_margin, attachment_point, occlusal_detail.
codestringrequiredUnique machine-readable identifier (e.g., 'single_surface', 'bridge_mode'). Immutable after creation.
cursor_iconstringdefault_toolstringrequiredCursor tool activated when this mode is selected. One of: paint, select, annotate, measure.
descriptionstringdisplay_orderintegerSort order for display in UI. Lower values appear first.
is_systembooleanWhether this is a built-in system mode (true) or user-created (false).
namestringrequiredHuman-readable display name (e.g., 'Single Surface', 'Bridge Mode').
selection_typestringrequiredHow the user selects anatomy in this mode. One of: single_tooth, multi_tooth, surface, span, region.
Responses
allowed_scopesstring[]requiredList of render scopes this mode can interact with. Values from: surface, crown, root, whole_tooth, symbol, span, arch_object, canal, arch_overlay, quadrant_overlay, sextant_overlay, gingival_margin, attachment_point, occlusal_detail.
codestringrequiredUnique machine-readable identifier (e.g., 'single_surface', 'bridge_mode'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this interaction mode was created.
cursor_iconstringdefault_toolstringrequiredCursor tool activated when this mode is selected. One of: paint, select, annotate, measure.
descriptionstringdisplay_orderintegerrequiredSort order for display in UI. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this interaction mode.
is_systembooleanrequiredWhether this is a built-in system mode (true) or user-created (false).
namestringrequiredHuman-readable display name (e.g., 'Single Surface', 'Bridge Mode').
selection_typestringrequiredHow the user selects anatomy in this mode. One of: single_tooth, multi_tooth, surface, span, region.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/interaction-modes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"allowed_scopes": [],
"code": "string",
"cursor_icon": "string",
"default_tool": "string",
"description": "string",
"name": "string",
"selection_type": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/interaction-modes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"allowed_scopes": [],
"code": "string",
"cursor_icon": "string",
"default_tool": "string",
"description": "string",
"name": "string",
"selection_type": "string"
}'/api/v1/{org_id}/odontogram/interaction-modes/{mode_uuid}/archiveArchive interaction mode
Soft-delete an interaction mode. Raises 404 if not found.
Parameters
Path Parameters
mode_uuidstringrequiredorg_idstringrequiredResponses
allowed_scopesstring[]requiredList of render scopes this mode can interact with. Values from: surface, crown, root, whole_tooth, symbol, span, arch_object, canal, arch_overlay, quadrant_overlay, sextant_overlay, gingival_margin, attachment_point, occlusal_detail.
codestringrequiredUnique machine-readable identifier (e.g., 'single_surface', 'bridge_mode'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this interaction mode was created.
cursor_iconstringdefault_toolstringrequiredCursor tool activated when this mode is selected. One of: paint, select, annotate, measure.
descriptionstringdisplay_orderintegerrequiredSort order for display in UI. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this interaction mode.
is_systembooleanrequiredWhether this is a built-in system mode (true) or user-created (false).
namestringrequiredHuman-readable display name (e.g., 'Single Surface', 'Bridge Mode').
selection_typestringrequiredHow the user selects anatomy in this mode. One of: single_tooth, multi_tooth, surface, span, region.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/interaction-modes/{mode_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/interaction-modes/{mode_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/interaction-modes/{mode_uuid}Update interaction mode
Partially update an interaction mode. The `code` field is immutable. Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
mode_uuidstringrequiredorg_idstringrequiredRequest Body
allowed_scopesstring[]base_versionintegerrequiredCurrent version of the entity. Required for optimistic concurrency — rejected if stale.
cursor_iconstringdefault_toolstringdescriptionstringdisplay_orderintegernamestringselection_typestringResponses
allowed_scopesstring[]requiredList of render scopes this mode can interact with. Values from: surface, crown, root, whole_tooth, symbol, span, arch_object, canal, arch_overlay, quadrant_overlay, sextant_overlay, gingival_margin, attachment_point, occlusal_detail.
codestringrequiredUnique machine-readable identifier (e.g., 'single_surface', 'bridge_mode'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this interaction mode was created.
cursor_iconstringdefault_toolstringrequiredCursor tool activated when this mode is selected. One of: paint, select, annotate, measure.
descriptionstringdisplay_orderintegerrequiredSort order for display in UI. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this interaction mode.
is_systembooleanrequiredWhether this is a built-in system mode (true) or user-created (false).
namestringrequiredHuman-readable display name (e.g., 'Single Surface', 'Bridge Mode').
selection_typestringrequiredHow the user selects anatomy in this mode. One of: single_tooth, multi_tooth, surface, span, region.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/interaction-modes/{mode_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"allowed_scopes": null,
"base_version": 1,
"cursor_icon": "string",
"default_tool": "string",
"description": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/interaction-modes/{mode_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"allowed_scopes": null,
"base_version": 1,
"cursor_icon": "string",
"default_tool": "string",
"description": "string"
}'Macros
6 endpoints
/api/v1/{org_id}/odontogram/macrosList macros
List macros with optional filtering by owner type, chart profile, and active status. Results are paginated and include nested macro items with resolved references.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page
Default: 50
owner_typestringFilter by owner type (system, location, user)
chart_profile_uuidstringFilter by chart profile UUID
is_activebooleanFilter by active status
Responses
itemsobject[]requiredList of chart macros.
totalintegerrequiredTotal number of macros matching the query.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/macros" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/macros" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/macros/{macro_uuid}Get macro
Retrieve a single macro by UUID, including all nested items and resolved explosion code entries. Raises 404 if not found.
Parameters
Path Parameters
macro_uuidstringrequiredorg_idstringrequiredResponses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when the macro was created.
display_orderintegerrequiredSort order in the macro panel list.
idstring (uuid)requiredUnique identifier of the macro.
is_activebooleanrequiredWhether this macro is currently active and available.
is_defaultbooleanrequiredWhether this macro is shown by default in the quick-access panel.
itemsobject[]requiredOrdered list of macro items with resolved references.
namestringrequiredDisplay name of the macro (e.g., 'Common Restorations', 'Endo Quick Panel').
owner_location_uuidstring (uuid)owner_typestringrequiredOwnership level. One of: system (available to all), location (office-specific), user (personal).
owner_user_uuidstringupdated_atstring (date-time)requiredTimestamp when the macro was last updated.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/macros/{macro_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/macros/{macro_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/macrosCreate macro
Create a new macro panel with an ordered list of items. Each item can be a procedure code, condition, or explosion code -- optionally backed by auto-code resolution. Raises 404 if any referenced chart_profile_uuid, explosion_code_uuid, or auto_code_family_uuid does not exist.
Parameters
Path Parameters
org_idstringrequiredRequest Body
chart_profile_uuidstring (uuid)display_orderintegerSort order in the macro panel list.
is_activebooleanWhether this macro is currently active and available.
is_defaultbooleanWhether this macro is shown by default in the quick-access panel.
itemsobject[]namestringrequiredDisplay name of the macro (e.g., 'Common Restorations', 'Endo Quick Panel').
owner_location_uuidstring (uuid)owner_typestringrequiredOwnership level. One of: system (available to all), location (office-specific), user (personal).
owner_user_uuidstringResponses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when the macro was created.
display_orderintegerrequiredSort order in the macro panel list.
idstring (uuid)requiredUnique identifier of the macro.
is_activebooleanrequiredWhether this macro is currently active and available.
is_defaultbooleanrequiredWhether this macro is shown by default in the quick-access panel.
itemsobject[]requiredOrdered list of macro items with resolved references.
namestringrequiredDisplay name of the macro (e.g., 'Common Restorations', 'Endo Quick Panel').
owner_location_uuidstring (uuid)owner_typestringrequiredOwnership level. One of: system (available to all), location (office-specific), user (personal).
owner_user_uuidstringupdated_atstring (date-time)requiredTimestamp when the macro was last updated.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/macros" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chart_profile_uuid": "string",
"display_order": 0,
"is_active": true,
"is_default": false,
"items": null,
"name": "string",
"owner_type": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/macros" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chart_profile_uuid": "string",
"display_order": 0,
"is_active": true,
"is_default": false,
"items": null,
"name": "string",
"owner_type": "string"
}'/api/v1/{org_id}/odontogram/macros/{macro_uuid}/archiveArchive macro
Soft-delete a macro and all its items. Raises 404 if not found.
Parameters
Path Parameters
macro_uuidstringrequiredorg_idstringrequiredResponses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when the macro was created.
display_orderintegerrequiredSort order in the macro panel list.
idstring (uuid)requiredUnique identifier of the macro.
is_activebooleanrequiredWhether this macro is currently active and available.
is_defaultbooleanrequiredWhether this macro is shown by default in the quick-access panel.
itemsobject[]requiredOrdered list of macro items with resolved references.
namestringrequiredDisplay name of the macro (e.g., 'Common Restorations', 'Endo Quick Panel').
owner_location_uuidstring (uuid)owner_typestringrequiredOwnership level. One of: system (available to all), location (office-specific), user (personal).
owner_user_uuidstringupdated_atstring (date-time)requiredTimestamp when the macro was last updated.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/macros/{macro_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/macros/{macro_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/macros/{macro_uuid}/resolveResolve macro
Resolve a macro with clinical context. Static procedure/condition items pass through unchanged. Auto-code items have their procedure_code dynamically resolved based on the provided tooth, surface, and material context. Raises 404 if the macro does not exist.
Parameters
Path Parameters
macro_uuidstringrequiredorg_idstringrequiredRequest Body
ageintegerarchenumAuto-code arch condition values.
mandibularmaxillarydentitionenumAuto-code dentition condition values.
mixedpermanentprimarymaterial_familystringsurfacesstringtooth_numstringtooth_positionenumAuto-code tooth_position condition values — anatomical segment of the tooth. Values: - ``anterior`` — Tooth is in the anterior segment (incisors, canines, teeth 6-11 / A-J primary). - ``posterior`` — Tooth is in the posterior segment (premolars, molars, teeth 1-5 / 12-16 and primaries).
anteriorposteriortooth_typeenumAuto-code tooth_type condition values. Maps charting anatomy to the three CDT categories.
anteriormolarpremolarResponses
idstring (uuid)requiredUUID of the macro that was resolved.
namestringrequiredName of the macro that was resolved.
resolved_itemsobject[]requiredOrdered list of resolved items. Static items pass through as-is; auto-code items have their procedure_code resolved from clinical context.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/macros/{macro_uuid}/resolve" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"age": 1,
"arch": "string",
"dentition": "string",
"material_family": "string",
"surfaces": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/macros/{macro_uuid}/resolve" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"age": 1,
"arch": "string",
"dentition": "string",
"material_family": "string",
"surfaces": "string"
}'/api/v1/{org_id}/odontogram/macros/{macro_uuid}Update macro
Partially update a macro. If `items` is provided, the entire item list is replaced (delete-and-recreate semantics). Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
macro_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version of the macro for optimistic concurrency control.
display_orderintegeris_activebooleanis_defaultbooleanitemsobject[]namestringResponses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when the macro was created.
display_orderintegerrequiredSort order in the macro panel list.
idstring (uuid)requiredUnique identifier of the macro.
is_activebooleanrequiredWhether this macro is currently active and available.
is_defaultbooleanrequiredWhether this macro is shown by default in the quick-access panel.
itemsobject[]requiredOrdered list of macro items with resolved references.
namestringrequiredDisplay name of the macro (e.g., 'Common Restorations', 'Endo Quick Panel').
owner_location_uuidstring (uuid)owner_typestringrequiredOwnership level. One of: system (available to all), location (office-specific), user (personal).
owner_user_uuidstringupdated_atstring (date-time)requiredTimestamp when the macro was last updated.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/macros/{macro_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"display_order": 1,
"is_active": null,
"is_default": null,
"items": null
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/macros/{macro_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"display_order": 1,
"is_active": null,
"is_default": null,
"items": null
}'Materials
15 endpoints
/api/v1/{org_id}/odontogram/materials/material-categoriesList material categories
List material categories with optional filtering. Results are paginated and sorted by display_order.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page
Default: 50
is_activebooleanFilter by active status
searchstringSearch by name or code (case-insensitive substring match)
Responses
itemsobject[]requiredList of material category records.
totalintegerrequiredTotal number of records matching the query (before pagination).
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-categories" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-categories" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/materials/material-categories/{category_uuid}Get material category
Retrieve a single material category by UUID. Raises 404 if not found.
Parameters
Path Parameters
category_uuidstringrequiredorg_idstringrequiredResponses
codestringrequiredUnique identifier for this material category (e.g., 'metal', 'ceramic'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this material category was created.
descriptionstringdisplay_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this material category.
is_activebooleanrequiredWhether this material category is active and available for use.
is_systembooleanrequiredWhether this is a built-in system material category (true) or user-created (false).
namestringrequiredDisplay name (e.g., 'Metal Alloys', 'Ceramic').
updated_atstring (date-time)requiredTimestamp when this material category was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-categories/{category_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-categories/{category_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/materials/material-stylesList material style overrides
List material style overrides, optionally filtered by profile or material type. Results are paginated.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page
Default: 50
chart_profile_uuidstringFilter styles by chart profile UUID
material_type_uuidstringFilter styles by material type UUID
Responses
itemsobject[]requiredList of material style records.
totalintegerrequiredTotal number of records matching the query (before pagination).
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-styles" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-styles" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/materials/material-styles/{style_uuid}Get material style override
Retrieve a single material style override by UUID. Raises 404 if not found.
Parameters
Path Parameters
style_uuidstringrequiredorg_idstringrequiredResponses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
colorstringrequiredOverride hex color for this material in this profile.
created_atstring (date-time)requiredTimestamp when this material style was created.
idstring (uuid)requiredUnique identifier (UUID) of this material style override.
material_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
material_type_codestringopacitynumberrequiredOverride opacity from 0.0 to 1.0. Default 1.0.
patternstringrequiredOverride fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.
updated_atstring (date-time)requiredTimestamp when this material style was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-styles/{style_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-styles/{style_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/materials/material-typesList material types
List material types with optional filtering by category, active status, or search. Results are paginated and sorted by display_order.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page
Default: 50
category_uuidstringFilter material types by parent category UUID
is_activebooleanFilter by active status
searchstringSearch by name or code (case-insensitive substring match)
Responses
itemsobject[]requiredList of material type records.
totalintegerrequiredTotal number of records matching the query (before pagination).
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/materials/material-types/{type_uuid}Get material type
Retrieve a single material type by UUID. Raises 404 if not found.
Parameters
Path Parameters
type_uuidstringrequiredorg_idstringrequiredResponses
categoryobjectLightweight reference to a related entity — exposes UUID and optional name.
codestringrequiredUnique identifier for this material type (e.g., 'amalgam', 'composite_resin'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this material type was created.
default_colorstringrequiredDefault hex color for rendering this material (e.g., '#C0C0C0' for silver).
default_opacitynumberrequiredDefault opacity from 0.0 to 1.0. Default 1.0.
default_patternstringrequiredDefault fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical. Default 'solid'.
display_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this material type.
is_activebooleanrequiredWhether this material type is active and available for use.
is_systembooleanrequiredWhether this is a built-in system material type (true) or user-created (false).
material_familystringnamestringrequiredDisplay name (e.g., 'Amalgam', 'Composite Resin').
updated_atstring (date-time)requiredTimestamp when this material type was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-types/{type_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-types/{type_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/materials/material-categoriesCreate material category
Create a new material category (e.g., 'Metal Alloys', 'Ceramic'). Raises 409 if a category with the same `code` already exists.
Parameters
Path Parameters
org_idstringrequiredRequest Body
codestringrequiredUnique identifier for this material category (e.g., 'metal', 'ceramic'). Immutable after creation.
descriptionstringdisplay_orderintegerSort order for display in UI lists. Lower values appear first.
is_activebooleanWhether this material category is active and available for use.
is_systembooleanWhether this is a built-in system material category (true) or user-created (false).
namestringrequiredDisplay name (e.g., 'Metal Alloys', 'Ceramic').
Responses
codestringrequiredUnique identifier for this material category (e.g., 'metal', 'ceramic'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this material category was created.
descriptionstringdisplay_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this material category.
is_activebooleanrequiredWhether this material category is active and available for use.
is_systembooleanrequiredWhether this is a built-in system material category (true) or user-created (false).
namestringrequiredDisplay name (e.g., 'Metal Alloys', 'Ceramic').
updated_atstring (date-time)requiredTimestamp when this material category was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-categories" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"code": "string",
"description": "string",
"display_order": 0,
"is_active": true,
"is_system": true,
"name": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-categories" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"code": "string",
"description": "string",
"display_order": 0,
"is_active": true,
"is_system": true,
"name": "string"
}'/api/v1/{org_id}/odontogram/materials/material-categories/{category_uuid}/archiveArchive material category
Soft-delete a material category. Raises 404 if not found.
Parameters
Path Parameters
category_uuidstringrequiredorg_idstringrequiredResponses
codestringrequiredUnique identifier for this material category (e.g., 'metal', 'ceramic'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this material category was created.
descriptionstringdisplay_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this material category.
is_activebooleanrequiredWhether this material category is active and available for use.
is_systembooleanrequiredWhether this is a built-in system material category (true) or user-created (false).
namestringrequiredDisplay name (e.g., 'Metal Alloys', 'Ceramic').
updated_atstring (date-time)requiredTimestamp when this material category was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-categories/{category_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-categories/{category_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/materials/material-stylesCreate material style override
Create a per-profile visual style override for a material type. Raises 409 if this profile+material_type combination already has a style.
Parameters
Path Parameters
org_idstringrequiredRequest Body
chart_profile_uuidstring (uuid)requiredUUID of the chart profile this style override belongs to.
colorstringrequiredOverride hex color for this material in this profile.
material_type_uuidstring (uuid)requiredUUID of the material type this style overrides.
opacitynumberOverride opacity from 0.0 to 1.0. Default 1.0.
patternstringrequiredOverride fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.
Responses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
colorstringrequiredOverride hex color for this material in this profile.
created_atstring (date-time)requiredTimestamp when this material style was created.
idstring (uuid)requiredUnique identifier (UUID) of this material style override.
material_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
material_type_codestringopacitynumberrequiredOverride opacity from 0.0 to 1.0. Default 1.0.
patternstringrequiredOverride fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.
updated_atstring (date-time)requiredTimestamp when this material style was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-styles" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chart_profile_uuid": "00000000-0000-0000-0000-000000000000",
"color": "string",
"material_type_uuid": "00000000-0000-0000-0000-000000000000",
"opacity": 1,
"pattern": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-styles" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chart_profile_uuid": "00000000-0000-0000-0000-000000000000",
"color": "string",
"material_type_uuid": "00000000-0000-0000-0000-000000000000",
"opacity": 1,
"pattern": "string"
}'/api/v1/{org_id}/odontogram/materials/material-styles/{style_uuid}/archiveArchive material style override
Soft-delete a material style override. Raises 404 if not found.
Parameters
Path Parameters
style_uuidstringrequiredorg_idstringrequiredResponses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
colorstringrequiredOverride hex color for this material in this profile.
created_atstring (date-time)requiredTimestamp when this material style was created.
idstring (uuid)requiredUnique identifier (UUID) of this material style override.
material_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
material_type_codestringopacitynumberrequiredOverride opacity from 0.0 to 1.0. Default 1.0.
patternstringrequiredOverride fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.
updated_atstring (date-time)requiredTimestamp when this material style was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-styles/{style_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-styles/{style_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/materials/material-typesCreate material type
Create a new material type within a category (e.g., 'Amalgam' in 'Metal Alloys'). Raises 409 if a type with the same `code` already exists. Raises 404 if the referenced category_uuid does not exist.
Parameters
Path Parameters
org_idstringrequiredRequest Body
category_uuidstring (uuid)requiredUUID of the parent material category.
codestringrequiredUnique identifier for this material type (e.g., 'amalgam', 'composite_resin'). Immutable after creation.
default_colorstringrequiredDefault hex color for rendering this material (e.g., '#C0C0C0' for silver).
default_opacitynumberDefault opacity from 0.0 to 1.0. Default 1.0.
default_patternstringDefault fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical. Default 'solid'.
display_orderintegerSort order for display in UI lists. Lower values appear first.
is_activebooleanWhether this material type is active and available for use.
is_systembooleanWhether this is a built-in system material type (true) or user-created (false).
material_familystringnamestringrequiredDisplay name (e.g., 'Amalgam', 'Composite Resin').
Responses
categoryobjectLightweight reference to a related entity — exposes UUID and optional name.
codestringrequiredUnique identifier for this material type (e.g., 'amalgam', 'composite_resin'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this material type was created.
default_colorstringrequiredDefault hex color for rendering this material (e.g., '#C0C0C0' for silver).
default_opacitynumberrequiredDefault opacity from 0.0 to 1.0. Default 1.0.
default_patternstringrequiredDefault fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical. Default 'solid'.
display_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this material type.
is_activebooleanrequiredWhether this material type is active and available for use.
is_systembooleanrequiredWhether this is a built-in system material type (true) or user-created (false).
material_familystringnamestringrequiredDisplay name (e.g., 'Amalgam', 'Composite Resin').
updated_atstring (date-time)requiredTimestamp when this material type was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"category_uuid": "00000000-0000-0000-0000-000000000000",
"code": "string",
"default_color": "string",
"default_opacity": 1,
"default_pattern": "solid",
"name": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"category_uuid": "00000000-0000-0000-0000-000000000000",
"code": "string",
"default_color": "string",
"default_opacity": 1,
"default_pattern": "solid",
"name": "string"
}'/api/v1/{org_id}/odontogram/materials/material-types/{type_uuid}/archiveArchive material type
Soft-delete a material type. Raises 404 if not found.
Parameters
Path Parameters
type_uuidstringrequiredorg_idstringrequiredResponses
categoryobjectLightweight reference to a related entity — exposes UUID and optional name.
codestringrequiredUnique identifier for this material type (e.g., 'amalgam', 'composite_resin'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this material type was created.
default_colorstringrequiredDefault hex color for rendering this material (e.g., '#C0C0C0' for silver).
default_opacitynumberrequiredDefault opacity from 0.0 to 1.0. Default 1.0.
default_patternstringrequiredDefault fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical. Default 'solid'.
display_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this material type.
is_activebooleanrequiredWhether this material type is active and available for use.
is_systembooleanrequiredWhether this is a built-in system material type (true) or user-created (false).
material_familystringnamestringrequiredDisplay name (e.g., 'Amalgam', 'Composite Resin').
updated_atstring (date-time)requiredTimestamp when this material type was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-types/{type_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-types/{type_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/materials/material-categories/{category_uuid}Update material category
Partially update a material category. The `code` field is immutable. Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
category_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version of the entity. Required for optimistic concurrency — the update is rejected if this doesn't match the server's version.
descriptionstringdisplay_orderintegeris_activebooleannamestringResponses
codestringrequiredUnique identifier for this material category (e.g., 'metal', 'ceramic'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this material category was created.
descriptionstringdisplay_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this material category.
is_activebooleanrequiredWhether this material category is active and available for use.
is_systembooleanrequiredWhether this is a built-in system material category (true) or user-created (false).
namestringrequiredDisplay name (e.g., 'Metal Alloys', 'Ceramic').
updated_atstring (date-time)requiredTimestamp when this material category was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-categories/{category_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"description": "string",
"display_order": 1,
"is_active": null,
"name": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-categories/{category_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"description": "string",
"display_order": 1,
"is_active": null,
"name": "string"
}'/api/v1/{org_id}/odontogram/materials/material-styles/{style_uuid}Update material style override
Partially update a material style override. Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
style_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version of the entity. Required for optimistic concurrency — the update is rejected if this doesn't match the server's version.
colorstringopacitynumberpatternstringResponses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
colorstringrequiredOverride hex color for this material in this profile.
created_atstring (date-time)requiredTimestamp when this material style was created.
idstring (uuid)requiredUnique identifier (UUID) of this material style override.
material_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
material_type_codestringopacitynumberrequiredOverride opacity from 0.0 to 1.0. Default 1.0.
patternstringrequiredOverride fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.
updated_atstring (date-time)requiredTimestamp when this material style was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-styles/{style_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"color": "string",
"opacity": null,
"pattern": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-styles/{style_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"color": "string",
"opacity": null,
"pattern": "string"
}'/api/v1/{org_id}/odontogram/materials/material-types/{type_uuid}Update material type
Partially update a material type. The `code` field is immutable. Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
type_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version of the entity. Required for optimistic concurrency — the update is rejected if this doesn't match the server's version.
category_uuidstring (uuid)default_colorstringdefault_opacitynumberdefault_patternstringdisplay_orderintegeris_activebooleanmaterial_familystringnamestringResponses
categoryobjectLightweight reference to a related entity — exposes UUID and optional name.
codestringrequiredUnique identifier for this material type (e.g., 'amalgam', 'composite_resin'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this material type was created.
default_colorstringrequiredDefault hex color for rendering this material (e.g., '#C0C0C0' for silver).
default_opacitynumberrequiredDefault opacity from 0.0 to 1.0. Default 1.0.
default_patternstringrequiredDefault fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical. Default 'solid'.
display_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this material type.
is_activebooleanrequiredWhether this material type is active and available for use.
is_systembooleanrequiredWhether this is a built-in system material type (true) or user-created (false).
material_familystringnamestringrequiredDisplay name (e.g., 'Amalgam', 'Composite Resin').
updated_atstring (date-time)requiredTimestamp when this material type was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-types/{type_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"category_uuid": "string",
"default_color": "string",
"default_opacity": null,
"default_pattern": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/materials/material-types/{type_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"category_uuid": "string",
"default_color": "string",
"default_opacity": null,
"default_pattern": "string"
}'Paint Types
5 endpoints
/api/v1/{org_id}/odontogram/paint-typesList paint types
List paint types with optional filtering by category, active status, or search term. Results are paginated and sorted by display_order.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page (1-100)
Default: 50
categorystringFilter by clinical category (e.g., 'restoration', 'prosthetic')
is_activebooleanFilter by active status
searchstringSearch by name or code (case-insensitive substring match)
Responses
itemsobject[]requiredList of paint type records.
totalintegerrequiredTotal number of records matching the query (before pagination).
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/paint-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/paint-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/paint-types/{paint_type_uuid}Get paint type
Retrieve a single paint type by its UUID. Raises 404 if the paint type does not exist.
Parameters
Path Parameters
paint_type_uuidstringrequiredorg_idstringrequiredResponses
categoryenumrequiredClinical category. One of: restoration, prosthetic, endodontic, condition, surgical, periodontic, orthodontic, annotation.
annotationconditionendodonticorthodonticperiodonticprostheticrestorationsurgicalcodestringrequiredUnique machine-readable identifier for this paint type (e.g., 'amalgam_mo'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this paint type was created.
display_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this paint type.
is_activebooleanrequiredWhether this paint type is active and available for use.
is_systembooleanrequiredWhether this is a built-in system paint type (true) or user-created (false).
namestringrequiredHuman-readable display name (e.g., 'Amalgam – MO').
render_categoryobjectLightweight reference to a related entity — exposes UUID and optional name.
render_scopeenumrequiredWhere on the tooth this paint renders. One of: surface, crown, root, whole_tooth, symbol, span, arch_object, canal, arch_overlay, quadrant_overlay, sextant_overlay, gingival_margin, attachment_point, occlusal_detail.
arch_objectarch_overlayattachment_pointcanalcrowngingival_marginocclusal_detailquadrant_overlayrootsextant_overlayspansurfacesymbolwhole_toothrenderer_primitivestringrequiredName of the renderer primitive that draws this paint type.
renderer_primitive_refobjectLightweight reference to a related entity — exposes UUID and optional name.
replacement_groupstringshade_variantenumrequiredBase color shade. One of: dark, light, gold, neutral. Defaults to 'dark'.
darkgoldlightneutralupdated_atstring (date-time)requiredTimestamp when this paint type was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
z_layerintegerrequiredZ-index layer for rendering order. Higher values render on top. Default 0.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/paint-types/{paint_type_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/paint-types/{paint_type_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/paint-typesCreate paint type
Create a new chart paint type defining how a procedure or condition is visually rendered on the odontogram. Raises 409 if a paint type with the same `code` already exists.
Parameters
Path Parameters
org_idstringrequiredRequest Body
categoryenumrequiredClinical category. One of: restoration, prosthetic, endodontic, condition, surgical, periodontic, orthodontic, annotation.
annotationconditionendodonticorthodonticperiodonticprostheticrestorationsurgicalcodestringrequiredUnique machine-readable identifier for this paint type (e.g., 'amalgam_mo'). Immutable after creation.
display_orderintegerSort order for display in UI lists. Lower values appear first.
is_activebooleanWhether this paint type is active and available for use.
is_systembooleanWhether this is a built-in system paint type (true) or user-created (false).
namestringrequiredHuman-readable display name (e.g., 'Amalgam – MO').
render_category_uuidstring (uuid)render_scopeenumrequiredWhere on the tooth this paint renders. One of: surface, crown, root, whole_tooth, symbol, span, arch_object, canal, arch_overlay, quadrant_overlay, sextant_overlay, gingival_margin, attachment_point, occlusal_detail.
arch_objectarch_overlayattachment_pointcanalcrowngingival_marginocclusal_detailquadrant_overlayrootsextant_overlayspansurfacesymbolwhole_toothrenderer_primitivestringrequiredName of the renderer primitive that draws this paint type.
renderer_primitive_uuidstring (uuid)replacement_groupstringshade_variantenumBase color shade. One of: dark, light, gold, neutral. Defaults to 'dark'.
darkgoldlightneutralz_layerintegerZ-index layer for rendering order. Higher values render on top. Default 0.
Responses
categoryenumrequiredClinical category. One of: restoration, prosthetic, endodontic, condition, surgical, periodontic, orthodontic, annotation.
annotationconditionendodonticorthodonticperiodonticprostheticrestorationsurgicalcodestringrequiredUnique machine-readable identifier for this paint type (e.g., 'amalgam_mo'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this paint type was created.
display_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this paint type.
is_activebooleanrequiredWhether this paint type is active and available for use.
is_systembooleanrequiredWhether this is a built-in system paint type (true) or user-created (false).
namestringrequiredHuman-readable display name (e.g., 'Amalgam – MO').
render_categoryobjectLightweight reference to a related entity — exposes UUID and optional name.
render_scopeenumrequiredWhere on the tooth this paint renders. One of: surface, crown, root, whole_tooth, symbol, span, arch_object, canal, arch_overlay, quadrant_overlay, sextant_overlay, gingival_margin, attachment_point, occlusal_detail.
arch_objectarch_overlayattachment_pointcanalcrowngingival_marginocclusal_detailquadrant_overlayrootsextant_overlayspansurfacesymbolwhole_toothrenderer_primitivestringrequiredName of the renderer primitive that draws this paint type.
renderer_primitive_refobjectLightweight reference to a related entity — exposes UUID and optional name.
replacement_groupstringshade_variantenumrequiredBase color shade. One of: dark, light, gold, neutral. Defaults to 'dark'.
darkgoldlightneutralupdated_atstring (date-time)requiredTimestamp when this paint type was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
z_layerintegerrequiredZ-index layer for rendering order. Higher values render on top. Default 0.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/paint-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"category": "annotation",
"code": "string",
"display_order": 0,
"is_active": true,
"is_system": true,
"name": "string",
"render_scope": "arch_object",
"renderer_primitive": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/paint-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"category": "annotation",
"code": "string",
"display_order": 0,
"is_active": true,
"is_system": true,
"name": "string",
"render_scope": "arch_object",
"renderer_primitive": "string"
}'/api/v1/{org_id}/odontogram/paint-types/{paint_type_uuid}/archiveArchive paint type
Soft-delete a paint type by setting is_active=false and recording deleted_at. Raises 404 if the paint type does not exist.
Parameters
Path Parameters
paint_type_uuidstringrequiredorg_idstringrequiredResponses
categoryenumrequiredClinical category. One of: restoration, prosthetic, endodontic, condition, surgical, periodontic, orthodontic, annotation.
annotationconditionendodonticorthodonticperiodonticprostheticrestorationsurgicalcodestringrequiredUnique machine-readable identifier for this paint type (e.g., 'amalgam_mo'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this paint type was created.
display_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this paint type.
is_activebooleanrequiredWhether this paint type is active and available for use.
is_systembooleanrequiredWhether this is a built-in system paint type (true) or user-created (false).
namestringrequiredHuman-readable display name (e.g., 'Amalgam – MO').
render_categoryobjectLightweight reference to a related entity — exposes UUID and optional name.
render_scopeenumrequiredWhere on the tooth this paint renders. One of: surface, crown, root, whole_tooth, symbol, span, arch_object, canal, arch_overlay, quadrant_overlay, sextant_overlay, gingival_margin, attachment_point, occlusal_detail.
arch_objectarch_overlayattachment_pointcanalcrowngingival_marginocclusal_detailquadrant_overlayrootsextant_overlayspansurfacesymbolwhole_toothrenderer_primitivestringrequiredName of the renderer primitive that draws this paint type.
renderer_primitive_refobjectLightweight reference to a related entity — exposes UUID and optional name.
replacement_groupstringshade_variantenumrequiredBase color shade. One of: dark, light, gold, neutral. Defaults to 'dark'.
darkgoldlightneutralupdated_atstring (date-time)requiredTimestamp when this paint type was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
z_layerintegerrequiredZ-index layer for rendering order. Higher values render on top. Default 0.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/paint-types/{paint_type_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/paint-types/{paint_type_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/paint-types/{paint_type_uuid}Update paint type
Partially update a paint type. Only provided fields are modified; the `code` field is immutable. Raises 404 if the paint type does not exist. Raises 409 if `base_version` does not match the current version (optimistic concurrency conflict).
Parameters
Path Parameters
paint_type_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version of the entity. Required for optimistic concurrency — the update is rejected if this doesn't match the server's version.
categoryenumannotationconditionendodonticorthodonticperiodonticprostheticrestorationsurgicaldisplay_orderintegeris_activebooleanis_systembooleannamestringrender_category_uuidstring (uuid)render_scopeenumarch_objectarch_overlayattachment_pointcanalcrowngingival_marginocclusal_detailquadrant_overlayrootsextant_overlayspansurfacesymbolwhole_toothrenderer_primitivestringrenderer_primitive_uuidstring (uuid)replacement_groupstringshade_variantenumdarkgoldlightneutralz_layerintegerResponses
categoryenumrequiredClinical category. One of: restoration, prosthetic, endodontic, condition, surgical, periodontic, orthodontic, annotation.
annotationconditionendodonticorthodonticperiodonticprostheticrestorationsurgicalcodestringrequiredUnique machine-readable identifier for this paint type (e.g., 'amalgam_mo'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this paint type was created.
display_orderintegerrequiredSort order for display in UI lists. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this paint type.
is_activebooleanrequiredWhether this paint type is active and available for use.
is_systembooleanrequiredWhether this is a built-in system paint type (true) or user-created (false).
namestringrequiredHuman-readable display name (e.g., 'Amalgam – MO').
render_categoryobjectLightweight reference to a related entity — exposes UUID and optional name.
render_scopeenumrequiredWhere on the tooth this paint renders. One of: surface, crown, root, whole_tooth, symbol, span, arch_object, canal, arch_overlay, quadrant_overlay, sextant_overlay, gingival_margin, attachment_point, occlusal_detail.
arch_objectarch_overlayattachment_pointcanalcrowngingival_marginocclusal_detailquadrant_overlayrootsextant_overlayspansurfacesymbolwhole_toothrenderer_primitivestringrequiredName of the renderer primitive that draws this paint type.
renderer_primitive_refobjectLightweight reference to a related entity — exposes UUID and optional name.
replacement_groupstringshade_variantenumrequiredBase color shade. One of: dark, light, gold, neutral. Defaults to 'dark'.
darkgoldlightneutralupdated_atstring (date-time)requiredTimestamp when this paint type was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
z_layerintegerrequiredZ-index layer for rendering order. Higher values render on top. Default 0.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/paint-types/{paint_type_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"category": "string",
"display_order": 1,
"is_active": null,
"is_system": null
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/paint-types/{paint_type_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"category": "string",
"display_order": 1,
"is_active": null,
"is_system": null
}'Procedure Rules
5 endpoints
/api/v1/{org_id}/odontogram/procedure-rulesList procedure rules
List procedure rules with optional filtering and pagination. Supports server-side filtering by code prefix (CDT category), exact procedure code, treatment area, and free-text search. Results are ordered by procedure_code.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page
Default: 100
procedure_codestringFilter by CDT procedure code (exact match)
code_prefixstringFilter by code prefix (e.g., 'D0' for diagnostic, 'D2' for restorative)
searchstringSearch by procedure code (case-insensitive partial match)
treatment_areastringFilter by treatment area (surface, tooth, quadrant, sextant, arch, mouth)
Responses
itemsobject[]requiredList of procedure rules.
totalintegerrequiredTotal number of procedure rules matching the query.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/procedure-rules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/procedure-rules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/procedure-rules/{rule_uuid}Get procedure rule
Retrieve a single procedure rule by UUID. Raises 404 if not found.
Parameters
Path Parameters
rule_uuidstringrequiredorg_idstringrequiredResponses
allowed_slot_labelsstring[]archstringchart_actionstringcreated_atstring (date-time)requiredTimestamp when the rule was created.
idstring (uuid)requiredUnique identifier of the procedure rule.
material_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
material_type_codestringmax_surfacesintegermin_surfacesintegerpaint_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
procedure_codestringrequiredCDT procedure code this rule applies to (e.g., 'D2140', 'D6240', 'D7140').
slot_type_filterstringspan_rolestringspan_type_codestringtooth_typestringtreatment_areastringrequiredRequired anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth.
updated_atstring (date-time)requiredTimestamp when the rule was last updated.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/procedure-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}/odontogram/procedure-rules/{rule_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/procedure-rulesCreate procedure rule
Create a new procedure rule mapping a CDT procedure code to its charting behavior. Defines eligible tooth types, treatment area, visual rendering via paint types, and side-effects (e.g., marking teeth as missing). Raises 409 if a rule for the same procedure_code with overlapping criteria already exists.
Parameters
Path Parameters
org_idstringrequiredRequest Body
allowed_slot_labelsstring[]archstringchart_actionstringmaterial_type_uuidstring (uuid)max_surfacesintegermin_surfacesintegerpaint_type_uuidstring (uuid)procedure_codestringrequiredCDT procedure code this rule applies to (e.g., 'D2140', 'D6240', 'D7140').
slot_type_filterstringspan_rolestringspan_type_codestringtooth_typestringtreatment_areastringrequiredRequired anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth.
Responses
allowed_slot_labelsstring[]archstringchart_actionstringcreated_atstring (date-time)requiredTimestamp when the rule was created.
idstring (uuid)requiredUnique identifier of the procedure rule.
material_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
material_type_codestringmax_surfacesintegermin_surfacesintegerpaint_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
procedure_codestringrequiredCDT procedure code this rule applies to (e.g., 'D2140', 'D6240', 'D7140').
slot_type_filterstringspan_rolestringspan_type_codestringtooth_typestringtreatment_areastringrequiredRequired anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth.
updated_atstring (date-time)requiredTimestamp when the rule was last updated.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/procedure-rules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"allowed_slot_labels": null,
"arch": "string",
"chart_action": "string",
"material_type_uuid": "string",
"max_surfaces": 1,
"procedure_code": "string",
"treatment_area": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/procedure-rules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"allowed_slot_labels": null,
"arch": "string",
"chart_action": "string",
"material_type_uuid": "string",
"max_surfaces": 1,
"procedure_code": "string",
"treatment_area": "string"
}'/api/v1/{org_id}/odontogram/procedure-rules/{rule_uuid}/archiveArchive procedure rule
Soft-delete a procedure rule. Raises 404 if not found.
Parameters
Path Parameters
rule_uuidstringrequiredorg_idstringrequiredResponses
allowed_slot_labelsstring[]archstringchart_actionstringcreated_atstring (date-time)requiredTimestamp when the rule was created.
idstring (uuid)requiredUnique identifier of the procedure rule.
material_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
material_type_codestringmax_surfacesintegermin_surfacesintegerpaint_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
procedure_codestringrequiredCDT procedure code this rule applies to (e.g., 'D2140', 'D6240', 'D7140').
slot_type_filterstringspan_rolestringspan_type_codestringtooth_typestringtreatment_areastringrequiredRequired anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth.
updated_atstring (date-time)requiredTimestamp when the rule was last updated.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/procedure-rules/{rule_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/procedure-rules/{rule_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/procedure-rules/{rule_uuid}Update procedure rule
Partially update a procedure rule. Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
rule_uuidstringrequiredorg_idstringrequiredRequest Body
allowed_slot_labelsstring[]archstringbase_versionintegerrequiredCurrent version of the rule for optimistic concurrency control.
chart_actionstringmaterial_type_uuidstring (uuid)max_surfacesintegermin_surfacesintegerpaint_type_uuidstring (uuid)procedure_codestringslot_type_filterstringspan_rolestringspan_type_codestringtooth_typestringtreatment_areastringResponses
allowed_slot_labelsstring[]archstringchart_actionstringcreated_atstring (date-time)requiredTimestamp when the rule was created.
idstring (uuid)requiredUnique identifier of the procedure rule.
material_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
material_type_codestringmax_surfacesintegermin_surfacesintegerpaint_typeobjectLightweight reference to a related entity — exposes UUID and optional name.
procedure_codestringrequiredCDT procedure code this rule applies to (e.g., 'D2140', 'D6240', 'D7140').
slot_type_filterstringspan_rolestringspan_type_codestringtooth_typestringtreatment_areastringrequiredRequired anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth.
updated_atstring (date-time)requiredTimestamp when the rule was last updated.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/procedure-rules/{rule_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"allowed_slot_labels": null,
"arch": "string",
"base_version": 1,
"chart_action": "string",
"material_type_uuid": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/procedure-rules/{rule_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"allowed_slot_labels": null,
"arch": "string",
"base_version": 1,
"chart_action": "string",
"material_type_uuid": "string"
}'Profiles
9 endpoints
/api/v1/{org_id}/odontogram/profilesList chart profiles
List chart profiles with optional filtering by active status or search term. Results are paginated and sorted by display_order.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page
Default: 50
is_activebooleanFilter by active status
searchstringSearch by name or code (case-insensitive substring match)
Responses
itemsobject[]requiredList of chart profile records.
totalintegerrequiredTotal number of records matching the query.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/profiles/{profile_uuid}Get chart profile
Retrieve a single chart profile by UUID. Raises 404 if the profile does not exist.
Parameters
Path Parameters
profile_uuidstringrequiredorg_idstringrequiredResponses
codestringrequiredUnique machine-readable identifier (e.g., 'default', 'pediatric'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this chart profile was created.
default_chart_modestringrequiredDefault charting view. One of: complete, existing, plan.
default_dentitionstringrequiredDefault dentition stage. One of: permanent, primary, mixed.
default_numberingstringrequiredDefault tooth numbering convention. One of: universal, fdi, palmer.
descriptionstringdisplay_orderintegerrequiredSort order for display in UI. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this chart profile.
is_activebooleanrequiredWhether this profile is active and available for selection.
is_defaultbooleanrequiredWhether this is the org-wide default profile. Only one profile can be default.
is_systembooleanrequiredWhether this is a built-in system profile (true) or user-created (false).
namestringrequiredHuman-readable profile name (e.g., 'Default Profile', 'Pediatric Profile').
updated_atstring (date-time)requiredTimestamp when this chart profile was last updated.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/assignmentsList profile assignments
List all profile assignments for a given chart profile, optionally filtered by assignment type. Results include reverse-resolved UUIDs for the assigned location/provider/user.
Parameters
Path Parameters
profile_uuidstringrequiredorg_idstringrequiredQuery Parameters
assignment_typestringFilter by assignment type (location, provider, user)
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page
Default: 50
Responses
itemsobject[]requiredList of profile assignment records.
totalintegerrequiredTotal number of assignments matching the query.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/assignments" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/assignments" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/profiles/resolveResolve effective chart profile
Resolve the effective chart profile via cascade: user > provider > location > org default. Each provided UUID narrows the resolution. If a user-level assignment exists it wins, otherwise provider-level, then location-level, then the org default profile. Raises 404 if no profile can be resolved.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
user_uuidstringUUID of the user to check for user-level profile assignment.
provider_uuidstringUUID of the provider to check for provider-level profile assignment.
location_uuidstringUUID of the location to check for location-level profile assignment.
Responses
codestringrequiredUnique machine-readable identifier (e.g., 'default', 'pediatric'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this chart profile was created.
default_chart_modestringrequiredDefault charting view. One of: complete, existing, plan.
default_dentitionstringrequiredDefault dentition stage. One of: permanent, primary, mixed.
default_numberingstringrequiredDefault tooth numbering convention. One of: universal, fdi, palmer.
descriptionstringdisplay_orderintegerrequiredSort order for display in UI. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this chart profile.
is_activebooleanrequiredWhether this profile is active and available for selection.
is_defaultbooleanrequiredWhether this is the org-wide default profile. Only one profile can be default.
is_systembooleanrequiredWhether this is a built-in system profile (true) or user-created (false).
namestringrequiredHuman-readable profile name (e.g., 'Default Profile', 'Pediatric Profile').
updated_atstring (date-time)requiredTimestamp when this chart profile was last updated.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles/resolve" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles/resolve" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/profilesCreate chart profile
Create a new chart profile. A profile is a named configuration bundle controlling odontogram display, numbering system, dentition defaults, and interaction modes. Raises 409 if a profile with the same `code` already exists.
Parameters
Path Parameters
org_idstringrequiredRequest Body
codestringrequiredUnique machine-readable identifier (e.g., 'default', 'pediatric'). Immutable after creation.
default_chart_modestringDefault charting view. One of: complete, existing, plan.
default_dentitionstringDefault dentition stage. One of: permanent, primary, mixed.
default_numberingstringDefault tooth numbering convention. One of: universal, fdi, palmer.
descriptionstringdisplay_orderintegerSort order for display in UI. Lower values appear first.
is_activebooleanWhether this profile is active and available for selection.
is_defaultbooleanWhether this is the org-wide default profile. Only one profile can be default.
is_systembooleanWhether this is a built-in system profile (true) or user-created (false).
namestringrequiredHuman-readable profile name (e.g., 'Default Profile', 'Pediatric Profile').
Responses
codestringrequiredUnique machine-readable identifier (e.g., 'default', 'pediatric'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this chart profile was created.
default_chart_modestringrequiredDefault charting view. One of: complete, existing, plan.
default_dentitionstringrequiredDefault dentition stage. One of: permanent, primary, mixed.
default_numberingstringrequiredDefault tooth numbering convention. One of: universal, fdi, palmer.
descriptionstringdisplay_orderintegerrequiredSort order for display in UI. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this chart profile.
is_activebooleanrequiredWhether this profile is active and available for selection.
is_defaultbooleanrequiredWhether this is the org-wide default profile. Only one profile can be default.
is_systembooleanrequiredWhether this is a built-in system profile (true) or user-created (false).
namestringrequiredHuman-readable profile name (e.g., 'Default Profile', 'Pediatric Profile').
updated_atstring (date-time)requiredTimestamp when this chart profile was last updated.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/profiles" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"code": "string",
"default_chart_mode": "complete",
"default_dentition": "permanent",
"default_numbering": "universal",
"description": "string",
"name": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/profiles" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"code": "string",
"default_chart_mode": "complete",
"default_dentition": "permanent",
"default_numbering": "universal",
"description": "string",
"name": "string"
}'/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/archiveArchive chart profile
Soft-delete a chart profile. Raises 404 if not found. Cannot archive the default profile.
Parameters
Path Parameters
profile_uuidstringrequiredorg_idstringrequiredResponses
codestringrequiredUnique machine-readable identifier (e.g., 'default', 'pediatric'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this chart profile was created.
default_chart_modestringrequiredDefault charting view. One of: complete, existing, plan.
default_dentitionstringrequiredDefault dentition stage. One of: permanent, primary, mixed.
default_numberingstringrequiredDefault tooth numbering convention. One of: universal, fdi, palmer.
descriptionstringdisplay_orderintegerrequiredSort order for display in UI. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this chart profile.
is_activebooleanrequiredWhether this profile is active and available for selection.
is_defaultbooleanrequiredWhether this is the org-wide default profile. Only one profile can be default.
is_systembooleanrequiredWhether this is a built-in system profile (true) or user-created (false).
namestringrequiredHuman-readable profile name (e.g., 'Default Profile', 'Pediatric Profile').
updated_atstring (date-time)requiredTimestamp when this chart profile was last updated.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/assignmentsCreate profile assignment
Assign a chart profile to a location, provider, or user. The profile resolution cascade is: user > provider > location > org default. Exactly one of location_uuid, provider_uuid, or user_uuid must be provided, matching the assignment_type. Raises 404 if the profile or target entity does not exist. Raises 409 if an active assignment already exists for this target.
Parameters
Path Parameters
profile_uuidstringrequiredorg_idstringrequiredRequest Body
assignment_typestringrequiredTarget entity type. One of: location, provider, user. Exactly one of the corresponding UUID fields must be provided.
location_uuidstring (uuid)provider_uuidstring (uuid)user_uuidstring (uuid)Responses
assignment_typestringrequiredTarget entity type. One of: location, provider, user.
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when this assignment was created.
idstring (uuid)requiredUnique identifier (UUID) of this assignment.
is_activebooleanrequiredWhether this assignment is currently active.
location_uuidstring (uuid)provider_uuidstring (uuid)updated_atstring (date-time)requiredTimestamp when this assignment was last updated.
user_uuidstring (uuid)versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/assignments" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"assignment_type": "string",
"location_uuid": "string",
"provider_uuid": "string",
"user_uuid": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/assignments" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"assignment_type": "string",
"location_uuid": "string",
"provider_uuid": "string",
"user_uuid": "string"
}'/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/assignments/{assignment_uuid}/archiveArchive profile assignment
Soft-delete a profile assignment. Raises 404 if the profile or assignment does not exist.
Parameters
Path Parameters
profile_uuidstringrequiredassignment_uuidstringrequiredorg_idstringrequiredResponses
assignment_typestringrequiredTarget entity type. One of: location, provider, user.
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
created_atstring (date-time)requiredTimestamp when this assignment was created.
idstring (uuid)requiredUnique identifier (UUID) of this assignment.
is_activebooleanrequiredWhether this assignment is currently active.
location_uuidstring (uuid)provider_uuidstring (uuid)updated_atstring (date-time)requiredTimestamp when this assignment was last updated.
user_uuidstring (uuid)versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/assignments/{assignment_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/assignments/{assignment_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/profiles/{profile_uuid}Update chart profile
Partially update a chart profile. Only provided fields are modified; the `code` field is immutable. Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
profile_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version of the entity. Required for optimistic concurrency — rejected if stale.
default_chart_modestringdefault_dentitionstringdefault_numberingstringdescriptionstringdisplay_orderintegeris_activebooleanis_defaultbooleanis_systembooleannamestringResponses
codestringrequiredUnique machine-readable identifier (e.g., 'default', 'pediatric'). Immutable after creation.
created_atstring (date-time)requiredTimestamp when this chart profile was created.
default_chart_modestringrequiredDefault charting view. One of: complete, existing, plan.
default_dentitionstringrequiredDefault dentition stage. One of: permanent, primary, mixed.
default_numberingstringrequiredDefault tooth numbering convention. One of: universal, fdi, palmer.
descriptionstringdisplay_orderintegerrequiredSort order for display in UI. Lower values appear first.
idstring (uuid)requiredUnique identifier (UUID) of this chart profile.
is_activebooleanrequiredWhether this profile is active and available for selection.
is_defaultbooleanrequiredWhether this is the org-wide default profile. Only one profile can be default.
is_systembooleanrequiredWhether this is a built-in system profile (true) or user-created (false).
namestringrequiredHuman-readable profile name (e.g., 'Default Profile', 'Pediatric Profile').
updated_atstring (date-time)requiredTimestamp when this chart profile was last updated.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"default_chart_mode": "string",
"default_dentition": "string",
"default_numbering": "string",
"description": "string"
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"default_chart_mode": "string",
"default_dentition": "string",
"default_numbering": "string",
"description": "string"
}'Profile Overrides
6 endpoints
/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/condition-typesList profile condition type overrides
List all condition type visibility and ordering overrides for a specific chart profile. Raises 404 if the profile does not exist.
Parameters
Path Parameters
profile_uuidstringrequiredorg_idstringrequiredResponses
itemsobject[]requiredList of condition type override records.
totalintegerrequiredTotal number of condition type overrides.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/condition-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/condition-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/interaction-modesList profile interaction mode associations
List all interaction mode associations for a specific chart profile, including which mode is the default. Raises 404 if the profile does not exist.
Parameters
Path Parameters
profile_uuidstringrequiredorg_idstringrequiredResponses
itemsobject[]requiredList of interaction mode association records.
totalintegerrequiredTotal number of interaction mode associations.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/interaction-modes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/interaction-modes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/paint-typesList profile paint type overrides
List all paint type visibility and ordering overrides for a specific chart profile. Raises 404 if the profile does not exist.
Parameters
Path Parameters
profile_uuidstringrequiredorg_idstringrequiredResponses
itemsobject[]requiredList of paint type override records for this profile.
totalintegerrequiredTotal number of paint type overrides for this profile.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/paint-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/paint-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/condition-typesSet profile condition type overrides
Replace all condition type overrides for a profile. Existing overrides not in the new list are removed (full replacement semantics). Raises 404 if the profile or any referenced condition type does not exist.
Parameters
Path Parameters
profile_uuidstringrequiredorg_idstringrequiredRequest Body
itemsobject[]requiredList of condition type visibility and ordering overrides.
Responses
itemsobject[]requiredList of condition type override records.
totalintegerrequiredTotal number of condition type overrides.
detailobject[]curl -X PUT "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/condition-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"items": []
}'curl -X PUT "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/condition-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"items": []
}'/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/interaction-modesSet profile interaction mode associations
Replace all interaction mode associations for a profile. Existing associations not in the new list are removed (full replacement semantics). Raises 404 if the profile or any referenced interaction mode does not exist.
Parameters
Path Parameters
profile_uuidstringrequiredorg_idstringrequiredRequest Body
itemsobject[]requiredList of interaction mode associations to set for the profile.
Responses
itemsobject[]requiredList of interaction mode association records.
totalintegerrequiredTotal number of interaction mode associations.
detailobject[]curl -X PUT "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/interaction-modes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"items": []
}'curl -X PUT "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/interaction-modes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"items": []
}'/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/paint-typesSet profile paint type overrides
Replace all paint type overrides for a profile. Existing overrides not in the new list are removed (full replacement semantics). Raises 404 if the profile or any referenced paint type does not exist.
Parameters
Path Parameters
profile_uuidstringrequiredorg_idstringrequiredRequest Body
itemsobject[]requiredList of paint type visibility and ordering overrides to apply to the profile.
Responses
itemsobject[]requiredList of paint type override records for this profile.
totalintegerrequiredTotal number of paint type overrides for this profile.
detailobject[]curl -X PUT "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/paint-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"items": []
}'curl -X PUT "https://api.example.com/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/paint-types" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"items": []
}'Reference Data
7 endpoints
/api/v1/{org_id}/odontogram/reference/anatomy-groupsList anatomy groups
List all tooth anatomy groups ordered by name. Groups cluster teeth that share similar surface anatomy (e.g., 'Maxillary Molars', 'Mandibular Anteriors'). This is read-only reference data seeded at org initialization. Returns the full unpaginated list; reference data sets are small and fixed.
Parameters
Path Parameters
org_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/reference/anatomy-groups" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/reference/anatomy-groups" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/reference/detailed-surfacesList detailed surfaces
List all detailed surface definitions ordered by anatomy group and display order. Surfaces define cusps, fossae, pits, ridges, and grooves for each anatomy group. This is read-only reference data seeded at org initialization. Returns the full unpaginated list; reference data sets are small and fixed.
Parameters
Path Parameters
org_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/reference/detailed-surfaces" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/reference/detailed-surfaces" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/reference/internal-anatomyList internal anatomy
List all tooth internal anatomy definitions ordered by anatomy group and display order. Includes root and canal definitions for each tooth type. This is read-only reference data seeded at org initialization. Returns the full unpaginated list; reference data sets are small and fixed.
Parameters
Path Parameters
org_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/reference/internal-anatomy" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/reference/internal-anatomy" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/reference/primary-tooth-referenceList primary tooth reference
List all 20 primary (deciduous) teeth in universal letter order (A-T). Includes tooth type, position, arch, quadrant, and available surfaces. This is read-only reference data. Returns the full unpaginated list; reference data sets are small and fixed.
Parameters
Path Parameters
org_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/reference/primary-tooth-reference" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/reference/primary-tooth-reference" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/reference/render-categoriesList render categories
List all render categories ordered by dominance rank. Categories control rendering priority, z-layer defaults, and replacement behavior when multiple paint types overlap. This is read-only reference data seeded at org initialization. Returns the full unpaginated list; reference data sets are small and fixed.
Parameters
Path Parameters
org_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/reference/render-categories" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/reference/render-categories" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/reference/renderer-primitivesList renderer primitives
List all available renderer primitives ordered by name. Renderer primitives are the building blocks that define how paint types are visually drawn on the odontogram. This is read-only reference data seeded at org initialization. Returns the full unpaginated list; reference data sets are small and fixed.
Parameters
Path Parameters
org_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/reference/renderer-primitives" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/reference/renderer-primitives" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/reference/tooth-referenceList permanent tooth reference
List all 32 permanent teeth in universal numbering order (1-32). Includes tooth type, position, arch, quadrant, and available surfaces. This is read-only reference data. Returns the full unpaginated list; reference data sets are small and fixed.
Parameters
Path Parameters
org_idstringrequiredResponses
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/reference/tooth-reference" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/reference/tooth-reference" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"Seed
2 endpoints
/api/v1/{org_id}/odontogram/reset-and-reseedReset and reseed configuration
Delete all existing odontogram configuration data and re-seed from JSON fixtures. This is a destructive operation that removes all customizations. Returns a stats object showing deleted and created counts.
Parameters
Path Parameters
org_idstringrequiredResponses
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/reset-and-reseed" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/reset-and-reseed" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/seed-defaultsSeed default configuration
Load default odontogram configuration from JSON fixture files. This is an idempotent operation -- existing records are skipped. Returns a stats object showing how many records were created for each entity type.
Parameters
Path Parameters
org_idstringrequiredResponses
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/seed-defaults" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/seed-defaults" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"Span Definitions
5 endpoints
/api/v1/{org_id}/odontogram/span-definitionsList span definitions
List span definitions with optional filtering by span type, active status, or search. Results are paginated.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page
Default: 50
span_typestringFilter by span type (bridge, splint, space_maintainer, arch_wire, rpd_framework, etc.)
is_activebooleanFilter by active status
searchstringSearch by name or code
Responses
itemsobject[]requiredList of span definitions.
totalintegerrequiredTotal number of span definitions matching the query.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/span-definitions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/span-definitions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/span-definitions/{span_definition_uuid}Get span definition
Retrieve a single span definition by UUID. Raises 404 if not found.
Parameters
Path Parameters
span_definition_uuidstringrequiredorg_idstringrequiredResponses
codestringrequiredUnique machine-readable identifier (e.g., 'fixed_bridge_3u', 'rpd_framework'). Immutable after creation.
connection_stylestringrequiredVisual connector between teeth. One of: bar, wire, plate, clasp_and_bar, continuous, rigid, bonded, removable.
contiguitystringrequiredWhether teeth must be adjacent. One of: contiguous, non_contiguous.
created_atstring (date-time)requiredTimestamp when the span definition was created.
geometry_rulesobjectidstring (uuid)requiredUnique identifier of the span definition.
is_activebooleanrequiredWhether this span definition is currently active and available.
is_systembooleanrequiredWhether this is a system-defined span definition.
max_teethintegermember_rolesobjectrequiredJSON defining valid roles for teeth within the span. Keys are role names (e.g., 'abutment', 'pontic'), values are objects with constraints (min_count, max_count, allowed_positions).
min_teethintegerrequiredMinimum number of teeth required in this span. Default 2.
namestringrequiredDisplay name (e.g., '3-Unit Fixed Bridge', 'RPD Metal Framework').
render_categoryobjectLightweight reference to a related entity — exposes UUID and optional name.
renderer_primitive_refobjectLightweight reference to a related entity — exposes UUID and optional name.
requires_same_archbooleanrequiredWhether all teeth in the span must be in the same arch. Default true.
span_typestringrequiredType of multi-tooth entity. One of: bridge, splint, space_maintainer, arch_wire, rpd_framework, full_arch_prosthesis, partial_denture, full_denture, overdenture, implant_prosthesis, retainer, occlusal_appliance.
updated_atstring (date-time)requiredTimestamp when the span definition was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/span-definitions/{span_definition_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/span-definitions/{span_definition_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/span-definitionsCreate span definition
Create a new span definition for multi-tooth prosthetics and appliances (bridges, dentures, splints, etc.). Raises 409 if a definition with the same `code` already exists.
Parameters
Path Parameters
org_idstringrequiredRequest Body
codestringrequiredUnique machine-readable identifier (e.g., 'fixed_bridge_3u', 'rpd_framework'). Immutable after creation.
connection_stylestringrequiredVisual connector between teeth. One of: bar, wire, plate, clasp_and_bar, continuous, rigid, bonded, removable.
contiguitystringWhether teeth must be adjacent. One of: contiguous, non_contiguous.
geometry_rulesobjectis_activebooleanWhether this span definition is currently active and available.
is_systembooleanWhether this is a system-defined span definition.
max_teethintegermember_rolesobjectrequiredJSON defining valid roles for teeth within the span. Keys are role names (e.g., 'abutment', 'pontic'), values are objects with constraints (min_count, max_count, allowed_positions).
min_teethintegerMinimum number of teeth required in this span. Default 2.
namestringrequiredDisplay name (e.g., '3-Unit Fixed Bridge', 'RPD Metal Framework').
render_category_uuidstring (uuid)renderer_primitive_uuidstring (uuid)requires_same_archbooleanWhether all teeth in the span must be in the same arch. Default true.
span_typestringrequiredType of multi-tooth entity. One of: bridge, splint, space_maintainer, arch_wire, rpd_framework, full_arch_prosthesis, partial_denture, full_denture, overdenture, implant_prosthesis, retainer, occlusal_appliance.
Responses
codestringrequiredUnique machine-readable identifier (e.g., 'fixed_bridge_3u', 'rpd_framework'). Immutable after creation.
connection_stylestringrequiredVisual connector between teeth. One of: bar, wire, plate, clasp_and_bar, continuous, rigid, bonded, removable.
contiguitystringrequiredWhether teeth must be adjacent. One of: contiguous, non_contiguous.
created_atstring (date-time)requiredTimestamp when the span definition was created.
geometry_rulesobjectidstring (uuid)requiredUnique identifier of the span definition.
is_activebooleanrequiredWhether this span definition is currently active and available.
is_systembooleanrequiredWhether this is a system-defined span definition.
max_teethintegermember_rolesobjectrequiredJSON defining valid roles for teeth within the span. Keys are role names (e.g., 'abutment', 'pontic'), values are objects with constraints (min_count, max_count, allowed_positions).
min_teethintegerrequiredMinimum number of teeth required in this span. Default 2.
namestringrequiredDisplay name (e.g., '3-Unit Fixed Bridge', 'RPD Metal Framework').
render_categoryobjectLightweight reference to a related entity — exposes UUID and optional name.
renderer_primitive_refobjectLightweight reference to a related entity — exposes UUID and optional name.
requires_same_archbooleanrequiredWhether all teeth in the span must be in the same arch. Default true.
span_typestringrequiredType of multi-tooth entity. One of: bridge, splint, space_maintainer, arch_wire, rpd_framework, full_arch_prosthesis, partial_denture, full_denture, overdenture, implant_prosthesis, retainer, occlusal_appliance.
updated_atstring (date-time)requiredTimestamp when the span definition was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/span-definitions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"code": "string",
"connection_style": "string",
"contiguity": "contiguous",
"geometry_rules": null,
"is_active": true,
"member_roles": {},
"name": "string",
"span_type": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/span-definitions" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"code": "string",
"connection_style": "string",
"contiguity": "contiguous",
"geometry_rules": null,
"is_active": true,
"member_roles": {},
"name": "string",
"span_type": "string"
}'/api/v1/{org_id}/odontogram/span-definitions/{span_definition_uuid}/archiveArchive span definition
Soft-delete a span definition. Raises 404 if not found.
Parameters
Path Parameters
span_definition_uuidstringrequiredorg_idstringrequiredResponses
codestringrequiredUnique machine-readable identifier (e.g., 'fixed_bridge_3u', 'rpd_framework'). Immutable after creation.
connection_stylestringrequiredVisual connector between teeth. One of: bar, wire, plate, clasp_and_bar, continuous, rigid, bonded, removable.
contiguitystringrequiredWhether teeth must be adjacent. One of: contiguous, non_contiguous.
created_atstring (date-time)requiredTimestamp when the span definition was created.
geometry_rulesobjectidstring (uuid)requiredUnique identifier of the span definition.
is_activebooleanrequiredWhether this span definition is currently active and available.
is_systembooleanrequiredWhether this is a system-defined span definition.
max_teethintegermember_rolesobjectrequiredJSON defining valid roles for teeth within the span. Keys are role names (e.g., 'abutment', 'pontic'), values are objects with constraints (min_count, max_count, allowed_positions).
min_teethintegerrequiredMinimum number of teeth required in this span. Default 2.
namestringrequiredDisplay name (e.g., '3-Unit Fixed Bridge', 'RPD Metal Framework').
render_categoryobjectLightweight reference to a related entity — exposes UUID and optional name.
renderer_primitive_refobjectLightweight reference to a related entity — exposes UUID and optional name.
requires_same_archbooleanrequiredWhether all teeth in the span must be in the same arch. Default true.
span_typestringrequiredType of multi-tooth entity. One of: bridge, splint, space_maintainer, arch_wire, rpd_framework, full_arch_prosthesis, partial_denture, full_denture, overdenture, implant_prosthesis, retainer, occlusal_appliance.
updated_atstring (date-time)requiredTimestamp when the span definition was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/span-definitions/{span_definition_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/span-definitions/{span_definition_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/span-definitions/{span_definition_uuid}Update span definition
Partially update a span definition. The `code` field is immutable. Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
span_definition_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version of the span definition for optimistic concurrency control.
connection_stylestringcontiguitystringgeometry_rulesobjectis_activebooleanis_systembooleanmax_teethintegermember_rolesobjectmin_teethintegernamestringrender_category_uuidstring (uuid)renderer_primitive_uuidstring (uuid)requires_same_archbooleanspan_typestringResponses
codestringrequiredUnique machine-readable identifier (e.g., 'fixed_bridge_3u', 'rpd_framework'). Immutable after creation.
connection_stylestringrequiredVisual connector between teeth. One of: bar, wire, plate, clasp_and_bar, continuous, rigid, bonded, removable.
contiguitystringrequiredWhether teeth must be adjacent. One of: contiguous, non_contiguous.
created_atstring (date-time)requiredTimestamp when the span definition was created.
geometry_rulesobjectidstring (uuid)requiredUnique identifier of the span definition.
is_activebooleanrequiredWhether this span definition is currently active and available.
is_systembooleanrequiredWhether this is a system-defined span definition.
max_teethintegermember_rolesobjectrequiredJSON defining valid roles for teeth within the span. Keys are role names (e.g., 'abutment', 'pontic'), values are objects with constraints (min_count, max_count, allowed_positions).
min_teethintegerrequiredMinimum number of teeth required in this span. Default 2.
namestringrequiredDisplay name (e.g., '3-Unit Fixed Bridge', 'RPD Metal Framework').
render_categoryobjectLightweight reference to a related entity — exposes UUID and optional name.
renderer_primitive_refobjectLightweight reference to a related entity — exposes UUID and optional name.
requires_same_archbooleanrequiredWhether all teeth in the span must be in the same arch. Default true.
span_typestringrequiredType of multi-tooth entity. One of: bridge, splint, space_maintainer, arch_wire, rpd_framework, full_arch_prosthesis, partial_denture, full_denture, overdenture, implant_prosthesis, retainer, occlusal_appliance.
updated_atstring (date-time)requiredTimestamp when the span definition was last modified.
versionintegerrequiredOptimistic concurrency version number.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/span-definitions/{span_definition_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"connection_style": "string",
"contiguity": "string",
"geometry_rules": null,
"is_active": null
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/span-definitions/{span_definition_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"connection_style": "string",
"contiguity": "string",
"geometry_rules": null,
"is_active": null
}'Status Colors
5 endpoints
/api/v1/{org_id}/odontogram/status-colorsList status colors
List status color mappings, optionally filtered by chart profile. Results are paginated.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page (1-100)
Default: 50
profile_uuidstringFilter by chart profile UUID. Null returns org-wide defaults.
Responses
itemsobject[]requiredList of status color records.
totalintegerrequiredTotal number of records matching the query (before pagination).
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/status-colors" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/status-colors" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/status-colors/{status_color_uuid}Get status color
Retrieve a single status color mapping by its UUID. Raises 404 if not found.
Parameters
Path Parameters
status_color_uuidstringrequiredorg_idstringrequiredResponses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
colorstringrequiredHex color code for rendering this status (e.g., '#0000FF' for blue).
created_atstring (date-time)requiredTimestamp when this status color was created.
idstring (uuid)requiredUnique identifier (UUID) of this status color mapping.
patternenumrequiredFill pattern for rendering. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.
brushedcrosshatcheddottedgranularhatchedmetallicoutlinesolidspeckledstippledtranslucentverticalwovenstatusstringrequiredThe procedure/condition status this color configuration applies to (e.g., 'existing', 'planned', 'completed').
transparencynumberupdated_atstring (date-time)requiredTimestamp when this status color was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/status-colors/{status_color_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/status-colors/{status_color_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/status-colorsCreate status color
Create a status-to-color mapping for odontogram rendering. Maps a procedure/condition status to a visual color and fill pattern. Raises 409 if a duplicate status+profile combination already exists.
Parameters
Path Parameters
org_idstringrequiredRequest Body
chart_profile_uuidstring (uuid)colorstringrequiredHex color code for rendering this status (e.g., '#0000FF' for blue).
patternenumFill pattern for rendering. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical. Default 'solid'.
brushedcrosshatcheddottedgranularhatchedmetallicoutlinesolidspeckledstippledtranslucentverticalwovenstatusstringrequiredThe procedure/condition status this color configuration applies to (e.g., 'existing', 'planned', 'completed').
transparencynumberResponses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
colorstringrequiredHex color code for rendering this status (e.g., '#0000FF' for blue).
created_atstring (date-time)requiredTimestamp when this status color was created.
idstring (uuid)requiredUnique identifier (UUID) of this status color mapping.
patternenumrequiredFill pattern for rendering. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.
brushedcrosshatcheddottedgranularhatchedmetallicoutlinesolidspeckledstippledtranslucentverticalwovenstatusstringrequiredThe procedure/condition status this color configuration applies to (e.g., 'existing', 'planned', 'completed').
transparencynumberupdated_atstring (date-time)requiredTimestamp when this status color was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/status-colors" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chart_profile_uuid": "string",
"color": "string",
"pattern": "brushed",
"status": "string",
"transparency": 1
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/status-colors" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chart_profile_uuid": "string",
"color": "string",
"pattern": "brushed",
"status": "string",
"transparency": 1
}'/api/v1/{org_id}/odontogram/status-colors/{status_color_uuid}/archiveArchive status color
Soft-delete a status color mapping. Raises 404 if not found.
Parameters
Path Parameters
status_color_uuidstringrequiredorg_idstringrequiredResponses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
colorstringrequiredHex color code for rendering this status (e.g., '#0000FF' for blue).
created_atstring (date-time)requiredTimestamp when this status color was created.
idstring (uuid)requiredUnique identifier (UUID) of this status color mapping.
patternenumrequiredFill pattern for rendering. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.
brushedcrosshatcheddottedgranularhatchedmetallicoutlinesolidspeckledstippledtranslucentverticalwovenstatusstringrequiredThe procedure/condition status this color configuration applies to (e.g., 'existing', 'planned', 'completed').
transparencynumberupdated_atstring (date-time)requiredTimestamp when this status color was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/status-colors/{status_color_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/status-colors/{status_color_uuid}/archive" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/status-colors/{status_color_uuid}Update status color
Partially update a status color mapping. Raises 404 if not found. Raises 409 on version conflict.
Parameters
Path Parameters
status_color_uuidstringrequiredorg_idstringrequiredRequest Body
base_versionintegerrequiredCurrent version of the entity. Required for optimistic concurrency — the update is rejected if this doesn't match the server's version.
colorstringpatternenumbrushedcrosshatcheddottedgranularhatchedmetallicoutlinesolidspeckledstippledtranslucentverticalwoventransparencynumberResponses
chart_profileobjectLightweight reference to a related entity — exposes UUID and optional name.
colorstringrequiredHex color code for rendering this status (e.g., '#0000FF' for blue).
created_atstring (date-time)requiredTimestamp when this status color was created.
idstring (uuid)requiredUnique identifier (UUID) of this status color mapping.
patternenumrequiredFill pattern for rendering. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.
brushedcrosshatcheddottedgranularhatchedmetallicoutlinesolidspeckledstippledtranslucentverticalwovenstatusstringrequiredThe procedure/condition status this color configuration applies to (e.g., 'existing', 'planned', 'completed').
transparencynumberupdated_atstring (date-time)requiredTimestamp when this status color was last modified.
versionintegerrequiredOptimistic concurrency version number. Must be sent as base_version on updates.
detailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/status-colors/{status_color_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"color": "string",
"pattern": "string",
"transparency": null
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/status-colors/{status_color_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"base_version": 1,
"color": "string",
"pattern": "string",
"transparency": null
}'Tooth Slots
4 endpoints
/api/v1/{org_id}/odontogram/tooth-slotsList tooth slots
List tooth slots with optional filtering by slot type, arch, and quadrant. Results are paginated and sorted by slot_index.
Parameters
Path Parameters
org_idstringrequiredQuery Parameters
pageintegerPage number (1-based)
Default: 1
page_sizeintegerNumber of records per page (1-200)
Default: 100
slot_typestringFilter by slot type (permanent, primary, supernumerary, implant_site)
archstringFilter by dental arch (maxillary, mandibular)
quadrantstringFilter by quadrant (e.g., upper_right, upper_left, lower_left, lower_right)
Responses
itemsobject[]requiredList of chart tooth slot records.
totalintegerrequiredTotal number of records matching the query.
detailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/tooth-slots" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/tooth-slots" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/tooth-slots/{slot_uuid}Get tooth slot
Retrieve a single tooth slot by its UUID. Raises 404 if not found.
Parameters
Path Parameters
slot_uuidstringrequiredorg_idstringrequiredResponses
archstringrequiredDental arch. One of: maxillary, mandibular.
created_atstring (date-time)requiredTimestamp when this tooth slot was created.
grid_columnintegerrequiredColumn position in the visual tooth grid.
grid_rowintegerrequiredRow position in the visual tooth grid.
idstring (uuid)requiredUnique identifier (UUID) of this tooth slot.
is_defaultbooleanrequiredWhether this slot is part of the standard default grid layout.
parent_slot_indexintegerprimary_reference_idstringquadrantstringrequiredDental quadrant. One of: upper_right, upper_left, lower_left, lower_right.
slot_indexintegerrequiredPositional index of this slot in the charting grid (0-based).
slot_labelstringrequiredDisplay label for this slot (e.g., '1', 'A', 'S1').
slot_typestringrequiredType of tooth slot. One of: permanent, primary, supernumerary, implant_site.
tooth_reference_idintegerdetailobject[]curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/tooth-slots/{slot_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/tooth-slots/{slot_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json"/api/v1/{org_id}/odontogram/tooth-slotsCreate tooth slot
Create a new tooth slot position in the charting grid. Raises 409 if a slot with the same slot_index already exists.
Parameters
Path Parameters
org_idstringrequiredRequest Body
archstringrequiredDental arch. One of: maxillary, mandibular.
grid_columnintegerrequiredColumn position in the visual tooth grid.
grid_rowintegerRow position in the visual tooth grid. Default 0.
is_defaultbooleanWhether this slot is part of the standard default grid layout.
parent_slot_indexintegerprimary_reference_idstringquadrantstringrequiredDental quadrant. One of: upper_right, upper_left, lower_left, lower_right.
slot_indexintegerrequiredPositional index of this slot in the charting grid (0-based).
slot_labelstringrequiredDisplay label for this slot (e.g., '1', 'A', 'S1').
slot_typestringrequiredType of tooth slot. One of: permanent, primary, supernumerary, implant_site.
tooth_reference_idintegerResponses
archstringrequiredDental arch. One of: maxillary, mandibular.
created_atstring (date-time)requiredTimestamp when this tooth slot was created.
grid_columnintegerrequiredColumn position in the visual tooth grid.
grid_rowintegerrequiredRow position in the visual tooth grid.
idstring (uuid)requiredUnique identifier (UUID) of this tooth slot.
is_defaultbooleanrequiredWhether this slot is part of the standard default grid layout.
parent_slot_indexintegerprimary_reference_idstringquadrantstringrequiredDental quadrant. One of: upper_right, upper_left, lower_left, lower_right.
slot_indexintegerrequiredPositional index of this slot in the charting grid (0-based).
slot_labelstringrequiredDisplay label for this slot (e.g., '1', 'A', 'S1').
slot_typestringrequiredType of tooth slot. One of: permanent, primary, supernumerary, implant_site.
tooth_reference_idintegerdetailobject[]curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/tooth-slots" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"arch": "string",
"grid_column": 1,
"grid_row": 0,
"is_default": true,
"parent_slot_index": 1,
"quadrant": "string",
"slot_index": 1,
"slot_label": "string",
"slot_type": "string"
}'curl -X POST "https://api.example.com/api/v1/{org_id}/odontogram/tooth-slots" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"arch": "string",
"grid_column": 1,
"grid_row": 0,
"is_default": true,
"parent_slot_index": 1,
"quadrant": "string",
"slot_index": 1,
"slot_label": "string",
"slot_type": "string"
}'/api/v1/{org_id}/odontogram/tooth-slots/{slot_uuid}Update tooth slot
Partially update a tooth slot. The slot_index is immutable. Raises 404 if not found.
Parameters
Path Parameters
slot_uuidstringrequiredorg_idstringrequiredRequest Body
archstringgrid_columnintegergrid_rowintegeris_defaultbooleanparent_slot_indexintegerquadrantstringslot_labelstringslot_typestringResponses
archstringrequiredDental arch. One of: maxillary, mandibular.
created_atstring (date-time)requiredTimestamp when this tooth slot was created.
grid_columnintegerrequiredColumn position in the visual tooth grid.
grid_rowintegerrequiredRow position in the visual tooth grid.
idstring (uuid)requiredUnique identifier (UUID) of this tooth slot.
is_defaultbooleanrequiredWhether this slot is part of the standard default grid layout.
parent_slot_indexintegerprimary_reference_idstringquadrantstringrequiredDental quadrant. One of: upper_right, upper_left, lower_left, lower_right.
slot_indexintegerrequiredPositional index of this slot in the charting grid (0-based).
slot_labelstringrequiredDisplay label for this slot (e.g., '1', 'A', 'S1').
slot_typestringrequiredType of tooth slot. One of: permanent, primary, supernumerary, implant_site.
tooth_reference_idintegerdetailobject[]curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/tooth-slots/{slot_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"arch": "string",
"grid_column": 1,
"grid_row": 1,
"is_default": null,
"parent_slot_index": 1
}'curl -X PATCH "https://api.example.com/api/v1/{org_id}/odontogram/tooth-slots/{slot_uuid}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"arch": "string",
"grid_column": 1,
"grid_row": 1,
"is_default": null,
"parent_slot_index": 1
}'