How to Offer Online Booking When Your Practice Software Has No API
You can offer real online booking, with appointments written into the schedule your staff use, even when your practice software runs on a server in the back office and has no cloud API. Dentrix and ChiroTouch are the common cases. It works through a small connector installed on the office server, but it comes with two constraints most vendors do not mention: the software exposes no provider schedules, so working hours are configured by hand, and every office is its own database, so multi-location practices need per-office handling. This article explains how the setup works and what you have to decide.
The payoff is not small. Across several hundred medical practices in our dataset, Dentrix and ChiroTouch are two of the larger sources of synced appointments on the KloudMD platform, and about 160,000 appointments in the last twelve months were created online, by an AI agent, or by the front desk inside a scheduling tool rather than typed straight into the EHR (KloudMD platform data, Sep 2025 to Sep 2026). Meanwhile 44% of web new-patient requests arrive outside 8am to 5:59pm. An on-premise EHR is not a reason to make those people wait for a callback.
Why “no API” is the real problem
Cloud EHRs let a scheduling tool ask “what is free on Thursday?” and “book this slot” over the internet. Dentrix desktop and ChiroTouch Server edition keep their database on a machine in your office. There is no internet-facing endpoint to ask. The obvious workarounds are both bad:
- Open the database to the internet. Exposing a SQL port and an admin login on a public IP is a security failure waiting to happen. Do not accept this from any vendor.
- Request-only booking. The website collects a “preferred time” and staff call back. That is a form, not booking, and the platform data on after-hours requests tells you how many of those go stale overnight.
How a connector solves it
A connector is a small service that runs on the practice’s own server, inside your network. It connects to the EHR database over localhost, and it makes only outbound encrypted HTTPS calls to the scheduling platform. That means no inbound firewall change, no port forwarding, no VPN, and no exposed database. Your IT (or the vendor’s) installs it once; it runs as a Windows service so it survives lock screens, logoffs, and reboots.
The connector does two jobs:
- Read, continuously. It pushes appointments, patients, and providers from the EHR to the platform as they change. This is what lets the booking page know a chair is taken at 10:20.
- Write, on command. When a patient books online, the platform queues a create command; the connector picks it up on its next poll, writes the appointment into the EHR, and reports back success or failure. Reschedule and cancel are separate update and cancel commands on the same appointment, which is a requirement, not a nice-to-have (see why reschedule and cancel are the hard part).
Because the connector polls rather than being pushed to, there is a short delay between a web booking and the appointment appearing in the EHR, typically a minute or two. Ask your vendor for the interval, and ask what happens if the EHR rejects the write (the slot was just taken at the desk). The right answer is that the booking is rolled back and the patient is offered another time, not that it silently fails.
Constraint 1: there are no provider hours to read
Cloud systems expose each provider’s working schedule; a scheduling tool can pull hours per provider per location. On-premise Dentrix and ChiroTouch do not expose provider schedules in a usable form. Integration field notes are blunt about it: on these systems availability is configured manually and the question is not re-investigated per practice.
So availability for online booking is computed as: the weekly working hours you configure per provider per location, minus the appointments the connector has read from the EHR. This has three consequences for you:
- Someone in the practice owns the hours table. When a hygienist moves from Tuesdays to Wednesdays, the booking configuration has to change too, or the page will offer Tuesday slots that nobody will staff.
- Blocks and lunches only count if they exist in the EHR as appointments or events the connector can read. A hand-written “lunch” on a paper schedule is invisible.
- Match the slot grid to the EHR’s own grid. Dentrix’s appointment book runs on a 10-minute grid, so real appointments start at times like 9:40 and 10:50. A booking page that only offers :00 and :30 will hide a free 9:40 to 10:20 gap entirely and show fewer slots than your schedule really has.
Constraint 2: each office is its own database
If you have two locations on Dentrix or ChiroTouch, you almost certainly have two separate databases, each with its own appointment id sequence and its own provider code table. Provider “01” in office A is not provider “01” in office B, and appointment 61000 exists in both.
A scheduling tool that treats all of that as one set of ids will collide. In a documented multi-office case, appointments from two offices landed on the same records and hundreds of future appointments ended up with a provider from one office in a chair from the other. The fix is structural: one connector per office, every appointment id and provider code namespaced by office, and a hard rule that a provider record from one office is never used as a fallback for another. Before go-live, the vendor should check the id ranges in each office for overlap and confirm each provider is mapped to the right office.
What you configure before the page goes live
| Setting | Where the data comes from | Your decision |
|---|---|---|
| Bookable services | Your fee schedule / procedure list | Which services patients may self-book, and their durations |
| Provider to service | Practice knowledge | Who performs each bookable service |
| Provider to office | EHR history via the connector | Confirm, especially for floaters |
| Working hours | Not available from the EHR; entered manually | Per provider, per location, kept current |
| Chairs / operatories | EHR via the connector | Which chairs count toward capacity |
| Slot grid | EHR’s appointment book granularity | Match it (10 min for Dentrix) |
| Patient identification | Booking form | Collect name and date of birth, not phone alone |
The last row deserves a note. A phone number or email is a household, not a patient. When a parent books a child’s cleaning from their own number, the booking must carry the child’s name and date of birth so the appointment lands on the child’s chart with the parent as the responsible party. Matching a chart on phone alone books the wrong person.
A go-live test you can watch yourself
Do not accept “it’s connected.” Sit at a workstation with the EHR open and have the vendor do the following on a test patient:
- Book a test appointment on the live booking page. Watch it appear in the EHR schedule on the right chair, provider, and duration, within the stated interval.
- Reschedule it from the booking side. The same EHR appointment moves; there is no leftover at the old time.
- Cancel it from the booking side. The EHR shows it cancelled and the slot reopens.
- Book something in the EHR at the desk. Watch the slot disappear from the booking page.
- Cancel the test appointments and remove the test patient.
For a multi-office practice, repeat steps 1 through 3 in each office and confirm nothing crossed over.
What you get once it works
Online bookings behave like any other appointments in the EHR, with reminders running off them. The platform data on reminders is worth knowing here: no-show rates on appointments booked through KloudMD with reminders on were 2.1% to 2.9% across every lead-time bucket over twelve months. And the same connector-backed availability can feed an AI receptionist on your phone line, so a caller at 7pm gets a real slot, not a voicemail. Both should run through the same booking channel and logic so the phone and the website never disagree on what is free.
How KloudMD handles this
KloudMD reaches on-premise Dentrix and ChiroTouch through a connector installed on the practice server that reads the schedule and writes bookings, reschedules, and cancellations back, using only outbound HTTPS. Provider working hours are configured per provider and location during setup, because these systems do not expose them, and availability is computed as those hours minus what the connector reads from the EHR. Multi-office practices get one connector per office with appointment ids and provider codes kept separate per office. The same availability powers the online scheduling page and Voice AI, and every integration is proven with a create, reschedule, and cancel on a test patient before it is live. See the Dentrix and ChiroTouch integration pages for specifics.
Get started with KloudMD and we will walk through your office setup and hours before anything goes live.