Dev
How EHR Write-Back Actually Works
A booking is six stages, not one write. See how 2care holds, writes and confirms it, natively, and where each stage can fail.
Key takeaways
- 2care runs a native write path end to end: it holds the slot, writes the appointment, and speaks a confirmation only after the practice system accepts it.
- A booking is six stages, not one call. 2care resolves intent, provider, urgency and identity, reads live availability, holds, writes, then confirms by SMS or WhatsApp.
- The write commits in about 900 milliseconds while replies land near 480. 2care makes the caller wait for a real result rather than confirm a booking early.
- When a write is rejected, 2care tells the caller on the call and offers alternatives, instead of inventing an appointment the practice has no record of.
- Reading, matching and writing patient data makes 2care a business associate under HHS guidance, covered by a BAA, with AES-256 at rest and TLS in transit.

A voice agent that books an appointment looks identical in every demo. It offers a time, the caller says yes, an appointment appears on a screen. Every serious product clears that bar in a quiet room. The difference between them shows up on the calls where the diary moved while the two of you were still talking, and the way to see it is to ask what the caller hears when the write is rejected.
We build the write path at 2care, so this is the part we care about at the level of what crosses the wire. "EHR integration" covers an enormous range of behaviour, and the differences stay invisible until something goes wrong at three in the morning.
The invented appointment is the failure that matters. A weaker system, under pressure to fill the silence while a write completes, tells the caller they are booked before the practice system has agreed. The write then fails, the caller hangs up believing something untrue, and the practice finds out when they arrive. That is worse than not booking at all, because it spends a patient's trust rather than their time.
6
stages in a single booking
0.4s
to answer on the first ring
0.9s
to commit the write
95+
integrations 2care writes back to
A booking is not one operation. On the platform it is six stages, and 2care runs them in a fixed order because the order is the safety property.
Ring. The call is answered on the first ring, at any concurrency, in about 0.4 seconds. Peak hour behaves like three in the morning because there is no per-line limit to hit.
Understand. Before anything is looked up, the agent resolves four things from natural speech: intent, provider, urgency and identity. Identity is verified against a date-of-birth match, so the caller is tied to an existing record before a slot is ever offered.
Check availability. Availability is read live from the practice system, not from a nightly copy. The read is a query against the live diary, parameterised by provider, appointment type, duration and location over the booking window, so the slot offered is one that actually exists at that moment.
Hold. The chosen slot is held, not yet written. The hold applies the practice's booking rules, no double-book and no overrun, and releases the previous slot back to the calendar on a reschedule. It closes the window in which another booking could take the same time mid-conversation.
Write. The appointment is written into the practice system over its official API, against the resolved patient record. The write is idempotent, so a network retry cannot turn one accepted booking into two, and it waits for an explicit acknowledgement rather than assuming success.
POST /appointments
{
"patient_id": "MRN-4471902",
"provider_id": "prov_0198",
"start": "2026-09-14T15:20:00-05:00",
"duration": 20,
"type": "follow-up",
"reason": "post-op review",
"source": "2care-voice"
}
=> 201 Created (encrypted in transit, audit-logged)
Confirm. Only after the system returns the write does the agent speak the date, the time and the clinician back to the caller. A text or WhatsApp confirmation follows, then reminders 24 hours and 2 hours before, and a post-visit check-in 48 hours after. Nothing about an appointment existing is said until the practice system has said it does.
Why the confirmation waits for the write
A conversational reply from a native voice pipeline lands in about 480 milliseconds. A write into a practice system commits in roughly 900. Against that rhythm the pause after the caller accepts feels long, and there is real pressure to fill it with a confirmation the system has not yet given.
Filling it is the mistake. The confirmation has to be sequenced after the write, not spoken in parallel with it, because a confirmation is a claim that the appointment exists and only the practice system can make that true. If the write is slow, the caller waits, and the agent says it is booking rather than that it has booked. The half-second of honesty is cheaper than the appointment invented to avoid it.
Because the stack is native rather than a wrapper over a separate voice platform, the read, the hold, the write and the speech share one timing budget and one state machine. The write is a step inside the same loop that produced the 480 millisecond reply, not a call handed to an outside system that answers on its own schedule.
When the write is rejected
The happy path is identical across products. The failure path is where the engineering is.
| Failure | Cause | What a weak system does | What 2care does |
|---|---|---|---|
| Slot taken during the call | Another booking won the race | Reports success anyway | Tells the caller at once, offers the next options |
| Type not permitted for the clinician | A booking rule the agent could not see | Creates it wrongly | Rejects, offers an allowed alternative |
| Patient record ambiguous | Two plausible matches | Creates a duplicate chart | Escalates rather than guessing |
| Practice system unreachable | Outage or network | Books into a parallel diary | Tells the caller, captures the request, confirms nothing |
The bottom row is the one to press any vendor on. During an outage, a product that books into its own store looks resilient and produces appointments that exist in one place and not the other. Reconciling that by hand later is worse than an honest failure on the call, which is why 2care runs at 99.9% uptime and still assumes the practice system will sometimes be the thing that is down. Ambiguity is handed to the matching logic in patient matching, which refuses rather than guesses.
How the connection is actually made
The write path is only as good as the connection under it, and this is where the surface area is largest.
2care connects through each system's official API, set up by an onboarding specialist during go-live rather than installed. There are 95+ integrations across EHR, PMS, dental, aesthetics, rehab, payments and communications, many with a dedicated setup guide, and any system exposing an HL7 FHIR R4 endpoint connects through the same standards-based path. Go-live is three steps: authorise the connection, map your rules for providers, locations, appointment types and escalation paths, then test against a test environment with your team watching before the line is switched over.
Two properties hold across all of them. Availability is read live rather than mirrored, for the reasons in why we skip nightly syncs. And every write is logged and reversible, so a wrong booking is an entry you can find and undo rather than a mystery discovered at the desk.
When a booking call turns clinical
A booking call is not always a booking call. Four sentences in, a caller mentions chest pain, and the write path has to stop.
2care resolves urgency as one of the four things it understands on every call, and the Escalation Engine routes on it. A routine call is resolved on the line. An emergency goes straight to a human within about 3 seconds. A call that turns on clinical judgement goes to a nurse or provider queue within about 4 seconds, with the transcript and resolved identity attached, so the clinician does not start by taking a name. See how that routing is configured in triage and routing.
What the agent never does is form a view. It will not weigh a symptom, judge a medication, read a result, or reassure a worried caller, because telling someone their symptom is probably nothing is itself a clinical act. Every escalation records what triggered it, so the threshold is auditable and can be tuned rather than trusted.
What a booking write commits us to
The six stages are not neutral contractually. A system that reads availability, resolves a caller against a record, writes an appointment and stores the transcript is creating, receiving and maintaining protected health information.
Under HHS guidance the conduit exception covers a vendor with only transient access to what it transmits. None of the six stages is transient, so a business associate agreement is required rather than optional.
2care signs one, encrypts patient data with AES-256 at rest and TLS 1.2 or better in transit, and covers UK and EU deployments under GDPR and Indian ones under DPDP with local data residency. What each of those covers is on the compliance page.
Where write-back has real limits
Two genuine limits, and one case that is often mistaken for one.
A system with no hold. The race between offering a slot and the caller taking it can be made small and cannot be closed, so the occasional lost-slot conversation is a permanent feature rather than a defect.
A practice whose booking rules live in someone's head rather than in the system. The write will be accepted and still be wrong, and no amount of API access fixes a rule that was never written down.
A system with no write API is the case people expect to be a dead end, and it is not. 2care surfaces the booking live in its own console for your team, and where you want it written through, it can write into a secondary PMS as a managed service. The honest tradeoff is that this is a two-place setup 2care then keeps in step, rather than a single write into the system of record.
Frequently asked questions
How long does the write actually take?
About 0.9 seconds to commit, and it varies by system, which is exactly why the confirmation is sequenced after it rather than spoken in parallel. The caller waits for a real result rather than being told something the practice system has not yet agreed to.
What happens if the caller hangs up mid-write?
The write either completed or it did not, and the record reflects which. Nothing is parked in an intermediate state, because a half-created appointment that no one confirmed is worse than none and considerably harder to find later.
Does 2care use a third-party voice platform underneath?
No. The voice pipeline is native, so the read, hold, write and speech share one state machine and one timing budget rather than being handed to an outside system that answers on its own schedule and can stall the call.
Can it book into a system it only has read access to?
It surfaces the booking live in the 2care console, and where you want it written through, it can write into a secondary PMS as a managed service. So a read-only system still produces a booking your team can act on, just not a single write into that record.
Is a booking transcript covered under HIPAA?
Yes. Creating and maintaining that content is what makes 2care a business associate rather than a conduit, so a signed agreement is in place before a single call is handled, not offered later as an upgrade.
Ask to see a rejected write
Ask any vendor you are weighing, including us, to demonstrate a rejected write. Not a booking that works, a booking that fails. Have them pull the slot out from under a live call and let you hear exactly what the caller is told. It takes two minutes and it separates products more reliably than any feature list, because the happy path is identical everywhere and the failure path is where the engineering lives.
See the write path run on the platform overview, or hear a live booking with a rejection in it when you book a demo.
More stories
All postsGet every new post by email
Notes from the front desk, sent as they publish - every Tuesday and Friday. No filler.
I agree to receive the 2Care AI newsletter. Unsubscribe anytime.


