curl "https://api.nevatal.com/api/v1/patients/pat_abc123/odontogram" \
-H "Authorization: Bearer nvtl_your_api_key"
{
"success": true,
"data": {
"id": "odo_001",
"patientId": "pat_abc123",
"dentitionMode": "mixed",
"temporaryTeeth": [13, 14, 15, 23, 24, 25, 33, 34, 35, 43, 44, 45],
"findings": [
{
"id": "fnd_001",
"toothFdi": 36,
"isTemporaryTooth": false,
"scope": "surface",
"surface": "occlusal",
"catalogFindingId": "caries",
"plannedItems": [
{ "id": "pi_1", "type": "custom", "name": "Resina compuesta", "quantity": 1, "unitPrice": 180000, "subtotal": 180000 }
],
"subtotal": 180000,
"evolution": "pending"
}
],
"estimate": { "findingCount": 1, "total": 180000, "paid": 0, "due": 180000 },
"signature": { "status": "none" },
"version": 3
}
}
Odontogram
Get Patient Odontogram
The patient’s living dental chart — findings, treatment estimate and signature state
GET
/
api
/
v1
/
patients
/
{patientId}
/
odontogram
curl "https://api.nevatal.com/api/v1/patients/pat_abc123/odontogram" \
-H "Authorization: Bearer nvtl_your_api_key"
{
"success": true,
"data": {
"id": "odo_001",
"patientId": "pat_abc123",
"dentitionMode": "mixed",
"temporaryTeeth": [13, 14, 15, 23, 24, 25, 33, 34, 35, 43, 44, 45],
"findings": [
{
"id": "fnd_001",
"toothFdi": 36,
"isTemporaryTooth": false,
"scope": "surface",
"surface": "occlusal",
"catalogFindingId": "caries",
"plannedItems": [
{ "id": "pi_1", "type": "custom", "name": "Resina compuesta", "quantity": 1, "unitPrice": 180000, "subtotal": 180000 }
],
"subtotal": 180000,
"evolution": "pending"
}
],
"estimate": { "findingCount": 1, "total": 180000, "paid": 0, "due": 180000 },
"signature": { "status": "none" },
"version": 3
}
}
Returns the patient’s odontogram, creating an empty one on first access
(get-or-initialize). The initial dentition mode is suggested from the patient’s
age (≤5 child, 6–12 mixed, otherwise adult) and stays editable.
All tooth and surface state is derived from
findings — there is no separate
per-tooth payload. Requires the odontogram feature flag and EMR read access.
Path Parameters
string
required
The patient whose chart to read.
Response
string
adult | mixed | child.number[]
Permanent positions marked temporary in mixed mode.
array
Findings sorted by FDI tooth number; each carries its planned items and subtotal.
object
Server-computed
{ findingCount, total, paid, due }.object
{ status: "none" | "signed" | "invalidated", signedAt? }.curl "https://api.nevatal.com/api/v1/patients/pat_abc123/odontogram" \
-H "Authorization: Bearer nvtl_your_api_key"
{
"success": true,
"data": {
"id": "odo_001",
"patientId": "pat_abc123",
"dentitionMode": "mixed",
"temporaryTeeth": [13, 14, 15, 23, 24, 25, 33, 34, 35, 43, 44, 45],
"findings": [
{
"id": "fnd_001",
"toothFdi": 36,
"isTemporaryTooth": false,
"scope": "surface",
"surface": "occlusal",
"catalogFindingId": "caries",
"plannedItems": [
{ "id": "pi_1", "type": "custom", "name": "Resina compuesta", "quantity": 1, "unitPrice": 180000, "subtotal": 180000 }
],
"subtotal": 180000,
"evolution": "pending"
}
],
"estimate": { "findingCount": 1, "total": 180000, "paid": 0, "due": 180000 },
"signature": { "status": "none" },
"version": 3
}
}

