Resources

Tebra Is SOAP, and That Changes the Estimate

By Federico Ruiz Cassarino, CEO and founder, Puppeteer AI · · 7 min read

Every other post in this series opens with field names. This one opens with a protocol, because with Tebra the protocol is the story and pretending otherwise wastes your time.

Tebra, the company formed when Kareo and PatientPop merged, exposes its practice management data through a SOAP API: XML request and response envelopes, described by a WSDL rather than a browsable JSON reference. If you've only ever integrated with REST or FHIR, that sentence should adjust your estimate before you scope anything else.

What SOAP actually costs you

SOAP isn't bad technology. It's older, more verbose, and strongly typed in a way that catches certain mistakes early, and plenty of healthcare and financial systems run on it without issue. The problem isn't quality, it's ecosystem, and the costs land in tooling and iteration speed rather than in the protocol itself.

Your HTTP client changes. You're generating client code from a WSDL or hand-building XML envelopes, not calling a JSON endpoint with a plain request body. Most language ecosystems have a SOAP library, but it's rarely the well-maintained, obviously-correct default a REST project would reach for, and evaluating options costs time a JSON API wouldn't have charged you.

Your debugging changes too. You can't paste a URL into a browser and read the response. Exploration needs a SOAP client, and the afternoon most REST integrations spend just poking at the API stretches into something longer.

Your error handling changes as well. A SOAP fault is structured differently from an HTTP status code, and the useful detail usually sits nested inside the fault body rather than in the response line. Code written to assume a non-200 means failure will misread a fault returned with a 200.

None of this blocks the project. All of it is a line item, and an estimate that skips these three will be wrong.

The technical guide is a PDF, not a page

This gets its own section because it changes how you research the project, not just how you build it.

Tebra distributes its API Technical Guide as a download through its help center rather than as browsable web documentation. You can't search it from Google, link a teammate to one method, or read it before deciding whether the integration is even feasible.

That has a real consequence for anyone comparing EHR vendors: get the guide before you commit to a delivery date. A comparison built only on what's publicly visible will underrate Tebra, because most of what it can do isn't publicly visible. An estimate built on the assumption that it behaves like the last REST API you touched will be optimistic in the other direction.

There's a signal in Tebra's own support guidance too: its help center notes that Customer Care can support the API only on Tebra's side, and asks that a support ticket include the request and response XML pasted in directly. Log full request and response XML from day one. You'll need it for support, and reconstructing a failed call after the fact from a summary line is miserable. Redact PHI before any of it leaves your systems, but capture the rest.

Designing recovery around the friction

The protocol friction pushes toward a particular architecture, and it happens to be a good one regardless of the transport underneath it.

Talk to Tebra as little as possible. Mirror the data you need locally, sync it on a schedule, and run every piece of business logic, segmentation, timing, message selection, suppression, against your own store. Anything you can keep out of the SOAP layer is logic you can test without a SOAP client sitting in the loop.

Wrap the API behind a thin adapter with a clean internal interface, so one module speaks XML and everything else speaks your own types. That's standard practice with any external API, but the payoff is larger here, because the alternative is XML parsing scattered through the codebase and a rewrite the day Tebra changes a field.

Batch wherever the API supports it. Per-record calls cost more with an XML envelope wrapped around each one than they would against a lightweight REST endpoint, and the round trips add up faster than the estimate expects.

The recovery logic, once the data is local

Once the mirror exists, no-show recovery is the same problem it is anywhere else: find the missed visits, wait an appropriate interval, reach out with real available times instead of an invitation to call, and stand down the moment the patient rebooks through any channel.

The details that move the outcome are mostly not technical. Reach out the same day or the next morning, while the visit is still fresh in the patient's mind. Name two or three real times rather than asking them to call in, because an open-ended callback converts far worse than a slot they can just accept. Cap the sequence at two or three messages, and stop.

That last part is where the SOAP friction reaches into the outcome instead of just the build. A sync that's expensive to run gets run less often, and a stale local mirror sends a recovery message to someone who already rebooked. Budget for syncing more often than the friction makes comfortable.

Four questions the guide has to answer before you estimate

Since the specification isn't browsable, evaluation becomes a short list of questions to answer once the PDF is actually in hand. These four move an estimate by weeks, not hours.

  • Can appointments be filtered by modified date? A yes means incremental sync, and the whole project gets cheaper. A no means date-window full pulls, and the sync cost scales with practice size forever.
  • Is there a distinct no-show state, or is it inferred? Some systems record it explicitly; others leave you deducing it from an appointment that passed with no check-in. Inference is workable, but it's materially more logic and more edge cases to test.
  • Are writes supported, and which ones? A read-only integration caps what you can promise a practice. Every confirmation a patient sends back ends up retyped by staff if you can't write a note or a status, so say that up front rather than discover it at demo.
  • What are the rate or concurrency limits? A SOAP call is heavier than a REST call, so a limit that reads as generous on paper may not behave that way against the batch sizes this architecture needs.

Answer those four and the estimate is probably within range. Skip them and it probably isn't.

Honest limits

We do not have a Tebra port in our integration set, and everything above comes from Tebra's public help center rather than from an integration we operate in production. The protocol and support guidance are quoted from those pages as of September 2026.

Specific method names, appointment field names, and status values live in the API Technical Guide itself, which we have not obtained. If you need those, request the guide from Tebra directly. This page does not substitute for it and isn't trying to.

Sources

  1. Tebra Help Center, Get Started: Tebra SOAP APIs
  2. Tebra Help Center: API Integration User Guide

About the author

Federico Ruiz Cassarino is the CEO and founder of Puppeteer AI, the company behind Recupra. He works with clinic operators on the scheduling and outreach problems that decide how much of a practice's booked capacity turns into revenue. Connect on LinkedIn.

FAQ

Frequently asked questions

Is the Tebra API REST or SOAP?

SOAP, with XML request and response envelopes described by a WSDL rather than a browsable JSON reference.

Where is the Kareo API documentation now?

Kareo and PatientPop are now Tebra, and API documentation lives in the Tebra help center rather than under the old Kareo name.

Where do I get Tebra API credentials?

Access is administered from within the Tebra application's own settings. Confirm the current path with Tebra directly, since UI locations change.

Can I read the Tebra API documentation before becoming a customer?

The technical guide is distributed through Tebra's help center as a download rather than published openly. Request it from Tebra during evaluation.

Recover no-shows without hand-rolling the SOAP layer.

Connect Tebra and Recupra owns the XML integration, syncing appointment status locally and running recovery outreach on top of it, so nobody on your team has to parse a fault to find out why a call failed.