Dental PMS

Odontogram

107 endpoints

Auto-Codes

11 endpoints

get/api/v1/{org_id}/odontogram/auto-codes/auto-code-families

List auto-code families

List auto-code families with optional filtering by active status or search. Results are paginated.

Parameters

Path Parameters
org_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page

Default: 50

is_activeboolean

Filter by active status

searchstring

Search by family name or display name

Responses

200Successful Response
itemsobject[]required

List of auto-code family records.

totalintegerrequired

Total number of auto-code families matching the query.

422Validation Error
detailobject[]
curl
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"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
base_procedure_codestring
created_atstring (date-time)required

Timestamp when this auto-code family was created.

descriptionstring
display_namestringrequired

Human-readable display name (e.g., 'Amalgam by Surface Count').

family_namestringrequired

Unique machine-readable family identifier (e.g., 'amalgam_by_surface', 'composite_by_surface').

idstring (uuid)required

Unique identifier (UUID) of this auto-code family.

is_activebooleanrequired

Whether this family is active and available for auto-code resolution.

requires_material_familybooleanrequired

True if any active rule in this family requires material_family in the resolution context.

selection_typeenumrequired

Criterion type for selecting the correct code. One of: surface_count, tooth_type, arch, unit_count, material, age, combined.

agearchcombineddentitionmaterialsurface_counttooth_positiontooth_typeunit_count
updated_atstring (date-time)required

Timestamp when this auto-code family was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}/rules

List 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_uuidstringrequired
org_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page

Default: 50

Responses

200Successful Response
itemsobject[]required

List of auto-code rule records.

totalintegerrequired

Total number of auto-code rules matching the query.

422Validation Error
detailobject[]
curl
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"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
conditionsobjectrequired

JSON object defining the matching criteria. Structure depends on the family's selection_type.

created_atstring (date-time)required

Timestamp when this auto-code rule was created.

familyobject

Lightweight reference to a related entity — exposes UUID and optional name.

idstring (uuid)required

Unique identifier (UUID) of this auto-code rule.

is_activebooleanrequired

Whether this rule is active and eligible for matching.

priorityintegerrequired

Evaluation priority. Higher-priority rules are checked first.

procedure_codestringrequired

CDT procedure code selected when this rule's conditions match (e.g., 'D2140', 'D2150').

updated_atstring (date-time)required

Timestamp when this auto-code rule was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/auto-codes/auto-code-families

Create 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_idstringrequired

Request Body

base_procedure_codestring
descriptionstring
display_namestringrequired

Human-readable display name (e.g., 'Amalgam by Surface Count').

family_namestringrequired

Unique machine-readable family identifier (e.g., 'amalgam_by_surface', 'composite_by_surface'). Immutable after creation.

is_activeboolean

Whether this family is active and available for auto-code resolution.

selection_typeenumrequired

Criterion type for selecting the correct code. One of: surface_count, tooth_type, arch, unit_count, material, age, combined.

agearchcombineddentitionmaterialsurface_counttooth_positiontooth_typeunit_count

Responses

201Successful Response
base_procedure_codestring
created_atstring (date-time)required

Timestamp when this auto-code family was created.

descriptionstring
display_namestringrequired

Human-readable display name (e.g., 'Amalgam by Surface Count').

family_namestringrequired

Unique machine-readable family identifier (e.g., 'amalgam_by_surface', 'composite_by_surface').

idstring (uuid)required

Unique identifier (UUID) of this auto-code family.

is_activebooleanrequired

Whether this family is active and available for auto-code resolution.

requires_material_familybooleanrequired

True if any active rule in this family requires material_family in the resolution context.

selection_typeenumrequired

Criterion type for selecting the correct code. One of: surface_count, tooth_type, arch, unit_count, material, age, combined.

agearchcombineddentitionmaterialsurface_counttooth_positiontooth_typeunit_count
updated_atstring (date-time)required

Timestamp when this auto-code family was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}/archive

Archive auto-code family

Soft-delete an auto-code family and all its rules. Raises 404 if not found.

Parameters

Path Parameters
family_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
base_procedure_codestring
created_atstring (date-time)required

Timestamp when this auto-code family was created.

descriptionstring
display_namestringrequired

Human-readable display name (e.g., 'Amalgam by Surface Count').

family_namestringrequired

Unique machine-readable family identifier (e.g., 'amalgam_by_surface', 'composite_by_surface').

idstring (uuid)required

Unique identifier (UUID) of this auto-code family.

is_activebooleanrequired

Whether this family is active and available for auto-code resolution.

requires_material_familybooleanrequired

True if any active rule in this family requires material_family in the resolution context.

selection_typeenumrequired

Criterion type for selecting the correct code. One of: surface_count, tooth_type, arch, unit_count, material, age, combined.

agearchcombineddentitionmaterialsurface_counttooth_positiontooth_typeunit_count
updated_atstring (date-time)required

Timestamp when this auto-code family was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/auto-codes/auto-code-families/{family_uuid}/rules

Create 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_uuidstringrequired
org_idstringrequired

Request Body

conditionsobjectrequired

JSON 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_activeboolean

Whether this rule is active and eligible for matching.

priorityinteger

Evaluation priority. Higher-priority rules are checked first. Default 0.

procedure_codestringrequired

CDT procedure code selected when this rule's conditions match (e.g., 'D2140', 'D2150').

Responses

201Successful Response
conditionsobjectrequired

JSON object defining the matching criteria. Structure depends on the family's selection_type.

created_atstring (date-time)required

Timestamp when this auto-code rule was created.

familyobject

Lightweight reference to a related entity — exposes UUID and optional name.

idstring (uuid)required

Unique identifier (UUID) of this auto-code rule.

is_activebooleanrequired

Whether this rule is active and eligible for matching.

priorityintegerrequired

Evaluation priority. Higher-priority rules are checked first.

procedure_codestringrequired

CDT procedure code selected when this rule's conditions match (e.g., 'D2140', 'D2150').

updated_atstring (date-time)required

Timestamp when this auto-code rule was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/auto-codes/auto-code-rules/{rule_uuid}/archive

Archive auto-code rule

Soft-delete an auto-code rule. Raises 404 if not found.

Parameters

Path Parameters
rule_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
conditionsobjectrequired

JSON object defining the matching criteria. Structure depends on the family's selection_type.

created_atstring (date-time)required

Timestamp when this auto-code rule was created.

familyobject

Lightweight reference to a related entity — exposes UUID and optional name.

idstring (uuid)required

Unique identifier (UUID) of this auto-code rule.

is_activebooleanrequired

Whether this rule is active and eligible for matching.

priorityintegerrequired

Evaluation priority. Higher-priority rules are checked first.

procedure_codestringrequired

CDT procedure code selected when this rule's conditions match (e.g., 'D2140', 'D2150').

updated_atstring (date-time)required

Timestamp when this auto-code rule was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/auto-codes/resolve

Resolve 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_idstringrequired

Request Body

contextobjectrequired

Clinical context for resolution. Provide only the fields relevant to this family's selection type.

family_uuidstring (uuid)required

UUID of the auto-code family to resolve against.

Responses

200Successful Response
family_namestringrequired

Name of the auto-code family that was resolved.

matched_rule_uuidstring (uuid)
procedure_codestring
422Validation Error
detailobject[]
curl
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"
  }'
patch/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_uuidstringrequired
org_idstringrequired

Request Body

base_procedure_codestring
base_versionintegerrequired

Current version of the entity. Required for optimistic concurrency — rejected if stale.

descriptionstring
display_namestring
is_activeboolean
selection_typeenum
agearchcombineddentitionmaterialsurface_counttooth_positiontooth_typeunit_count

Responses

200Successful Response
base_procedure_codestring
created_atstring (date-time)required

Timestamp when this auto-code family was created.

descriptionstring
display_namestringrequired

Human-readable display name (e.g., 'Amalgam by Surface Count').

family_namestringrequired

Unique machine-readable family identifier (e.g., 'amalgam_by_surface', 'composite_by_surface').

idstring (uuid)required

Unique identifier (UUID) of this auto-code family.

is_activebooleanrequired

Whether this family is active and available for auto-code resolution.

requires_material_familybooleanrequired

True if any active rule in this family requires material_family in the resolution context.

selection_typeenumrequired

Criterion type for selecting the correct code. One of: surface_count, tooth_type, arch, unit_count, material, age, combined.

agearchcombineddentitionmaterialsurface_counttooth_positiontooth_typeunit_count
updated_atstring (date-time)required

Timestamp when this auto-code family was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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
  }'
patch/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_uuidstringrequired
org_idstringrequired

Request Body

base_versionintegerrequired

Current version of the entity. Required for optimistic concurrency — rejected if stale.

conditionsobject
is_activeboolean
priorityinteger
procedure_codestring

Responses

200Successful Response
conditionsobjectrequired

JSON object defining the matching criteria. Structure depends on the family's selection_type.

created_atstring (date-time)required

Timestamp when this auto-code rule was created.

familyobject

Lightweight reference to a related entity — exposes UUID and optional name.

idstring (uuid)required

Unique identifier (UUID) of this auto-code rule.

is_activebooleanrequired

Whether this rule is active and eligible for matching.

priorityintegerrequired

Evaluation priority. Higher-priority rules are checked first.

procedure_codestringrequired

CDT procedure code selected when this rule's conditions match (e.g., 'D2140', 'D2150').

updated_atstring (date-time)required

Timestamp when this auto-code rule was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/condition-types

List 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_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page (1-100)

Default: 50

categorystring

Filter by clinical category (e.g., 'restoration', 'prosthetic')

is_activeboolean

Filter by active status

searchstring

Search by name or code (case-insensitive substring match)

Responses

200Successful Response
itemsobject[]required

List of condition type records.

totalintegerrequired

Total number of records matching the query (before pagination).

422Validation Error
detailobject[]
curl
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"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
abbreviated_descriptionstring
affects_tooth_statusbooleanrequired

Whether recording this condition changes the tooth's clinical status (e.g., marking a tooth as missing).

categoryenumrequired

Clinical category. One of: tooth_status, pathology, structural, soft_tissue, monitoring, finding.

findingmonitoringpathologysoft_tissuestructuraltooth_status
codestringrequired

Unique machine-readable identifier for this condition type (e.g., 'caries', 'missing'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this condition type was created.

default_colorstring
display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

icd10_codestring
icd10_descriptionstring
iconstring
idstring (uuid)required

Unique identifier (UUID) of this condition type.

is_activebooleanrequired

Whether this condition type is active and available for use.

is_chartablebooleanrequired

True if painted on the odontogram (paintable tier); false for coded findings/diagnoses not visually charted.

is_systembooleanrequired

Whether this is a built-in system condition type (true) or user-created (false).

is_watchablebooleanrequired

Whether this condition can be placed on a watch list for monitoring.

namestringrequired

Human-readable display name (e.g., 'Caries', 'Missing Tooth').

paint_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

snomed_codestring
surface_restrictionobject
treatment_areaenumrequired

Anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth, root, range. Default 'tooth'.

archmouthquadrantrangerootsextantsurfacetooth
updated_atstring (date-time)required

Timestamp when this condition type was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/condition-types

Create 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_idstringrequired

Request Body

abbreviated_descriptionstring
affects_tooth_statusboolean

Whether recording this condition changes the tooth's clinical status (e.g., marking a tooth as missing).

categoryenumrequired

Clinical category. One of: tooth_status, pathology, structural, soft_tissue, monitoring, finding.

findingmonitoringpathologysoft_tissuestructuraltooth_status
codestringrequired

Unique machine-readable identifier for this condition type (e.g., 'caries', 'missing'). Immutable after creation.

default_colorstring
display_orderinteger

Sort order for display in UI lists. Lower values appear first.

icd10_codestring
icd10_descriptionstring
iconstring
is_activeboolean

Whether this condition type is active and available for use.

is_chartableboolean

True if painted on the odontogram; false for coded findings.

is_systemboolean

Whether this is a built-in system condition type (true) or user-created (false).

is_watchableboolean

Whether this condition can be placed on a watch list for monitoring.

namestringrequired

Human-readable display name (e.g., 'Caries', 'Missing Tooth').

paint_type_uuidstring (uuid)
snomed_codestring
surface_restrictionobject
treatment_areaenum

Anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth, root, range. Default 'tooth'.

archmouthquadrantrangerootsextantsurfacetooth

Responses

201Successful Response
abbreviated_descriptionstring
affects_tooth_statusbooleanrequired

Whether recording this condition changes the tooth's clinical status (e.g., marking a tooth as missing).

categoryenumrequired

Clinical category. One of: tooth_status, pathology, structural, soft_tissue, monitoring, finding.

findingmonitoringpathologysoft_tissuestructuraltooth_status
codestringrequired

Unique machine-readable identifier for this condition type (e.g., 'caries', 'missing'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this condition type was created.

default_colorstring
display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

icd10_codestring
icd10_descriptionstring
iconstring
idstring (uuid)required

Unique identifier (UUID) of this condition type.

is_activebooleanrequired

Whether this condition type is active and available for use.

is_chartablebooleanrequired

True if painted on the odontogram (paintable tier); false for coded findings/diagnoses not visually charted.

is_systembooleanrequired

Whether this is a built-in system condition type (true) or user-created (false).

is_watchablebooleanrequired

Whether this condition can be placed on a watch list for monitoring.

namestringrequired

Human-readable display name (e.g., 'Caries', 'Missing Tooth').

paint_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

snomed_codestring
surface_restrictionobject
treatment_areaenumrequired

Anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth, root, range. Default 'tooth'.

archmouthquadrantrangerootsextantsurfacetooth
updated_atstring (date-time)required

Timestamp when this condition type was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/condition-types/{condition_type_uuid}/archive

Archive condition type

Soft-delete a condition type. Raises 404 if not found.

Parameters

Path Parameters
condition_type_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
abbreviated_descriptionstring
affects_tooth_statusbooleanrequired

Whether recording this condition changes the tooth's clinical status (e.g., marking a tooth as missing).

categoryenumrequired

Clinical category. One of: tooth_status, pathology, structural, soft_tissue, monitoring, finding.

findingmonitoringpathologysoft_tissuestructuraltooth_status
codestringrequired

Unique machine-readable identifier for this condition type (e.g., 'caries', 'missing'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this condition type was created.

default_colorstring
display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

icd10_codestring
icd10_descriptionstring
iconstring
idstring (uuid)required

Unique identifier (UUID) of this condition type.

is_activebooleanrequired

Whether this condition type is active and available for use.

is_chartablebooleanrequired

True if painted on the odontogram (paintable tier); false for coded findings/diagnoses not visually charted.

is_systembooleanrequired

Whether this is a built-in system condition type (true) or user-created (false).

is_watchablebooleanrequired

Whether this condition can be placed on a watch list for monitoring.

namestringrequired

Human-readable display name (e.g., 'Caries', 'Missing Tooth').

paint_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

snomed_codestring
surface_restrictionobject
treatment_areaenumrequired

Anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth, root, range. Default 'tooth'.

archmouthquadrantrangerootsextantsurfacetooth
updated_atstring (date-time)required

Timestamp when this condition type was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
patch/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_uuidstringrequired
org_idstringrequired

Request Body

abbreviated_descriptionstring
affects_tooth_statusboolean
base_versionintegerrequired

Current version of the entity. Required for optimistic concurrency — the update is rejected if this doesn't match the server's version.

categoryenum
findingmonitoringpathologysoft_tissuestructuraltooth_status
default_colorstring
display_orderinteger
icd10_codestring
icd10_descriptionstring
iconstring
is_activeboolean
is_chartableboolean
is_watchableboolean
namestring
paint_type_uuidstring (uuid)
snomed_codestring
surface_restrictionobject
treatment_areaenum
archmouthquadrantrangerootsextantsurfacetooth

Responses

200Successful Response
abbreviated_descriptionstring
affects_tooth_statusbooleanrequired

Whether recording this condition changes the tooth's clinical status (e.g., marking a tooth as missing).

categoryenumrequired

Clinical category. One of: tooth_status, pathology, structural, soft_tissue, monitoring, finding.

findingmonitoringpathologysoft_tissuestructuraltooth_status
codestringrequired

Unique machine-readable identifier for this condition type (e.g., 'caries', 'missing'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this condition type was created.

default_colorstring
display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

icd10_codestring
icd10_descriptionstring
iconstring
idstring (uuid)required

Unique identifier (UUID) of this condition type.

is_activebooleanrequired

Whether this condition type is active and available for use.

is_chartablebooleanrequired

True if painted on the odontogram (paintable tier); false for coded findings/diagnoses not visually charted.

is_systembooleanrequired

Whether this is a built-in system condition type (true) or user-created (false).

is_watchablebooleanrequired

Whether this condition can be placed on a watch list for monitoring.

namestringrequired

Human-readable display name (e.g., 'Caries', 'Missing Tooth').

paint_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

snomed_codestring
surface_restrictionobject
treatment_areaenumrequired

Anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth, root, range. Default 'tooth'.

archmouthquadrantrangerootsextantsurfacetooth
updated_atstring (date-time)required

Timestamp when this condition type was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/dentition-configs

List 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_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page

Default: 50

dentition_typestring

Filter by dentition type (permanent, primary, mixed)

is_activeboolean

Filter by active status

Responses

200Successful Response
itemsobject[]required

List of dentition configuration records.

totalintegerrequired

Total number of dentition configurations matching the query.

422Validation Error
detailobject[]
curl
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"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
created_atstring (date-time)required

Timestamp when this dentition configuration was created.

dentition_typestringrequired

Dentition stage. One of: permanent, primary, mixed.

descriptionstring
display_orderintegerrequired

Sort order for display. Lower values appear first.

end_ageinteger
idstring (uuid)required

Unique identifier (UUID) of this dentition configuration.

is_activebooleanrequired

Whether this configuration is currently active.

is_defaultbooleanrequired

Whether this is the default configuration for its dentition type.

namestringrequired

Display name for this dentition configuration (e.g., 'Adult Permanent', 'Child Primary', 'Mixed 6-12 years').

slot_indicesinteger[]required

Sorted list of tooth slot indices included in this dentition configuration.

start_ageinteger
updated_atstring (date-time)required

Timestamp when this dentition configuration was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/dentition-configs/resolve

Resolve 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_idstringrequired
Query Parameters
dobstringrequired

Patient date of birth (ISO format YYYY-MM-DD).

service_datestring

Date of service (ISO format YYYY-MM-DD). Defaults to today if not provided.

Responses

200Successful Response
created_atstring (date-time)required

Timestamp when this dentition configuration was created.

dentition_typestringrequired

Dentition stage. One of: permanent, primary, mixed.

descriptionstring
display_orderintegerrequired

Sort order for display. Lower values appear first.

end_ageinteger
idstring (uuid)required

Unique identifier (UUID) of this dentition configuration.

is_activebooleanrequired

Whether this configuration is currently active.

is_defaultbooleanrequired

Whether this is the default configuration for its dentition type.

namestringrequired

Display name for this dentition configuration (e.g., 'Adult Permanent', 'Child Primary', 'Mixed 6-12 years').

slot_indicesinteger[]required

Sorted list of tooth slot indices included in this dentition configuration.

start_ageinteger
updated_atstring (date-time)required

Timestamp when this dentition configuration was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/dentition-configs

Create 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_idstringrequired

Request Body

dentition_typestringrequired

Dentition stage. One of: permanent, primary, mixed.

descriptionstring
display_orderinteger

Sort order for display. Lower values appear first.

end_ageinteger
is_activeboolean

Whether this configuration is currently active.

is_defaultboolean

Whether this is the default configuration for its dentition type.

namestringrequired

Display name for this dentition configuration (e.g., 'Adult Permanent', 'Child Primary', 'Mixed 6-12 years').

slot_indicesinteger[]
start_ageinteger

Responses

201Successful Response
created_atstring (date-time)required

Timestamp when this dentition configuration was created.

dentition_typestringrequired

Dentition stage. One of: permanent, primary, mixed.

descriptionstring
display_orderintegerrequired

Sort order for display. Lower values appear first.

end_ageinteger
idstring (uuid)required

Unique identifier (UUID) of this dentition configuration.

is_activebooleanrequired

Whether this configuration is currently active.

is_defaultbooleanrequired

Whether this is the default configuration for its dentition type.

namestringrequired

Display name for this dentition configuration (e.g., 'Adult Permanent', 'Child Primary', 'Mixed 6-12 years').

slot_indicesinteger[]required

Sorted list of tooth slot indices included in this dentition configuration.

start_ageinteger
updated_atstring (date-time)required

Timestamp when this dentition configuration was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/dentition-configs/{config_uuid}/archive

Archive dentition config

Soft-delete a dentition configuration. Raises 404 if not found.

Parameters

Path Parameters
config_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
created_atstring (date-time)required

Timestamp when this dentition configuration was created.

dentition_typestringrequired

Dentition stage. One of: permanent, primary, mixed.

descriptionstring
display_orderintegerrequired

Sort order for display. Lower values appear first.

end_ageinteger
idstring (uuid)required

Unique identifier (UUID) of this dentition configuration.

is_activebooleanrequired

Whether this configuration is currently active.

is_defaultbooleanrequired

Whether this is the default configuration for its dentition type.

namestringrequired

Display name for this dentition configuration (e.g., 'Adult Permanent', 'Child Primary', 'Mixed 6-12 years').

slot_indicesinteger[]required

Sorted list of tooth slot indices included in this dentition configuration.

start_ageinteger
updated_atstring (date-time)required

Timestamp when this dentition configuration was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
patch/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_uuidstringrequired
org_idstringrequired

Request Body

base_versionintegerrequired

Current version of the entity. Required for optimistic concurrency — rejected if stale.

dentition_typestring
descriptionstring
display_orderinteger
end_ageinteger
is_activeboolean
is_defaultboolean
namestring
slot_indicesinteger[]
start_ageinteger

Responses

200Successful Response
created_atstring (date-time)required

Timestamp when this dentition configuration was created.

dentition_typestringrequired

Dentition stage. One of: permanent, primary, mixed.

descriptionstring
display_orderintegerrequired

Sort order for display. Lower values appear first.

end_ageinteger
idstring (uuid)required

Unique identifier (UUID) of this dentition configuration.

is_activebooleanrequired

Whether this configuration is currently active.

is_defaultbooleanrequired

Whether this is the default configuration for its dentition type.

namestringrequired

Display name for this dentition configuration (e.g., 'Adult Permanent', 'Child Primary', 'Mixed 6-12 years').

slot_indicesinteger[]required

Sorted list of tooth slot indices included in this dentition configuration.

start_ageinteger
updated_atstring (date-time)required

Timestamp when this dentition configuration was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/grid-layouts

List grid layouts

List grid layouts with optional filtering by profile and search. Results are paginated.

Parameters

Path Parameters
org_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page

Default: 50

profile_uuidstring

Filter by chart profile UUID

searchstring

Search by layout name (case-insensitive substring match)

Responses

200Successful Response
itemsobject[]required

List of grid layout records.

totalintegerrequired

Total number of grid layouts matching the query.

422Validation Error
detailobject[]
curl
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"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

created_atstring (date-time)required

Timestamp when this grid layout was created.

idstring (uuid)required

Unique identifier (UUID) of this grid layout.

is_defaultbooleanrequired

Whether this is the default grid layout for its chart profile.

layout_namestringrequired

Display name for this layout (e.g., 'Standard Adult', 'Orthodontic View').

layout_variantstringrequired

Visual layout preset. One of: 'standard', 'mixed_dentition', 'ortho', 'implant_planning'.

max_slotsintegerrequired

Maximum number of visible tooth slots in this layout.

mixed_row_strategystringrequired

How primary teeth are displayed alongside permanent teeth. One of: 'separate_rows', 'interleave'.

slot_configobjectrequired

JSON object defining slot arrangement, row assignments, and positioning rules for the tooth grid.

supports_supernumerarybooleanrequired

Whether this layout can display supernumerary tooth positions.

updated_atstring (date-time)required

Timestamp when this grid layout was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/grid-layouts

Create 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_idstringrequired

Request Body

chart_profile_uuidstring (uuid)required

UUID of the chart profile this grid layout belongs to.

is_defaultboolean

Whether this is the default grid layout for its chart profile.

layout_namestringrequired

Display name for this layout (e.g., 'Standard Adult', 'Orthodontic View').

layout_variantenum

Visual layout preset. One of: 'standard' (standard dental chart), 'mixed_dentition' (optimized for mixed teeth), 'ortho' (orthodontic view), 'implant_planning' (implant site visualization).

implant_planningmixed_dentitionorthostandard
max_slotsinteger

Maximum number of visible tooth slots in this layout. Default 32.

mixed_row_strategyenum

How 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_rows
slot_configobjectrequired

JSON object defining slot arrangement, row assignments, and positioning rules for the tooth grid.

supports_supernumeraryboolean

Whether this layout can display supernumerary tooth positions.

Responses

201Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

created_atstring (date-time)required

Timestamp when this grid layout was created.

idstring (uuid)required

Unique identifier (UUID) of this grid layout.

is_defaultbooleanrequired

Whether this is the default grid layout for its chart profile.

layout_namestringrequired

Display name for this layout (e.g., 'Standard Adult', 'Orthodontic View').

layout_variantstringrequired

Visual layout preset. One of: 'standard', 'mixed_dentition', 'ortho', 'implant_planning'.

max_slotsintegerrequired

Maximum number of visible tooth slots in this layout.

mixed_row_strategystringrequired

How primary teeth are displayed alongside permanent teeth. One of: 'separate_rows', 'interleave'.

slot_configobjectrequired

JSON object defining slot arrangement, row assignments, and positioning rules for the tooth grid.

supports_supernumerarybooleanrequired

Whether this layout can display supernumerary tooth positions.

updated_atstring (date-time)required

Timestamp when this grid layout was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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": {}
  }'
post/api/v1/{org_id}/odontogram/grid-layouts/{grid_layout_uuid}/archive

Archive grid layout

Soft-delete a grid layout. Raises 404 if not found.

Parameters

Path Parameters
grid_layout_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

created_atstring (date-time)required

Timestamp when this grid layout was created.

idstring (uuid)required

Unique identifier (UUID) of this grid layout.

is_defaultbooleanrequired

Whether this is the default grid layout for its chart profile.

layout_namestringrequired

Display name for this layout (e.g., 'Standard Adult', 'Orthodontic View').

layout_variantstringrequired

Visual layout preset. One of: 'standard', 'mixed_dentition', 'ortho', 'implant_planning'.

max_slotsintegerrequired

Maximum number of visible tooth slots in this layout.

mixed_row_strategystringrequired

How primary teeth are displayed alongside permanent teeth. One of: 'separate_rows', 'interleave'.

slot_configobjectrequired

JSON object defining slot arrangement, row assignments, and positioning rules for the tooth grid.

supports_supernumerarybooleanrequired

Whether this layout can display supernumerary tooth positions.

updated_atstring (date-time)required

Timestamp when this grid layout was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
patch/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_uuidstringrequired
org_idstringrequired

Request Body

base_versionintegerrequired

Current version of the entity. Required for optimistic concurrency — rejected if stale.

is_defaultboolean
layout_namestring
layout_variantenum
implant_planningmixed_dentitionorthostandard
max_slotsinteger
mixed_row_strategyenum
interleaveseparate_rows
slot_configobject
supports_supernumeraryboolean

Responses

200Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

created_atstring (date-time)required

Timestamp when this grid layout was created.

idstring (uuid)required

Unique identifier (UUID) of this grid layout.

is_defaultbooleanrequired

Whether this is the default grid layout for its chart profile.

layout_namestringrequired

Display name for this layout (e.g., 'Standard Adult', 'Orthodontic View').

layout_variantstringrequired

Visual layout preset. One of: 'standard', 'mixed_dentition', 'ortho', 'implant_planning'.

max_slotsintegerrequired

Maximum number of visible tooth slots in this layout.

mixed_row_strategystringrequired

How primary teeth are displayed alongside permanent teeth. One of: 'separate_rows', 'interleave'.

slot_configobjectrequired

JSON object defining slot arrangement, row assignments, and positioning rules for the tooth grid.

supports_supernumerarybooleanrequired

Whether this layout can display supernumerary tooth positions.

updated_atstring (date-time)required

Timestamp when this grid layout was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/hotkeys

List hotkey mappings

List hotkey mappings with optional filtering by owner type and profile. Results are paginated.

Parameters

Path Parameters
org_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page

Default: 50

owner_typestring

Filter by owner type (system, profile, user)

profile_uuidstring

Filter by chart profile UUID

Responses

200Successful Response
itemsobject[]required

List of hotkey mapping records.

totalintegerrequired

Total number of hotkey mappings matching the query.

422Validation Error
detailobject[]
curl
curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/hotkeys" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
actionstringrequired

Action identifier triggered by this hotkey (e.g., 'toggle_missing', 'select_surface_mode', 'apply_paint').

action_contextobject
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

created_atstring (date-time)required

Timestamp when this hotkey was created.

display_orderintegerrequired

Sort order for display in shortcut reference lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this hotkey mapping.

is_activebooleanrequired

Whether this hotkey mapping is currently active.

key_combostringrequired

Keyboard shortcut string (e.g., 'Ctrl+M', 'Shift+1', 'Alt+S').

owner_typestringrequired

Ownership level of this hotkey. One of: system, profile, user. Higher-priority levels override lower ones.

owner_user_uuidstring (uuid)
versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/hotkeys/resolve

Resolve 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_idstringrequired
Query Parameters
profile_uuidstring

UUID of the chart profile. If provided, profile-level hotkeys override system defaults.

user_uuidstring

UUID of the user. If provided, user-level hotkeys override profile and system defaults.

Responses

200Successful Response
422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/hotkeys

Create 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_idstringrequired

Request Body

actionstringrequired

Action identifier triggered by this hotkey (e.g., 'toggle_missing', 'select_surface_mode', 'apply_paint').

action_contextobject
chart_profile_uuidstring (uuid)
display_orderinteger

Sort order for display in shortcut reference lists. Lower values appear first.

is_activeboolean

Whether this hotkey mapping is currently active.

key_combostringrequired

Keyboard shortcut string (e.g., 'Ctrl+M', 'Shift+1', 'Alt+S').

owner_typestring

Ownership level of this hotkey. One of: system, profile, user. Higher-priority levels override lower ones. Default 'system'.

owner_user_uuidstring (uuid)

Responses

201Successful Response
actionstringrequired

Action identifier triggered by this hotkey (e.g., 'toggle_missing', 'select_surface_mode', 'apply_paint').

action_contextobject
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

created_atstring (date-time)required

Timestamp when this hotkey was created.

display_orderintegerrequired

Sort order for display in shortcut reference lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this hotkey mapping.

is_activebooleanrequired

Whether this hotkey mapping is currently active.

key_combostringrequired

Keyboard shortcut string (e.g., 'Ctrl+M', 'Shift+1', 'Alt+S').

owner_typestringrequired

Ownership level of this hotkey. One of: system, profile, user. Higher-priority levels override lower ones.

owner_user_uuidstring (uuid)
versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/hotkeys/{hotkey_uuid}/archive

Archive hotkey mapping

Soft-delete a hotkey mapping. Raises 404 if not found.

Parameters

Path Parameters
hotkey_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
actionstringrequired

Action identifier triggered by this hotkey (e.g., 'toggle_missing', 'select_surface_mode', 'apply_paint').

action_contextobject
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

created_atstring (date-time)required

Timestamp when this hotkey was created.

display_orderintegerrequired

Sort order for display in shortcut reference lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this hotkey mapping.

is_activebooleanrequired

Whether this hotkey mapping is currently active.

key_combostringrequired

Keyboard shortcut string (e.g., 'Ctrl+M', 'Shift+1', 'Alt+S').

owner_typestringrequired

Ownership level of this hotkey. One of: system, profile, user. Higher-priority levels override lower ones.

owner_user_uuidstring (uuid)
versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
patch/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_uuidstringrequired
org_idstringrequired

Request Body

actionstring
action_contextobject
base_versionintegerrequired

Current version of the entity. Required for optimistic concurrency — rejected if stale.

display_orderinteger
is_activeboolean
key_combostring

Responses

200Successful Response
actionstringrequired

Action identifier triggered by this hotkey (e.g., 'toggle_missing', 'select_surface_mode', 'apply_paint').

action_contextobject
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

created_atstring (date-time)required

Timestamp when this hotkey was created.

display_orderintegerrequired

Sort order for display in shortcut reference lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this hotkey mapping.

is_activebooleanrequired

Whether this hotkey mapping is currently active.

key_combostringrequired

Keyboard shortcut string (e.g., 'Ctrl+M', 'Shift+1', 'Alt+S').

owner_typestringrequired

Ownership level of this hotkey. One of: system, profile, user. Higher-priority levels override lower ones.

owner_user_uuidstring (uuid)
versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/interaction-modes

List interaction modes

List interaction modes with optional search. Results are paginated and sorted by display_order.

Parameters

Path Parameters
org_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page (1-100)

Default: 50

searchstring

Search by name or code (case-insensitive substring match)

Responses

200Successful Response
itemsobject[]required

List of chart interaction mode records.

totalintegerrequired

Total number of records matching the query.

422Validation Error
detailobject[]
curl
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"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
allowed_scopesstring[]required

List 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.

codestringrequired

Unique machine-readable identifier (e.g., 'single_surface', 'bridge_mode'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this interaction mode was created.

cursor_iconstring
default_toolstringrequired

Cursor tool activated when this mode is selected. One of: paint, select, annotate, measure.

descriptionstring
display_orderintegerrequired

Sort order for display in UI. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this interaction mode.

is_systembooleanrequired

Whether this is a built-in system mode (true) or user-created (false).

namestringrequired

Human-readable display name (e.g., 'Single Surface', 'Bridge Mode').

selection_typestringrequired

How the user selects anatomy in this mode. One of: single_tooth, multi_tooth, surface, span, region.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/interaction-modes

Create 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_idstringrequired

Request Body

allowed_scopesstring[]required

List 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.

codestringrequired

Unique machine-readable identifier (e.g., 'single_surface', 'bridge_mode'). Immutable after creation.

cursor_iconstring
default_toolstringrequired

Cursor tool activated when this mode is selected. One of: paint, select, annotate, measure.

descriptionstring
display_orderinteger

Sort order for display in UI. Lower values appear first.

is_systemboolean

Whether this is a built-in system mode (true) or user-created (false).

namestringrequired

Human-readable display name (e.g., 'Single Surface', 'Bridge Mode').

selection_typestringrequired

How the user selects anatomy in this mode. One of: single_tooth, multi_tooth, surface, span, region.

Responses

201Successful Response
allowed_scopesstring[]required

List 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.

codestringrequired

Unique machine-readable identifier (e.g., 'single_surface', 'bridge_mode'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this interaction mode was created.

cursor_iconstring
default_toolstringrequired

Cursor tool activated when this mode is selected. One of: paint, select, annotate, measure.

descriptionstring
display_orderintegerrequired

Sort order for display in UI. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this interaction mode.

is_systembooleanrequired

Whether this is a built-in system mode (true) or user-created (false).

namestringrequired

Human-readable display name (e.g., 'Single Surface', 'Bridge Mode').

selection_typestringrequired

How the user selects anatomy in this mode. One of: single_tooth, multi_tooth, surface, span, region.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/interaction-modes/{mode_uuid}/archive

Archive interaction mode

Soft-delete an interaction mode. Raises 404 if not found.

Parameters

Path Parameters
mode_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
allowed_scopesstring[]required

List 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.

codestringrequired

Unique machine-readable identifier (e.g., 'single_surface', 'bridge_mode'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this interaction mode was created.

cursor_iconstring
default_toolstringrequired

Cursor tool activated when this mode is selected. One of: paint, select, annotate, measure.

descriptionstring
display_orderintegerrequired

Sort order for display in UI. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this interaction mode.

is_systembooleanrequired

Whether this is a built-in system mode (true) or user-created (false).

namestringrequired

Human-readable display name (e.g., 'Single Surface', 'Bridge Mode').

selection_typestringrequired

How the user selects anatomy in this mode. One of: single_tooth, multi_tooth, surface, span, region.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
patch/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_uuidstringrequired
org_idstringrequired

Request Body

allowed_scopesstring[]
base_versionintegerrequired

Current version of the entity. Required for optimistic concurrency — rejected if stale.

cursor_iconstring
default_toolstring
descriptionstring
display_orderinteger
namestring
selection_typestring

Responses

200Successful Response
allowed_scopesstring[]required

List 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.

codestringrequired

Unique machine-readable identifier (e.g., 'single_surface', 'bridge_mode'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this interaction mode was created.

cursor_iconstring
default_toolstringrequired

Cursor tool activated when this mode is selected. One of: paint, select, annotate, measure.

descriptionstring
display_orderintegerrequired

Sort order for display in UI. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this interaction mode.

is_systembooleanrequired

Whether this is a built-in system mode (true) or user-created (false).

namestringrequired

Human-readable display name (e.g., 'Single Surface', 'Bridge Mode').

selection_typestringrequired

How the user selects anatomy in this mode. One of: single_tooth, multi_tooth, surface, span, region.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/macros

List 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_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page

Default: 50

owner_typestring

Filter by owner type (system, location, user)

chart_profile_uuidstring

Filter by chart profile UUID

is_activeboolean

Filter by active status

Responses

200Successful Response
itemsobject[]required

List of chart macros.

totalintegerrequired

Total number of macros matching the query.

422Validation Error
detailobject[]
curl
curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/macros" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

created_atstring (date-time)required

Timestamp when the macro was created.

display_orderintegerrequired

Sort order in the macro panel list.

idstring (uuid)required

Unique identifier of the macro.

is_activebooleanrequired

Whether this macro is currently active and available.

is_defaultbooleanrequired

Whether this macro is shown by default in the quick-access panel.

itemsobject[]required

Ordered list of macro items with resolved references.

namestringrequired

Display name of the macro (e.g., 'Common Restorations', 'Endo Quick Panel').

owner_location_uuidstring (uuid)
owner_typestringrequired

Ownership level. One of: system (available to all), location (office-specific), user (personal).

owner_user_uuidstring
updated_atstring (date-time)required

Timestamp when the macro was last updated.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/macros

Create 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_idstringrequired

Request Body

chart_profile_uuidstring (uuid)
display_orderinteger

Sort order in the macro panel list.

is_activeboolean

Whether this macro is currently active and available.

is_defaultboolean

Whether this macro is shown by default in the quick-access panel.

itemsobject[]
namestringrequired

Display name of the macro (e.g., 'Common Restorations', 'Endo Quick Panel').

owner_location_uuidstring (uuid)
owner_typestringrequired

Ownership level. One of: system (available to all), location (office-specific), user (personal).

owner_user_uuidstring

Responses

201Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

created_atstring (date-time)required

Timestamp when the macro was created.

display_orderintegerrequired

Sort order in the macro panel list.

idstring (uuid)required

Unique identifier of the macro.

is_activebooleanrequired

Whether this macro is currently active and available.

is_defaultbooleanrequired

Whether this macro is shown by default in the quick-access panel.

itemsobject[]required

Ordered list of macro items with resolved references.

namestringrequired

Display name of the macro (e.g., 'Common Restorations', 'Endo Quick Panel').

owner_location_uuidstring (uuid)
owner_typestringrequired

Ownership level. One of: system (available to all), location (office-specific), user (personal).

owner_user_uuidstring
updated_atstring (date-time)required

Timestamp when the macro was last updated.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/macros/{macro_uuid}/archive

Archive macro

Soft-delete a macro and all its items. Raises 404 if not found.

Parameters

Path Parameters
macro_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

created_atstring (date-time)required

Timestamp when the macro was created.

display_orderintegerrequired

Sort order in the macro panel list.

idstring (uuid)required

Unique identifier of the macro.

is_activebooleanrequired

Whether this macro is currently active and available.

is_defaultbooleanrequired

Whether this macro is shown by default in the quick-access panel.

itemsobject[]required

Ordered list of macro items with resolved references.

namestringrequired

Display name of the macro (e.g., 'Common Restorations', 'Endo Quick Panel').

owner_location_uuidstring (uuid)
owner_typestringrequired

Ownership level. One of: system (available to all), location (office-specific), user (personal).

owner_user_uuidstring
updated_atstring (date-time)required

Timestamp when the macro was last updated.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/macros/{macro_uuid}/resolve

Resolve 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_uuidstringrequired
org_idstringrequired

Request Body

ageinteger
archenum

Auto-code arch condition values.

mandibularmaxillary
dentitionenum

Auto-code dentition condition values.

mixedpermanentprimary
material_familystring
surfacesstring
tooth_numstring
tooth_positionenum

Auto-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).

anteriorposterior
tooth_typeenum

Auto-code tooth_type condition values. Maps charting anatomy to the three CDT categories.

anteriormolarpremolar

Responses

200Successful Response
idstring (uuid)required

UUID of the macro that was resolved.

namestringrequired

Name of the macro that was resolved.

resolved_itemsobject[]required

Ordered list of resolved items. Static items pass through as-is; auto-code items have their procedure_code resolved from clinical context.

422Validation Error
detailobject[]
curl
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"
  }'
patch/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_uuidstringrequired
org_idstringrequired

Request Body

base_versionintegerrequired

Current version of the macro for optimistic concurrency control.

display_orderinteger
is_activeboolean
is_defaultboolean
itemsobject[]
namestring

Responses

200Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

created_atstring (date-time)required

Timestamp when the macro was created.

display_orderintegerrequired

Sort order in the macro panel list.

idstring (uuid)required

Unique identifier of the macro.

is_activebooleanrequired

Whether this macro is currently active and available.

is_defaultbooleanrequired

Whether this macro is shown by default in the quick-access panel.

itemsobject[]required

Ordered list of macro items with resolved references.

namestringrequired

Display name of the macro (e.g., 'Common Restorations', 'Endo Quick Panel').

owner_location_uuidstring (uuid)
owner_typestringrequired

Ownership level. One of: system (available to all), location (office-specific), user (personal).

owner_user_uuidstring
updated_atstring (date-time)required

Timestamp when the macro was last updated.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/materials/material-categories

List material categories

List material categories with optional filtering. Results are paginated and sorted by display_order.

Parameters

Path Parameters
org_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page

Default: 50

is_activeboolean

Filter by active status

searchstring

Search by name or code (case-insensitive substring match)

Responses

200Successful Response
itemsobject[]required

List of material category records.

totalintegerrequired

Total number of records matching the query (before pagination).

422Validation Error
detailobject[]
curl
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"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
codestringrequired

Unique identifier for this material category (e.g., 'metal', 'ceramic'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this material category was created.

descriptionstring
display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this material category.

is_activebooleanrequired

Whether this material category is active and available for use.

is_systembooleanrequired

Whether this is a built-in system material category (true) or user-created (false).

namestringrequired

Display name (e.g., 'Metal Alloys', 'Ceramic').

updated_atstring (date-time)required

Timestamp when this material category was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/materials/material-styles

List material style overrides

List material style overrides, optionally filtered by profile or material type. Results are paginated.

Parameters

Path Parameters
org_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page

Default: 50

chart_profile_uuidstring

Filter styles by chart profile UUID

material_type_uuidstring

Filter styles by material type UUID

Responses

200Successful Response
itemsobject[]required

List of material style records.

totalintegerrequired

Total number of records matching the query (before pagination).

422Validation Error
detailobject[]
curl
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"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

colorstringrequired

Override hex color for this material in this profile.

created_atstring (date-time)required

Timestamp when this material style was created.

idstring (uuid)required

Unique identifier (UUID) of this material style override.

material_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

material_type_codestring
opacitynumberrequired

Override opacity from 0.0 to 1.0. Default 1.0.

patternstringrequired

Override fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.

updated_atstring (date-time)required

Timestamp when this material style was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/materials/material-types

List 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_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page

Default: 50

category_uuidstring

Filter material types by parent category UUID

is_activeboolean

Filter by active status

searchstring

Search by name or code (case-insensitive substring match)

Responses

200Successful Response
itemsobject[]required

List of material type records.

totalintegerrequired

Total number of records matching the query (before pagination).

422Validation Error
detailobject[]
curl
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"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
categoryobject

Lightweight reference to a related entity — exposes UUID and optional name.

codestringrequired

Unique identifier for this material type (e.g., 'amalgam', 'composite_resin'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this material type was created.

default_colorstringrequired

Default hex color for rendering this material (e.g., '#C0C0C0' for silver).

default_opacitynumberrequired

Default opacity from 0.0 to 1.0. Default 1.0.

default_patternstringrequired

Default fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical. Default 'solid'.

display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this material type.

is_activebooleanrequired

Whether this material type is active and available for use.

is_systembooleanrequired

Whether this is a built-in system material type (true) or user-created (false).

material_familystring
namestringrequired

Display name (e.g., 'Amalgam', 'Composite Resin').

updated_atstring (date-time)required

Timestamp when this material type was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/materials/material-categories

Create 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_idstringrequired

Request Body

codestringrequired

Unique identifier for this material category (e.g., 'metal', 'ceramic'). Immutable after creation.

descriptionstring
display_orderinteger

Sort order for display in UI lists. Lower values appear first.

is_activeboolean

Whether this material category is active and available for use.

is_systemboolean

Whether this is a built-in system material category (true) or user-created (false).

namestringrequired

Display name (e.g., 'Metal Alloys', 'Ceramic').

Responses

201Successful Response
codestringrequired

Unique identifier for this material category (e.g., 'metal', 'ceramic'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this material category was created.

descriptionstring
display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this material category.

is_activebooleanrequired

Whether this material category is active and available for use.

is_systembooleanrequired

Whether this is a built-in system material category (true) or user-created (false).

namestringrequired

Display name (e.g., 'Metal Alloys', 'Ceramic').

updated_atstring (date-time)required

Timestamp when this material category was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/materials/material-categories/{category_uuid}/archive

Archive material category

Soft-delete a material category. Raises 404 if not found.

Parameters

Path Parameters
category_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
codestringrequired

Unique identifier for this material category (e.g., 'metal', 'ceramic'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this material category was created.

descriptionstring
display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this material category.

is_activebooleanrequired

Whether this material category is active and available for use.

is_systembooleanrequired

Whether this is a built-in system material category (true) or user-created (false).

namestringrequired

Display name (e.g., 'Metal Alloys', 'Ceramic').

updated_atstring (date-time)required

Timestamp when this material category was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/materials/material-styles

Create 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_idstringrequired

Request Body

chart_profile_uuidstring (uuid)required

UUID of the chart profile this style override belongs to.

colorstringrequired

Override hex color for this material in this profile.

material_type_uuidstring (uuid)required

UUID of the material type this style overrides.

opacitynumber

Override opacity from 0.0 to 1.0. Default 1.0.

patternstringrequired

Override fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.

Responses

201Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

colorstringrequired

Override hex color for this material in this profile.

created_atstring (date-time)required

Timestamp when this material style was created.

idstring (uuid)required

Unique identifier (UUID) of this material style override.

material_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

material_type_codestring
opacitynumberrequired

Override opacity from 0.0 to 1.0. Default 1.0.

patternstringrequired

Override fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.

updated_atstring (date-time)required

Timestamp when this material style was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/materials/material-styles/{style_uuid}/archive

Archive material style override

Soft-delete a material style override. Raises 404 if not found.

Parameters

Path Parameters
style_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

colorstringrequired

Override hex color for this material in this profile.

created_atstring (date-time)required

Timestamp when this material style was created.

idstring (uuid)required

Unique identifier (UUID) of this material style override.

material_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

material_type_codestring
opacitynumberrequired

Override opacity from 0.0 to 1.0. Default 1.0.

patternstringrequired

Override fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.

updated_atstring (date-time)required

Timestamp when this material style was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/materials/material-types

Create 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_idstringrequired

Request Body

category_uuidstring (uuid)required

UUID of the parent material category.

codestringrequired

Unique identifier for this material type (e.g., 'amalgam', 'composite_resin'). Immutable after creation.

default_colorstringrequired

Default hex color for rendering this material (e.g., '#C0C0C0' for silver).

default_opacitynumber

Default opacity from 0.0 to 1.0. Default 1.0.

default_patternstring

Default fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical. Default 'solid'.

display_orderinteger

Sort order for display in UI lists. Lower values appear first.

is_activeboolean

Whether this material type is active and available for use.

is_systemboolean

Whether this is a built-in system material type (true) or user-created (false).

material_familystring
namestringrequired

Display name (e.g., 'Amalgam', 'Composite Resin').

Responses

201Successful Response
categoryobject

Lightweight reference to a related entity — exposes UUID and optional name.

codestringrequired

Unique identifier for this material type (e.g., 'amalgam', 'composite_resin'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this material type was created.

default_colorstringrequired

Default hex color for rendering this material (e.g., '#C0C0C0' for silver).

default_opacitynumberrequired

Default opacity from 0.0 to 1.0. Default 1.0.

default_patternstringrequired

Default fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical. Default 'solid'.

display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this material type.

is_activebooleanrequired

Whether this material type is active and available for use.

is_systembooleanrequired

Whether this is a built-in system material type (true) or user-created (false).

material_familystring
namestringrequired

Display name (e.g., 'Amalgam', 'Composite Resin').

updated_atstring (date-time)required

Timestamp when this material type was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/materials/material-types/{type_uuid}/archive

Archive material type

Soft-delete a material type. Raises 404 if not found.

Parameters

Path Parameters
type_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
categoryobject

Lightweight reference to a related entity — exposes UUID and optional name.

codestringrequired

Unique identifier for this material type (e.g., 'amalgam', 'composite_resin'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this material type was created.

default_colorstringrequired

Default hex color for rendering this material (e.g., '#C0C0C0' for silver).

default_opacitynumberrequired

Default opacity from 0.0 to 1.0. Default 1.0.

default_patternstringrequired

Default fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical. Default 'solid'.

display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this material type.

is_activebooleanrequired

Whether this material type is active and available for use.

is_systembooleanrequired

Whether this is a built-in system material type (true) or user-created (false).

material_familystring
namestringrequired

Display name (e.g., 'Amalgam', 'Composite Resin').

updated_atstring (date-time)required

Timestamp when this material type was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
patch/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_uuidstringrequired
org_idstringrequired

Request Body

base_versionintegerrequired

Current version of the entity. Required for optimistic concurrency — the update is rejected if this doesn't match the server's version.

descriptionstring
display_orderinteger
is_activeboolean
namestring

Responses

200Successful Response
codestringrequired

Unique identifier for this material category (e.g., 'metal', 'ceramic'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this material category was created.

descriptionstring
display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this material category.

is_activebooleanrequired

Whether this material category is active and available for use.

is_systembooleanrequired

Whether this is a built-in system material category (true) or user-created (false).

namestringrequired

Display name (e.g., 'Metal Alloys', 'Ceramic').

updated_atstring (date-time)required

Timestamp when this material category was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
  }'
patch/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_uuidstringrequired
org_idstringrequired

Request Body

base_versionintegerrequired

Current version of the entity. Required for optimistic concurrency — the update is rejected if this doesn't match the server's version.

colorstring
opacitynumber
patternstring

Responses

200Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

colorstringrequired

Override hex color for this material in this profile.

created_atstring (date-time)required

Timestamp when this material style was created.

idstring (uuid)required

Unique identifier (UUID) of this material style override.

material_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

material_type_codestring
opacitynumberrequired

Override opacity from 0.0 to 1.0. Default 1.0.

patternstringrequired

Override fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.

updated_atstring (date-time)required

Timestamp when this material style was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
  }'
patch/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_uuidstringrequired
org_idstringrequired

Request Body

base_versionintegerrequired

Current 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_colorstring
default_opacitynumber
default_patternstring
display_orderinteger
is_activeboolean
material_familystring
namestring

Responses

200Successful Response
categoryobject

Lightweight reference to a related entity — exposes UUID and optional name.

codestringrequired

Unique identifier for this material type (e.g., 'amalgam', 'composite_resin'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this material type was created.

default_colorstringrequired

Default hex color for rendering this material (e.g., '#C0C0C0' for silver).

default_opacitynumberrequired

Default opacity from 0.0 to 1.0. Default 1.0.

default_patternstringrequired

Default fill pattern. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical. Default 'solid'.

display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this material type.

is_activebooleanrequired

Whether this material type is active and available for use.

is_systembooleanrequired

Whether this is a built-in system material type (true) or user-created (false).

material_familystring
namestringrequired

Display name (e.g., 'Amalgam', 'Composite Resin').

updated_atstring (date-time)required

Timestamp when this material type was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/paint-types

List 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_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page (1-100)

Default: 50

categorystring

Filter by clinical category (e.g., 'restoration', 'prosthetic')

is_activeboolean

Filter by active status

searchstring

Search by name or code (case-insensitive substring match)

Responses

200Successful Response
itemsobject[]required

List of paint type records.

totalintegerrequired

Total number of records matching the query (before pagination).

422Validation Error
detailobject[]
curl
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"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
categoryenumrequired

Clinical category. One of: restoration, prosthetic, endodontic, condition, surgical, periodontic, orthodontic, annotation.

annotationconditionendodonticorthodonticperiodonticprostheticrestorationsurgical
codestringrequired

Unique machine-readable identifier for this paint type (e.g., 'amalgam_mo'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this paint type was created.

display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this paint type.

is_activebooleanrequired

Whether this paint type is active and available for use.

is_systembooleanrequired

Whether this is a built-in system paint type (true) or user-created (false).

namestringrequired

Human-readable display name (e.g., 'Amalgam – MO').

render_categoryobject

Lightweight reference to a related entity — exposes UUID and optional name.

render_scopeenumrequired

Where 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_tooth
renderer_primitivestringrequired

Name of the renderer primitive that draws this paint type.

renderer_primitive_refobject

Lightweight reference to a related entity — exposes UUID and optional name.

replacement_groupstring
shade_variantenumrequired

Base color shade. One of: dark, light, gold, neutral. Defaults to 'dark'.

darkgoldlightneutral
updated_atstring (date-time)required

Timestamp when this paint type was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

z_layerintegerrequired

Z-index layer for rendering order. Higher values render on top. Default 0.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/paint-types

Create 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_idstringrequired

Request Body

categoryenumrequired

Clinical category. One of: restoration, prosthetic, endodontic, condition, surgical, periodontic, orthodontic, annotation.

annotationconditionendodonticorthodonticperiodonticprostheticrestorationsurgical
codestringrequired

Unique machine-readable identifier for this paint type (e.g., 'amalgam_mo'). Immutable after creation.

display_orderinteger

Sort order for display in UI lists. Lower values appear first.

is_activeboolean

Whether this paint type is active and available for use.

is_systemboolean

Whether this is a built-in system paint type (true) or user-created (false).

namestringrequired

Human-readable display name (e.g., 'Amalgam – MO').

render_category_uuidstring (uuid)
render_scopeenumrequired

Where 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_tooth
renderer_primitivestringrequired

Name of the renderer primitive that draws this paint type.

renderer_primitive_uuidstring (uuid)
replacement_groupstring
shade_variantenum

Base color shade. One of: dark, light, gold, neutral. Defaults to 'dark'.

darkgoldlightneutral
z_layerinteger

Z-index layer for rendering order. Higher values render on top. Default 0.

Responses

201Successful Response
categoryenumrequired

Clinical category. One of: restoration, prosthetic, endodontic, condition, surgical, periodontic, orthodontic, annotation.

annotationconditionendodonticorthodonticperiodonticprostheticrestorationsurgical
codestringrequired

Unique machine-readable identifier for this paint type (e.g., 'amalgam_mo'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this paint type was created.

display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this paint type.

is_activebooleanrequired

Whether this paint type is active and available for use.

is_systembooleanrequired

Whether this is a built-in system paint type (true) or user-created (false).

namestringrequired

Human-readable display name (e.g., 'Amalgam – MO').

render_categoryobject

Lightweight reference to a related entity — exposes UUID and optional name.

render_scopeenumrequired

Where 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_tooth
renderer_primitivestringrequired

Name of the renderer primitive that draws this paint type.

renderer_primitive_refobject

Lightweight reference to a related entity — exposes UUID and optional name.

replacement_groupstring
shade_variantenumrequired

Base color shade. One of: dark, light, gold, neutral. Defaults to 'dark'.

darkgoldlightneutral
updated_atstring (date-time)required

Timestamp when this paint type was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

z_layerintegerrequired

Z-index layer for rendering order. Higher values render on top. Default 0.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/paint-types/{paint_type_uuid}/archive

Archive 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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
categoryenumrequired

Clinical category. One of: restoration, prosthetic, endodontic, condition, surgical, periodontic, orthodontic, annotation.

annotationconditionendodonticorthodonticperiodonticprostheticrestorationsurgical
codestringrequired

Unique machine-readable identifier for this paint type (e.g., 'amalgam_mo'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this paint type was created.

display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this paint type.

is_activebooleanrequired

Whether this paint type is active and available for use.

is_systembooleanrequired

Whether this is a built-in system paint type (true) or user-created (false).

namestringrequired

Human-readable display name (e.g., 'Amalgam – MO').

render_categoryobject

Lightweight reference to a related entity — exposes UUID and optional name.

render_scopeenumrequired

Where 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_tooth
renderer_primitivestringrequired

Name of the renderer primitive that draws this paint type.

renderer_primitive_refobject

Lightweight reference to a related entity — exposes UUID and optional name.

replacement_groupstring
shade_variantenumrequired

Base color shade. One of: dark, light, gold, neutral. Defaults to 'dark'.

darkgoldlightneutral
updated_atstring (date-time)required

Timestamp when this paint type was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

z_layerintegerrequired

Z-index layer for rendering order. Higher values render on top. Default 0.

422Validation Error
detailobject[]
curl
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"
patch/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_uuidstringrequired
org_idstringrequired

Request Body

base_versionintegerrequired

Current version of the entity. Required for optimistic concurrency — the update is rejected if this doesn't match the server's version.

categoryenum
annotationconditionendodonticorthodonticperiodonticprostheticrestorationsurgical
display_orderinteger
is_activeboolean
is_systemboolean
namestring
render_category_uuidstring (uuid)
render_scopeenum
arch_objectarch_overlayattachment_pointcanalcrowngingival_marginocclusal_detailquadrant_overlayrootsextant_overlayspansurfacesymbolwhole_tooth
renderer_primitivestring
renderer_primitive_uuidstring (uuid)
replacement_groupstring
shade_variantenum
darkgoldlightneutral
z_layerinteger

Responses

200Successful Response
categoryenumrequired

Clinical category. One of: restoration, prosthetic, endodontic, condition, surgical, periodontic, orthodontic, annotation.

annotationconditionendodonticorthodonticperiodonticprostheticrestorationsurgical
codestringrequired

Unique machine-readable identifier for this paint type (e.g., 'amalgam_mo'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this paint type was created.

display_orderintegerrequired

Sort order for display in UI lists. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this paint type.

is_activebooleanrequired

Whether this paint type is active and available for use.

is_systembooleanrequired

Whether this is a built-in system paint type (true) or user-created (false).

namestringrequired

Human-readable display name (e.g., 'Amalgam – MO').

render_categoryobject

Lightweight reference to a related entity — exposes UUID and optional name.

render_scopeenumrequired

Where 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_tooth
renderer_primitivestringrequired

Name of the renderer primitive that draws this paint type.

renderer_primitive_refobject

Lightweight reference to a related entity — exposes UUID and optional name.

replacement_groupstring
shade_variantenumrequired

Base color shade. One of: dark, light, gold, neutral. Defaults to 'dark'.

darkgoldlightneutral
updated_atstring (date-time)required

Timestamp when this paint type was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

z_layerintegerrequired

Z-index layer for rendering order. Higher values render on top. Default 0.

422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/procedure-rules

List 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_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page

Default: 100

procedure_codestring

Filter by CDT procedure code (exact match)

code_prefixstring

Filter by code prefix (e.g., 'D0' for diagnostic, 'D2' for restorative)

searchstring

Search by procedure code (case-insensitive partial match)

treatment_areastring

Filter by treatment area (surface, tooth, quadrant, sextant, arch, mouth)

Responses

200Successful Response
itemsobject[]required

List of procedure rules.

totalintegerrequired

Total number of procedure rules matching the query.

422Validation Error
detailobject[]
curl
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"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
allowed_slot_labelsstring[]
archstring
chart_actionstring
created_atstring (date-time)required

Timestamp when the rule was created.

idstring (uuid)required

Unique identifier of the procedure rule.

material_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

material_type_codestring
max_surfacesinteger
min_surfacesinteger
paint_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

procedure_codestringrequired

CDT procedure code this rule applies to (e.g., 'D2140', 'D6240', 'D7140').

slot_type_filterstring
span_rolestring
span_type_codestring
tooth_typestring
treatment_areastringrequired

Required anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth.

updated_atstring (date-time)required

Timestamp when the rule was last updated.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/procedure-rules

Create 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_idstringrequired

Request Body

allowed_slot_labelsstring[]
archstring
chart_actionstring
material_type_uuidstring (uuid)
max_surfacesinteger
min_surfacesinteger
paint_type_uuidstring (uuid)
procedure_codestringrequired

CDT procedure code this rule applies to (e.g., 'D2140', 'D6240', 'D7140').

slot_type_filterstring
span_rolestring
span_type_codestring
tooth_typestring
treatment_areastringrequired

Required anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth.

Responses

201Successful Response
allowed_slot_labelsstring[]
archstring
chart_actionstring
created_atstring (date-time)required

Timestamp when the rule was created.

idstring (uuid)required

Unique identifier of the procedure rule.

material_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

material_type_codestring
max_surfacesinteger
min_surfacesinteger
paint_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

procedure_codestringrequired

CDT procedure code this rule applies to (e.g., 'D2140', 'D6240', 'D7140').

slot_type_filterstring
span_rolestring
span_type_codestring
tooth_typestring
treatment_areastringrequired

Required anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth.

updated_atstring (date-time)required

Timestamp when the rule was last updated.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/procedure-rules/{rule_uuid}/archive

Archive procedure rule

Soft-delete a procedure rule. Raises 404 if not found.

Parameters

Path Parameters
rule_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
allowed_slot_labelsstring[]
archstring
chart_actionstring
created_atstring (date-time)required

Timestamp when the rule was created.

idstring (uuid)required

Unique identifier of the procedure rule.

material_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

material_type_codestring
max_surfacesinteger
min_surfacesinteger
paint_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

procedure_codestringrequired

CDT procedure code this rule applies to (e.g., 'D2140', 'D6240', 'D7140').

slot_type_filterstring
span_rolestring
span_type_codestring
tooth_typestring
treatment_areastringrequired

Required anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth.

updated_atstring (date-time)required

Timestamp when the rule was last updated.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
patch/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_uuidstringrequired
org_idstringrequired

Request Body

allowed_slot_labelsstring[]
archstring
base_versionintegerrequired

Current version of the rule for optimistic concurrency control.

chart_actionstring
material_type_uuidstring (uuid)
max_surfacesinteger
min_surfacesinteger
paint_type_uuidstring (uuid)
procedure_codestring
slot_type_filterstring
span_rolestring
span_type_codestring
tooth_typestring
treatment_areastring

Responses

200Successful Response
allowed_slot_labelsstring[]
archstring
chart_actionstring
created_atstring (date-time)required

Timestamp when the rule was created.

idstring (uuid)required

Unique identifier of the procedure rule.

material_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

material_type_codestring
max_surfacesinteger
min_surfacesinteger
paint_typeobject

Lightweight reference to a related entity — exposes UUID and optional name.

procedure_codestringrequired

CDT procedure code this rule applies to (e.g., 'D2140', 'D6240', 'D7140').

slot_type_filterstring
span_rolestring
span_type_codestring
tooth_typestring
treatment_areastringrequired

Required anatomical scope. One of: surface, tooth, quadrant, sextant, arch, mouth.

updated_atstring (date-time)required

Timestamp when the rule was last updated.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/profiles

List 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_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page

Default: 50

is_activeboolean

Filter by active status

searchstring

Search by name or code (case-insensitive substring match)

Responses

200Successful Response
itemsobject[]required

List of chart profile records.

totalintegerrequired

Total number of records matching the query.

422Validation Error
detailobject[]
curl
curl -X GET "https://api.example.com/api/v1/{org_id}/odontogram/profiles" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
codestringrequired

Unique machine-readable identifier (e.g., 'default', 'pediatric'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this chart profile was created.

default_chart_modestringrequired

Default charting view. One of: complete, existing, plan.

default_dentitionstringrequired

Default dentition stage. One of: permanent, primary, mixed.

default_numberingstringrequired

Default tooth numbering convention. One of: universal, fdi, palmer.

descriptionstring
display_orderintegerrequired

Sort order for display in UI. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this chart profile.

is_activebooleanrequired

Whether this profile is active and available for selection.

is_defaultbooleanrequired

Whether this is the org-wide default profile. Only one profile can be default.

is_systembooleanrequired

Whether this is a built-in system profile (true) or user-created (false).

namestringrequired

Human-readable profile name (e.g., 'Default Profile', 'Pediatric Profile').

updated_atstring (date-time)required

Timestamp when this chart profile was last updated.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/assignments

List 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_uuidstringrequired
org_idstringrequired
Query Parameters
assignment_typestring

Filter by assignment type (location, provider, user)

pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page

Default: 50

Responses

200Successful Response
itemsobject[]required

List of profile assignment records.

totalintegerrequired

Total number of assignments matching the query.

422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/profiles/resolve

Resolve 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_idstringrequired
Query Parameters
user_uuidstring

UUID of the user to check for user-level profile assignment.

provider_uuidstring

UUID of the provider to check for provider-level profile assignment.

location_uuidstring

UUID of the location to check for location-level profile assignment.

Responses

200Successful Response
codestringrequired

Unique machine-readable identifier (e.g., 'default', 'pediatric'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this chart profile was created.

default_chart_modestringrequired

Default charting view. One of: complete, existing, plan.

default_dentitionstringrequired

Default dentition stage. One of: permanent, primary, mixed.

default_numberingstringrequired

Default tooth numbering convention. One of: universal, fdi, palmer.

descriptionstring
display_orderintegerrequired

Sort order for display in UI. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this chart profile.

is_activebooleanrequired

Whether this profile is active and available for selection.

is_defaultbooleanrequired

Whether this is the org-wide default profile. Only one profile can be default.

is_systembooleanrequired

Whether this is a built-in system profile (true) or user-created (false).

namestringrequired

Human-readable profile name (e.g., 'Default Profile', 'Pediatric Profile').

updated_atstring (date-time)required

Timestamp when this chart profile was last updated.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/profiles

Create 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_idstringrequired

Request Body

codestringrequired

Unique machine-readable identifier (e.g., 'default', 'pediatric'). Immutable after creation.

default_chart_modestring

Default charting view. One of: complete, existing, plan.

default_dentitionstring

Default dentition stage. One of: permanent, primary, mixed.

default_numberingstring

Default tooth numbering convention. One of: universal, fdi, palmer.

descriptionstring
display_orderinteger

Sort order for display in UI. Lower values appear first.

is_activeboolean

Whether this profile is active and available for selection.

is_defaultboolean

Whether this is the org-wide default profile. Only one profile can be default.

is_systemboolean

Whether this is a built-in system profile (true) or user-created (false).

namestringrequired

Human-readable profile name (e.g., 'Default Profile', 'Pediatric Profile').

Responses

201Successful Response
codestringrequired

Unique machine-readable identifier (e.g., 'default', 'pediatric'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this chart profile was created.

default_chart_modestringrequired

Default charting view. One of: complete, existing, plan.

default_dentitionstringrequired

Default dentition stage. One of: permanent, primary, mixed.

default_numberingstringrequired

Default tooth numbering convention. One of: universal, fdi, palmer.

descriptionstring
display_orderintegerrequired

Sort order for display in UI. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this chart profile.

is_activebooleanrequired

Whether this profile is active and available for selection.

is_defaultbooleanrequired

Whether this is the org-wide default profile. Only one profile can be default.

is_systembooleanrequired

Whether this is a built-in system profile (true) or user-created (false).

namestringrequired

Human-readable profile name (e.g., 'Default Profile', 'Pediatric Profile').

updated_atstring (date-time)required

Timestamp when this chart profile was last updated.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/archive

Archive chart profile

Soft-delete a chart profile. Raises 404 if not found. Cannot archive the default profile.

Parameters

Path Parameters
profile_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
codestringrequired

Unique machine-readable identifier (e.g., 'default', 'pediatric'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this chart profile was created.

default_chart_modestringrequired

Default charting view. One of: complete, existing, plan.

default_dentitionstringrequired

Default dentition stage. One of: permanent, primary, mixed.

default_numberingstringrequired

Default tooth numbering convention. One of: universal, fdi, palmer.

descriptionstring
display_orderintegerrequired

Sort order for display in UI. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this chart profile.

is_activebooleanrequired

Whether this profile is active and available for selection.

is_defaultbooleanrequired

Whether this is the org-wide default profile. Only one profile can be default.

is_systembooleanrequired

Whether this is a built-in system profile (true) or user-created (false).

namestringrequired

Human-readable profile name (e.g., 'Default Profile', 'Pediatric Profile').

updated_atstring (date-time)required

Timestamp when this chart profile was last updated.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/assignments

Create 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_uuidstringrequired
org_idstringrequired

Request Body

assignment_typestringrequired

Target 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

201Successful Response
assignment_typestringrequired

Target entity type. One of: location, provider, user.

chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

created_atstring (date-time)required

Timestamp when this assignment was created.

idstring (uuid)required

Unique identifier (UUID) of this assignment.

is_activebooleanrequired

Whether this assignment is currently active.

location_uuidstring (uuid)
provider_uuidstring (uuid)
updated_atstring (date-time)required

Timestamp when this assignment was last updated.

user_uuidstring (uuid)
versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/assignments/{assignment_uuid}/archive

Archive profile assignment

Soft-delete a profile assignment. Raises 404 if the profile or assignment does not exist.

Parameters

Path Parameters
profile_uuidstringrequired
assignment_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
assignment_typestringrequired

Target entity type. One of: location, provider, user.

chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

created_atstring (date-time)required

Timestamp when this assignment was created.

idstring (uuid)required

Unique identifier (UUID) of this assignment.

is_activebooleanrequired

Whether this assignment is currently active.

location_uuidstring (uuid)
provider_uuidstring (uuid)
updated_atstring (date-time)required

Timestamp when this assignment was last updated.

user_uuidstring (uuid)
versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
patch/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_uuidstringrequired
org_idstringrequired

Request Body

base_versionintegerrequired

Current version of the entity. Required for optimistic concurrency — rejected if stale.

default_chart_modestring
default_dentitionstring
default_numberingstring
descriptionstring
display_orderinteger
is_activeboolean
is_defaultboolean
is_systemboolean
namestring

Responses

200Successful Response
codestringrequired

Unique machine-readable identifier (e.g., 'default', 'pediatric'). Immutable after creation.

created_atstring (date-time)required

Timestamp when this chart profile was created.

default_chart_modestringrequired

Default charting view. One of: complete, existing, plan.

default_dentitionstringrequired

Default dentition stage. One of: permanent, primary, mixed.

default_numberingstringrequired

Default tooth numbering convention. One of: universal, fdi, palmer.

descriptionstring
display_orderintegerrequired

Sort order for display in UI. Lower values appear first.

idstring (uuid)required

Unique identifier (UUID) of this chart profile.

is_activebooleanrequired

Whether this profile is active and available for selection.

is_defaultbooleanrequired

Whether this is the org-wide default profile. Only one profile can be default.

is_systembooleanrequired

Whether this is a built-in system profile (true) or user-created (false).

namestringrequired

Human-readable profile name (e.g., 'Default Profile', 'Pediatric Profile').

updated_atstring (date-time)required

Timestamp when this chart profile was last updated.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/condition-types

List 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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
itemsobject[]required

List of condition type override records.

totalintegerrequired

Total number of condition type overrides.

422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/interaction-modes

List 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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
itemsobject[]required

List of interaction mode association records.

totalintegerrequired

Total number of interaction mode associations.

422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/paint-types

List 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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
itemsobject[]required

List of paint type override records for this profile.

totalintegerrequired

Total number of paint type overrides for this profile.

422Validation Error
detailobject[]
curl
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"
put/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/condition-types

Set 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_uuidstringrequired
org_idstringrequired

Request Body

itemsobject[]required

List of condition type visibility and ordering overrides.

Responses

200Successful Response
itemsobject[]required

List of condition type override records.

totalintegerrequired

Total number of condition type overrides.

422Validation Error
detailobject[]
curl
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": []
  }'
put/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/interaction-modes

Set 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_uuidstringrequired
org_idstringrequired

Request Body

itemsobject[]required

List of interaction mode associations to set for the profile.

Responses

200Successful Response
itemsobject[]required

List of interaction mode association records.

totalintegerrequired

Total number of interaction mode associations.

422Validation Error
detailobject[]
curl
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": []
  }'
put/api/v1/{org_id}/odontogram/profiles/{profile_uuid}/paint-types

Set 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_uuidstringrequired
org_idstringrequired

Request Body

itemsobject[]required

List of paint type visibility and ordering overrides to apply to the profile.

Responses

200Successful Response
itemsobject[]required

List of paint type override records for this profile.

totalintegerrequired

Total number of paint type overrides for this profile.

422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/reference/anatomy-groups

List 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_idstringrequired

Responses

200Successful Response
422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/reference/detailed-surfaces

List 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_idstringrequired

Responses

200Successful Response
422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/reference/internal-anatomy

List 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_idstringrequired

Responses

200Successful Response
422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/reference/primary-tooth-reference

List 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_idstringrequired

Responses

200Successful Response
422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/reference/render-categories

List 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_idstringrequired

Responses

200Successful Response
422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/reference/renderer-primitives

List 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_idstringrequired

Responses

200Successful Response
422Validation Error
detailobject[]
curl
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"
get/api/v1/{org_id}/odontogram/reference/tooth-reference

List 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_idstringrequired

Responses

200Successful Response
422Validation Error
detailobject[]
curl
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

post/api/v1/{org_id}/odontogram/reset-and-reseed

Reset 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_idstringrequired

Responses

200Successful Response
422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/seed-defaults

Seed 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_idstringrequired

Responses

200Successful Response
422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/span-definitions

List span definitions

List span definitions with optional filtering by span type, active status, or search. Results are paginated.

Parameters

Path Parameters
org_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page

Default: 50

span_typestring

Filter by span type (bridge, splint, space_maintainer, arch_wire, rpd_framework, etc.)

is_activeboolean

Filter by active status

searchstring

Search by name or code

Responses

200Successful Response
itemsobject[]required

List of span definitions.

totalintegerrequired

Total number of span definitions matching the query.

422Validation Error
detailobject[]
curl
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"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
codestringrequired

Unique machine-readable identifier (e.g., 'fixed_bridge_3u', 'rpd_framework'). Immutable after creation.

connection_stylestringrequired

Visual connector between teeth. One of: bar, wire, plate, clasp_and_bar, continuous, rigid, bonded, removable.

contiguitystringrequired

Whether teeth must be adjacent. One of: contiguous, non_contiguous.

created_atstring (date-time)required

Timestamp when the span definition was created.

geometry_rulesobject
idstring (uuid)required

Unique identifier of the span definition.

is_activebooleanrequired

Whether this span definition is currently active and available.

is_systembooleanrequired

Whether this is a system-defined span definition.

max_teethinteger
member_rolesobjectrequired

JSON 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_teethintegerrequired

Minimum number of teeth required in this span. Default 2.

namestringrequired

Display name (e.g., '3-Unit Fixed Bridge', 'RPD Metal Framework').

render_categoryobject

Lightweight reference to a related entity — exposes UUID and optional name.

renderer_primitive_refobject

Lightweight reference to a related entity — exposes UUID and optional name.

requires_same_archbooleanrequired

Whether all teeth in the span must be in the same arch. Default true.

span_typestringrequired

Type 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)required

Timestamp when the span definition was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/span-definitions

Create 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_idstringrequired

Request Body

codestringrequired

Unique machine-readable identifier (e.g., 'fixed_bridge_3u', 'rpd_framework'). Immutable after creation.

connection_stylestringrequired

Visual connector between teeth. One of: bar, wire, plate, clasp_and_bar, continuous, rigid, bonded, removable.

contiguitystring

Whether teeth must be adjacent. One of: contiguous, non_contiguous.

geometry_rulesobject
is_activeboolean

Whether this span definition is currently active and available.

is_systemboolean

Whether this is a system-defined span definition.

max_teethinteger
member_rolesobjectrequired

JSON 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_teethinteger

Minimum number of teeth required in this span. Default 2.

namestringrequired

Display name (e.g., '3-Unit Fixed Bridge', 'RPD Metal Framework').

render_category_uuidstring (uuid)
renderer_primitive_uuidstring (uuid)
requires_same_archboolean

Whether all teeth in the span must be in the same arch. Default true.

span_typestringrequired

Type 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

201Successful Response
codestringrequired

Unique machine-readable identifier (e.g., 'fixed_bridge_3u', 'rpd_framework'). Immutable after creation.

connection_stylestringrequired

Visual connector between teeth. One of: bar, wire, plate, clasp_and_bar, continuous, rigid, bonded, removable.

contiguitystringrequired

Whether teeth must be adjacent. One of: contiguous, non_contiguous.

created_atstring (date-time)required

Timestamp when the span definition was created.

geometry_rulesobject
idstring (uuid)required

Unique identifier of the span definition.

is_activebooleanrequired

Whether this span definition is currently active and available.

is_systembooleanrequired

Whether this is a system-defined span definition.

max_teethinteger
member_rolesobjectrequired

JSON 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_teethintegerrequired

Minimum number of teeth required in this span. Default 2.

namestringrequired

Display name (e.g., '3-Unit Fixed Bridge', 'RPD Metal Framework').

render_categoryobject

Lightweight reference to a related entity — exposes UUID and optional name.

renderer_primitive_refobject

Lightweight reference to a related entity — exposes UUID and optional name.

requires_same_archbooleanrequired

Whether all teeth in the span must be in the same arch. Default true.

span_typestringrequired

Type 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)required

Timestamp when the span definition was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
  }'
post/api/v1/{org_id}/odontogram/span-definitions/{span_definition_uuid}/archive

Archive span definition

Soft-delete a span definition. Raises 404 if not found.

Parameters

Path Parameters
span_definition_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
codestringrequired

Unique machine-readable identifier (e.g., 'fixed_bridge_3u', 'rpd_framework'). Immutable after creation.

connection_stylestringrequired

Visual connector between teeth. One of: bar, wire, plate, clasp_and_bar, continuous, rigid, bonded, removable.

contiguitystringrequired

Whether teeth must be adjacent. One of: contiguous, non_contiguous.

created_atstring (date-time)required

Timestamp when the span definition was created.

geometry_rulesobject
idstring (uuid)required

Unique identifier of the span definition.

is_activebooleanrequired

Whether this span definition is currently active and available.

is_systembooleanrequired

Whether this is a system-defined span definition.

max_teethinteger
member_rolesobjectrequired

JSON 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_teethintegerrequired

Minimum number of teeth required in this span. Default 2.

namestringrequired

Display name (e.g., '3-Unit Fixed Bridge', 'RPD Metal Framework').

render_categoryobject

Lightweight reference to a related entity — exposes UUID and optional name.

renderer_primitive_refobject

Lightweight reference to a related entity — exposes UUID and optional name.

requires_same_archbooleanrequired

Whether all teeth in the span must be in the same arch. Default true.

span_typestringrequired

Type 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)required

Timestamp when the span definition was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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"
patch/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_uuidstringrequired
org_idstringrequired

Request Body

base_versionintegerrequired

Current version of the span definition for optimistic concurrency control.

connection_stylestring
contiguitystring
geometry_rulesobject
is_activeboolean
is_systemboolean
max_teethinteger
member_rolesobject
min_teethinteger
namestring
render_category_uuidstring (uuid)
renderer_primitive_uuidstring (uuid)
requires_same_archboolean
span_typestring

Responses

200Successful Response
codestringrequired

Unique machine-readable identifier (e.g., 'fixed_bridge_3u', 'rpd_framework'). Immutable after creation.

connection_stylestringrequired

Visual connector between teeth. One of: bar, wire, plate, clasp_and_bar, continuous, rigid, bonded, removable.

contiguitystringrequired

Whether teeth must be adjacent. One of: contiguous, non_contiguous.

created_atstring (date-time)required

Timestamp when the span definition was created.

geometry_rulesobject
idstring (uuid)required

Unique identifier of the span definition.

is_activebooleanrequired

Whether this span definition is currently active and available.

is_systembooleanrequired

Whether this is a system-defined span definition.

max_teethinteger
member_rolesobjectrequired

JSON 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_teethintegerrequired

Minimum number of teeth required in this span. Default 2.

namestringrequired

Display name (e.g., '3-Unit Fixed Bridge', 'RPD Metal Framework').

render_categoryobject

Lightweight reference to a related entity — exposes UUID and optional name.

renderer_primitive_refobject

Lightweight reference to a related entity — exposes UUID and optional name.

requires_same_archbooleanrequired

Whether all teeth in the span must be in the same arch. Default true.

span_typestringrequired

Type 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)required

Timestamp when the span definition was last modified.

versionintegerrequired

Optimistic concurrency version number.

422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/status-colors

List status colors

List status color mappings, optionally filtered by chart profile. Results are paginated.

Parameters

Path Parameters
org_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page (1-100)

Default: 50

profile_uuidstring

Filter by chart profile UUID. Null returns org-wide defaults.

Responses

200Successful Response
itemsobject[]required

List of status color records.

totalintegerrequired

Total number of records matching the query (before pagination).

422Validation Error
detailobject[]
curl
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"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

colorstringrequired

Hex color code for rendering this status (e.g., '#0000FF' for blue).

created_atstring (date-time)required

Timestamp when this status color was created.

idstring (uuid)required

Unique identifier (UUID) of this status color mapping.

patternenumrequired

Fill pattern for rendering. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.

brushedcrosshatcheddottedgranularhatchedmetallicoutlinesolidspeckledstippledtranslucentverticalwoven
statusstringrequired

The procedure/condition status this color configuration applies to (e.g., 'existing', 'planned', 'completed').

transparencynumber
updated_atstring (date-time)required

Timestamp when this status color was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/status-colors

Create 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_idstringrequired

Request Body

chart_profile_uuidstring (uuid)
colorstringrequired

Hex color code for rendering this status (e.g., '#0000FF' for blue).

patternenum

Fill pattern for rendering. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical. Default 'solid'.

brushedcrosshatcheddottedgranularhatchedmetallicoutlinesolidspeckledstippledtranslucentverticalwoven
statusstringrequired

The procedure/condition status this color configuration applies to (e.g., 'existing', 'planned', 'completed').

transparencynumber

Responses

201Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

colorstringrequired

Hex color code for rendering this status (e.g., '#0000FF' for blue).

created_atstring (date-time)required

Timestamp when this status color was created.

idstring (uuid)required

Unique identifier (UUID) of this status color mapping.

patternenumrequired

Fill pattern for rendering. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.

brushedcrosshatcheddottedgranularhatchedmetallicoutlinesolidspeckledstippledtranslucentverticalwoven
statusstringrequired

The procedure/condition status this color configuration applies to (e.g., 'existing', 'planned', 'completed').

transparencynumber
updated_atstring (date-time)required

Timestamp when this status color was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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
  }'
post/api/v1/{org_id}/odontogram/status-colors/{status_color_uuid}/archive

Archive status color

Soft-delete a status color mapping. Raises 404 if not found.

Parameters

Path Parameters
status_color_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

colorstringrequired

Hex color code for rendering this status (e.g., '#0000FF' for blue).

created_atstring (date-time)required

Timestamp when this status color was created.

idstring (uuid)required

Unique identifier (UUID) of this status color mapping.

patternenumrequired

Fill pattern for rendering. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.

brushedcrosshatcheddottedgranularhatchedmetallicoutlinesolidspeckledstippledtranslucentverticalwoven
statusstringrequired

The procedure/condition status this color configuration applies to (e.g., 'existing', 'planned', 'completed').

transparencynumber
updated_atstring (date-time)required

Timestamp when this status color was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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"
patch/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_uuidstringrequired
org_idstringrequired

Request Body

base_versionintegerrequired

Current version of the entity. Required for optimistic concurrency — the update is rejected if this doesn't match the server's version.

colorstring
patternenum
brushedcrosshatcheddottedgranularhatchedmetallicoutlinesolidspeckledstippledtranslucentverticalwoven
transparencynumber

Responses

200Successful Response
chart_profileobject

Lightweight reference to a related entity — exposes UUID and optional name.

colorstringrequired

Hex color code for rendering this status (e.g., '#0000FF' for blue).

created_atstring (date-time)required

Timestamp when this status color was created.

idstring (uuid)required

Unique identifier (UUID) of this status color mapping.

patternenumrequired

Fill pattern for rendering. One of: solid, hatched, crosshatched, dotted, outline, stippled, metallic, speckled, brushed, granular, translucent, woven, vertical.

brushedcrosshatcheddottedgranularhatchedmetallicoutlinesolidspeckledstippledtranslucentverticalwoven
statusstringrequired

The procedure/condition status this color configuration applies to (e.g., 'existing', 'planned', 'completed').

transparencynumber
updated_atstring (date-time)required

Timestamp when this status color was last modified.

versionintegerrequired

Optimistic concurrency version number. Must be sent as base_version on updates.

422Validation Error
detailobject[]
curl
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

get/api/v1/{org_id}/odontogram/tooth-slots

List 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_idstringrequired
Query Parameters
pageinteger

Page number (1-based)

Default: 1

page_sizeinteger

Number of records per page (1-200)

Default: 100

slot_typestring

Filter by slot type (permanent, primary, supernumerary, implant_site)

archstring

Filter by dental arch (maxillary, mandibular)

quadrantstring

Filter by quadrant (e.g., upper_right, upper_left, lower_left, lower_right)

Responses

200Successful Response
itemsobject[]required

List of chart tooth slot records.

totalintegerrequired

Total number of records matching the query.

422Validation Error
detailobject[]
curl
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"
get/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_uuidstringrequired
org_idstringrequired

Responses

200Successful Response
archstringrequired

Dental arch. One of: maxillary, mandibular.

created_atstring (date-time)required

Timestamp when this tooth slot was created.

grid_columnintegerrequired

Column position in the visual tooth grid.

grid_rowintegerrequired

Row position in the visual tooth grid.

idstring (uuid)required

Unique identifier (UUID) of this tooth slot.

is_defaultbooleanrequired

Whether this slot is part of the standard default grid layout.

parent_slot_indexinteger
primary_reference_idstring
quadrantstringrequired

Dental quadrant. One of: upper_right, upper_left, lower_left, lower_right.

slot_indexintegerrequired

Positional index of this slot in the charting grid (0-based).

slot_labelstringrequired

Display label for this slot (e.g., '1', 'A', 'S1').

slot_typestringrequired

Type of tooth slot. One of: permanent, primary, supernumerary, implant_site.

tooth_reference_idinteger
422Validation Error
detailobject[]
curl
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"
post/api/v1/{org_id}/odontogram/tooth-slots

Create 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_idstringrequired

Request Body

archstringrequired

Dental arch. One of: maxillary, mandibular.

grid_columnintegerrequired

Column position in the visual tooth grid.

grid_rowinteger

Row position in the visual tooth grid. Default 0.

is_defaultboolean

Whether this slot is part of the standard default grid layout.

parent_slot_indexinteger
primary_reference_idstring
quadrantstringrequired

Dental quadrant. One of: upper_right, upper_left, lower_left, lower_right.

slot_indexintegerrequired

Positional index of this slot in the charting grid (0-based).

slot_labelstringrequired

Display label for this slot (e.g., '1', 'A', 'S1').

slot_typestringrequired

Type of tooth slot. One of: permanent, primary, supernumerary, implant_site.

tooth_reference_idinteger

Responses

201Successful Response
archstringrequired

Dental arch. One of: maxillary, mandibular.

created_atstring (date-time)required

Timestamp when this tooth slot was created.

grid_columnintegerrequired

Column position in the visual tooth grid.

grid_rowintegerrequired

Row position in the visual tooth grid.

idstring (uuid)required

Unique identifier (UUID) of this tooth slot.

is_defaultbooleanrequired

Whether this slot is part of the standard default grid layout.

parent_slot_indexinteger
primary_reference_idstring
quadrantstringrequired

Dental quadrant. One of: upper_right, upper_left, lower_left, lower_right.

slot_indexintegerrequired

Positional index of this slot in the charting grid (0-based).

slot_labelstringrequired

Display label for this slot (e.g., '1', 'A', 'S1').

slot_typestringrequired

Type of tooth slot. One of: permanent, primary, supernumerary, implant_site.

tooth_reference_idinteger
422Validation Error
detailobject[]
curl
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"
  }'
patch/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_uuidstringrequired
org_idstringrequired

Request Body

archstring
grid_columninteger
grid_rowinteger
is_defaultboolean
parent_slot_indexinteger
quadrantstring
slot_labelstring
slot_typestring

Responses

200Successful Response
archstringrequired

Dental arch. One of: maxillary, mandibular.

created_atstring (date-time)required

Timestamp when this tooth slot was created.

grid_columnintegerrequired

Column position in the visual tooth grid.

grid_rowintegerrequired

Row position in the visual tooth grid.

idstring (uuid)required

Unique identifier (UUID) of this tooth slot.

is_defaultbooleanrequired

Whether this slot is part of the standard default grid layout.

parent_slot_indexinteger
primary_reference_idstring
quadrantstringrequired

Dental quadrant. One of: upper_right, upper_left, lower_left, lower_right.

slot_indexintegerrequired

Positional index of this slot in the charting grid (0-based).

slot_labelstringrequired

Display label for this slot (e.g., '1', 'A', 'S1').

slot_typestringrequired

Type of tooth slot. One of: permanent, primary, supernumerary, implant_site.

tooth_reference_idinteger
422Validation Error
detailobject[]
curl
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
  }'