Most APIs follow predictable patterns: send a request, get structured data, build on top. Dental PMS APIs don’t.
Why PMS APIs Feel Inconsistent
Each system, Dentrix, Eaglesoft, Open Dental, was built independently.
- Dentrix: Complex appointment dependencies, strict field validation.
- Eaglesoft: Asynchronous data posting and delayed responses.
- Open Dental: Open-source flexibility with less structure.
Here’s what that looks like in practice:
Opendental response
JSON
{
"AptNum": 18,
"PatNum": 17,
"AptStatus": "Scheduled",
"Pattern": "//XXXX//",
"Confirmed": 19,
"confirmed": "Not Called",
"Op": 3,
"Note": "",
"ProvNum": 1,
"provAbbr": "DOC1",
"ProvHyg": 0,
"AptDateTime": "2020-07-31 08:30:00",
"ProcDescript": "Seal, Seal",
"ClinicNum": 0,
"IsHygiene": "false",
"DateTStamp": "2021-05-03 08:30:12",
"serverDateTime": "2021-05-04 09:32:45"
}
Eaglesoft response: Appointments
JSON
{
"AppointmentId": 918,
"StartTime": "2018-01-09T09:00:00",
"EndTime": "2018-01-09T10:30:00",
"PatientId": "2",
"LocationId": 3,
"Classification": 1,
"AppointmentTypeId": 6,
"DateAppointed": "2018-01-08T00:00:00",
"DateConfirmed": null,
"SoonerIfPossible": false,
"AppointmentArrivalStatus": null,
"ArrivalTime": null,
"InchairTime": null,
"WalkoutTime": null,
"ConfirmationStatus": 0,
"ConfirmationNote": "",
"DollarsScheduled": 1000,
"ChairName": "Dr. Morgan",
"AppointmentNotes": "",
"ProviderAppointmentList": [
{
"AppointmentId": 918,
"ProviderId": "DCM",
"ProviderName": "Diane Martin, RDH",
"StartTime": "2018-01-09T09:00:00",
"EndTime": "2018-01-09T10:00:00"
},
{
"AppointmentId": 918,
"ProviderId": "GGY",
"ProviderName": "George Young, DDS",
"StartTime": "2018-01-09T10:00:00",
"EndTime": "2018-01-09T10:05:00"
},
{
"AppointmentId": 918,
"ProviderId": "DCM",
"ProviderName": "Diane Martin, RDH",
"StartTime": "2018-01-09T10:05:00",
"EndTime": "2018-01-09T10:25:00"
},
{
"AppointmentId": 918,
"ProviderId": "GGY",
"ProviderName": "George Young, DDS"
Different systems, same action.
How Synchronizer Solves This
Synchronizer.io normalizes PMS data through a single API. Instead of managing three different schemas, you get consistent objects for patients, appointments, and providers.
It also supports webhooks for every major action: booking, updating, canceling. So you always know when a sync succeeded or failed.
Why It Matters
If you’re a developer building online booking or patient management apps, PMS inconsistencies waste time managing each integration and cause reliability issues.
Using an integration layer lets you focus on your logic instead of legacy quirks.
Explore the Synchronizer GitHub repo for API examples, webhook payloads, and Postman collections: https://github.com/synchronizer-api/quickstart
Top comments (0)