Key Takeaways
- FHIR is the standard, but Epic, Oracle Health, Athena, and Meditech each implement it differently; production behavior diverges from the spec in ways that reliably break data pipelines.
- Middleware providers offer fast coverage but charge per transaction; direct EHR API integration costs more upfront and gives better unit economics at scale.
- Most EHR integrations fail in production due to auth token expiry, inconsistent FHIR resource structures across facility configurations, and webhook delivery gaps.
- A read-only integration with a single system takes 4-8 weeks; a bidirectional production integration with Epic or Cerner takes 12-24 weeks including compliance review.
- Momentum has built EHR integrations for 10+ healthtech products across Epic, Cerner, and Athena, from OAuth setup to production-grade FHIR data pipelines.
Is Your HealthTech Product Built for Success in Digital Health?
.avif)
This guide covers four things most EHR integration resources skip:
- How to choose the right architecture (direct API, middleware, or FHIR facade) before writing any code
- What makes Epic, Oracle Health, Athena, and Meditech different in practice, not just in documentation
- Where integrations break after go-live and how to build for those failure modes
- Realistic timelines and cost ranges by integration type
If you're scoping a new integration, evaluating vendors, or debugging unexpected production behavior, this is the reference to keep open.
EHR Integration Architecture: Three Patterns
Before connecting to any EHR, the architecture decision comes first. That choice determines your cost structure, maintenance burden, and flexibility for the next several years.
Direct API Integration
You connect to each EHR's API directly, own the auth logic, parse the responses, and handle updates yourself. The highest-effort path initially, the lowest-cost path at scale.
There are no per-transaction fees. No third-party dependency in your data pipeline's critical path. Full control over data mapping, error handling, and how you respond when an EHR changes its behavior.
The friction is real: Epic's App Orchard requires an application review before sandbox access. Cerner's developer program has its own approval process. Getting credentials for two EHRs can take weeks of back-and-forth with vendor support teams.
FactorDirect APISetup time4-8 weeks per EHROngoing costEngineering time onlyControlFullBest forScale, cost efficiency, custom workflows
Middleware Integration Providers
Redox, Health Gorilla, and 1upHealth sit between your application and the EHR ecosystem. They normalize data, maintain vendor relationships, and expose a single API across dozens of EHR connections. For MVPs and early-stage products, this is often the right starting point.
The cost model is where it gets complicated. Per-transaction or per-user fees compound as you scale. One pricing change or acquisition forces a migration you didn't plan for. Some providers restrict access by business model: no consumer-facing apps, or certain data types locked behind additional contracts.
FactorMiddleware ProviderSetup time1-3 weeksOngoing costPer-transaction/per-user feesControlLimitedBest forMVPs, fast coverage across many EHRs
FHIR Facade
Build an internal service that abstracts all EHR connections behind a standardized FHIR API your application consumes. Each EHR-specific adapter lives inside that service. When an EHR updates their API or you add a new system, you change one adapter, not your entire codebase.
This requires more upfront architecture investment. It pays off the moment you're integrating more than two systems. For products where EHR integration is a core feature, this is the architecture to design toward from day one.
Which to choose: If you need coverage quickly and scale is uncertain, start with middleware but design your integration layer as an abstraction you can replace. If cost control matters from the start and your market is concentrated around one or two EHRs, go direct. Once you're past two systems in production, a FHIR facade is worth the investment.
Epic, Oracle Health, Athena, Meditech: What's Actually Different
The 21st Century Cures Act mandated FHIR R4 support for certified EHRs. That doesn't mean implementations are consistent. Each vendor has gaps, undocumented behaviors, and quirks you'll discover in production, not in the documentation.
Epic
Epic runs on approximately 37% of U.S. hospital beds. For most healthtech products serving providers, Epic compatibility is a requirement, not a choice.
API access: Third-party apps go through Epic's App Orchard program. Registration is required before sandbox access. Production credentials for a specific health system require that system's IT team to approve your app in their Epic instance: this step alone can take 4-6 weeks depending on their IT queue.
FHIR behavior: Epic's FHIR R4 is generally the most complete of the major vendors. Medication resources return complex hierarchies. The Patient $match endpoint has stricter matching requirements than the spec. Write-back support for third-party apps is limited by default and often requires a separate approval.
Common pitfall: Epic uses two distinct credential flows: MyChart credentials for patient-facing access and SMART on FHIR for provider-facing. These have different scopes and different data surfaces. Teams that build against patient access credentials and later need clinical data types have to restart the auth implementation. Our SMART on FHIR implementation guide covers the technical setup in detail.
Oracle Health (Cerner)
Oracle Health (formerly Cerner) holds the second-largest U.S. market share and has significant international deployment.
API access: The developer portal at code.cerner.com provides sandbox access without a pre-approval step, which speeds early development. Production access still goes through the health system. Oracle support response times have been inconsistent since the acquisition, so factor that into planning.
FHIR behavior: Cerner splits some observations that Epic combines. Blood pressure is the standard example: a single reading often returns as two separate Observation resources (systolic and diastolic) with linked references rather than one compound resource. Normalization logic built for Epic needs a separate handling path for Cerner.
Common pitfall: Cerner's SMART on FHIR access tokens expire on a shorter cycle than Epic's. Older Cerner instances have inconsistent refresh token support. If your token refresh logic assumes Epic-style behavior, you'll see silent data gaps in Cerner integrations. See our guide to FHIR and HL7 for how FHIR auth works across implementations.
athenahealth
Athena is common in ambulatory care and specialty practices, less so in hospital systems.
API access: Athena has a tiered partner program. Their documentation is extensive but sometimes dated for specific endpoints. Developer access is available without a lengthy review process.
FHIR behavior: Athena's FHIR R4 support has expanded but is less complete than Epic or Oracle Health, particularly for complex resource types. HL7 v2 interfaces remain common in Athena integrations and are often more reliable for scheduling and ADT data. See our HL7 standards guide for how v2 and FHIR relate in practice.
Common pitfall: Athena's appointment and scheduling data is frequently more accessible through their proprietary REST API than through FHIR endpoints. Teams committed to a FHIR-only approach find this after weeks of development. Scoping against their proprietary API surfaces early avoids a mid-project pivot.
Meditech
Meditech holds significant share in community hospitals and critical access facilities.
API access: Meditech's FHIR-based API ecosystem (Traverse) is less mature than the other three vendors. FHIR support exists but is incomplete across data types. Many Meditech integrations still rely on HL7 v2 interfaces, which require coordination with the facility's IT team for interface engine configuration.
Common pitfall: Meditech configurations vary significantly across facilities. API features enabled at one Meditech site may not be available at another. Standardizing a Meditech integration is harder than with Epic or Cerner because there's no single reference implementation to test against.
Where EHR Integrations Break After Go-Live
Most production failures in EHR integration aren't architectural. They're specific, predictable failure modes that teams don't build handling for in development because the sandbox doesn't surface them.
Auth Token Expiry
OAuth 2.0 access tokens for EHR APIs expire, typically within 60 minutes. Refresh token logic is required. Some EHR configurations, particularly older Cerner instances, limit refresh token validity. If your application treats an expired token as an unrecoverable error rather than a retriable one, users see silent data gaps or errors that appear hours after the underlying problem.
What to build: Treat expired tokens as a recoverable error. Queue failed requests and retry after re-auth. Log token lifecycle events separately from application errors so you can diagnose expiry issues without scanning through application logs.
Inconsistent FHIR Resource Structure
FHIR resources are flexible. The same demographic data can be represented differently across facilities running identical EHR versions. A patient's preferred name may be in Patient.name with a use type of "nickname" in one system and in a vendor extension in another. Normalization logic that handles the common case will break on edge cases that only appear with real patient data.
What to build: Test mapping logic against real data from at least two different facilities before go-live. Synthetic sandbox data doesn't surface these variations. Our custom vs. off-the-shelf EHR guide covers data model decisions in more depth.
Webhook and Subscription Delivery
FHIR Subscriptions notify your system when relevant events occur. In production, delivery is not guaranteed. Health systems have maintenance windows, interface engines restart, and network timeouts happen.
What to build: Design for missed events from the start. Periodic polling catches anything that didn't arrive via subscription. Log subscription failures separately and alert on elevated error rates so you know when a facility's feed goes quiet.
Rate Limiting
EHR APIs impose rate limits that differ by vendor, by health system configuration, and sometimes by resource type. Epic's production rate limits differ from their sandbox. System-context apps often get different limits than patient-context apps.
What to build: Implement exponential backoff for 429 responses from day one. Don't calibrate against sandbox behavior. For HIPAA-compliant infrastructure that handles rate-limited EHR traffic, AWS HealthLake provides managed buffering options worth evaluating.
Timeline and Costs by Integration Type
These ranges reflect actual project timelines. External dependencies, including EHR vendor support, health system IT availability, and BAA negotiation, account for most of the variance.
Integration TypeTimelinePrimary Driver of VarianceRead-only, single EHR, 1-2 resource types4-6 weeksSandbox access approvalRead-write, single major EHR (Epic/Cerner)10-14 weeksApp approval + compliance reviewMulti-EHR production integration16-24 weeksPer-system testing + health system IT coordinationLegacy HL7 v2 + FHIR hybrid12-20 weeksInterface engine setup + facility configuration
What extends timelines: EHR vendor support response times, health system IT queue depth, HIPAA BAA negotiation, and scope changes after sandbox testing reveals data model differences from assumptions.
What compresses timelines: Prior sandbox registration with the target EHR, a health system IT contact with third-party integration experience, a clear data model agreed on before development starts, and a HIPAA-compliant development process already in place.
Cost ranges depend on integration complexity, the number of EHR systems, and whether you're building direct or using middleware. The HealthTech MVP cost breakdown covers where EHR integration fits in overall project budgets.
Working With Momentum on EHR Integration
Momentum has built EHR integrations for healthtech products across Epic, Oracle Health, and Athena: clinical decision support tools, patient-facing mobile applications, and analytics pipelines pulling from multiple systems. Our EHR integration services begin with a scoping engagement: we map your data requirements to available API surfaces for each target EHR, identify which access programs and approvals apply, and produce a timeline that separates development time from external dependency time.
If you're evaluating architecture options before committing, or you're mid-integration and hitting unexpected behavior, talk to our team. We scope EHR integrations in 48 hours.
.png)


.png)

.png)
.png)

