Canadian EMR Landscape¶
Last Updated: 2026-02-14
This page documents the three major Canadian EMRs beyond OSCAR: Juno, Accuro, and Med Access. Understanding their APIs, access models, and business constraints is critical for multi-EMR integration strategy.
Overview¶
| EMR | Owner | Based on OSCAR? | API | Auth | Access Model |
|---|---|---|---|---|---|
| Juno | WELL Health | Yes (fork) | SOAP + REST | WS-Security + OAuth 1.0a | IP whitelist + credentials |
| Accuro | Loblaw/SDM | No | REST only | OAuth 2.0 | Business agreement + 6mo sandbox |
| Med Access | TELUS Health | No | GraphQL | JWT (RS512) | TELUS partnership approval |
1. Juno EMR¶
What It Is¶
Juno is a fork of OSCAR McMaster. Same Java/Spring/Hibernate codebase, same org.oscarehr.* packages, same Tomcat + MariaDB stack.
- Creator: Cloud Practice Inc. (Victoria, BC, ~2012)
- Acquired by: WELL Health for $5.75M in October 2022
- Current status: Sits alongside OSCAR Pro in WELL Health's EMR portfolio
The GitHub repo (https://github.com/junoemr/junoemr) describes it as:
"a branch of open source electronic medical record (EMR) software released by McMaster University focused on stability, cloud-hosting, UI improvements, and 3rd party integrations."
API Surface — Identical to OSCAR¶
Because it's a fork, Juno exposes the exact same SOAP and REST endpoints:
SOAP (WS-Security, inherited from OSCAR)¶
/oscar/ws/ScheduleService ← same getDayWorkSchedule
/oscar/ws/DemographicService ← same searchDemographicByName
/oscar/ws/ProviderService ← same getProviders2
/oscar/ws/BookingService ← same bookAppointment
/oscar/ws/AllergyService
/oscar/ws/PrescriptionService
/oscar/ws/MeasurementService
/oscar/ws/LabUploadService
...all 14 SOAP services
REST (OAuth 1.0a, inherited from OSCAR)¶
/oscar/ws/services/schedule/*
/oscar/ws/services/demographics/*
/oscar/ws/services/providers/*
...same ~30 REST services
Confirmed from Juno's own release notes:
"looking up schedule slots via SOAP API now respects the case of the schedule code"
This proves SOAP API is actively maintained and patched in Juno.
How Commercial Products Connect to Juno¶
Cortico (Confirmed)¶
Source: https://help.cortico.ca/help/allowing-cortico-to-access-your-juno-emr
- Juno uses IP whitelisting — clinic emails
support@junoemr.comrequesting whitelist of Cortico IPs: - 192.30.89.37
- 192.30.89.38
- 193.188.3.213
- 193.188.3.212
- 199.49.111.174
- Then REST client created via Administration > Integration > REST Clients
- OAuth 1.0a token exchange
- Compatibility rating: COMPLETE (excellent with minor differences)
DermEngine (Confirmed)¶
Source: https://www.dermengine.com/integration/juno
- REST API with OAuth via registered REST client in Juno
OceanMD (Confirmed)¶
- REST API via Ocean Cloud Connect + REST client in OSCAR/Juno
Veribook (Confirmed for OSCAR, works identically on Juno)¶
Source: https://medical.veribook.com/syncing-scheduling-templates
- Schedule template sync via SOAP (
getDayWorkScheduleis SOAP-only)
Key Difference from Self-Hosted OSCAR¶
Juno is cloud-only, managed by WELL Health. You don't get SSH. You request IP whitelisting from Juno support before any external system can reach the API.
Once whitelisted, the SOAP and REST endpoints work identically to any self-hosted OSCAR.
What This Means for Your Strategy¶
Your OscarSoapAdapter works on Juno with zero code changes.
Same ScheduleWs, same getDayWorkSchedule, same addAppointment. The only onboarding difference is the IP whitelisting step.
2. Accuro EMR¶
What It Is¶
Completely different from OSCAR. Proprietary EMR built by QHR Technologies (Kelowna, BC, founded ~2000).
- Acquired by: Loblaw Companies / Shoppers Drug Mart for $170M CAD in August 2016
- Market position: ~17% of Canadian physicians (Statista 2021), ~18,000 physicians
- Leading single-platform EMR in Canada. 70%+ of Manitoba providers.
- Tech stack: Java-based thick client, delivered via Citrix Workspace cloud virtualization, backed by Microsoft SQL Server (not MySQL/MariaDB)
NOT open source. NOT related to OSCAR in any way.
Accuro API — Modern REST, Nothing Like OSCAR¶
Accuro has a proper, documented REST API with 150+ endpoints:
| Attribute | Value |
|---|---|
| Protocol | REST (JSON) |
| Auth | OAuth 2.0 (client credentials, provider, patient grants) |
| Documentation | https://apidocs.dev.qhrtech.com/docs/ (public Swagger UI) |
| Spec | OpenAPI/Swagger JSON downloadable |
Scheduling Endpoints (Subset)¶
GET /v1/provider-portal/scheduler/appointments
POST /v1/provider-portal/scheduler/appointments
GET /v1/provider-portal/scheduler/appointments/{id}
PUT /v1/provider-portal/scheduler/appointments/{id}
DELETE /v1/provider-portal/scheduler/appointments/{id}
GET /v1/provider-portal/scheduler/availability-templates
POST /v1/provider-portal/scheduler/availability-templates
GET /v1/provider-portal/scheduler/applied-availabilities
GET /v1/provider-portal/scheduler/statuses
GET /v1/provider-portal/scheduler/reasons
GET /v1/provider-portal/scheduler/sites
POST /v1/provider-portal/scheduler/lock
DELETE /v1/provider-portal/scheduler/lock
Patient Booking¶
No SOAP whatsoever. Zero evidence of SOAP in Accuro.
Accuro's Scheduling Model vs. OSCAR's¶
OSCAR: ACCURO:
┌─────────────────────────┐ ┌──────────────────────────────┐
│ scheduletemplatecode │ │ Template Suggestions │
│ (single char: '1','C') │ │ (full objects: Lunch, │
│ │ │ Physical, Consultation...) │
├─────────────────────────┤ ├──────────────────────────────┤
│ scheduletemplate │ │ Availability Templates │
│ (48-96 char timecode │ │ (arrange suggestions into │
│ string) │ │ time slots with durations) │
├─────────────────────────┤ ├──────────────────────────────┤
│ scheduledate │ │ Applied Availabilities │
│ (provider + date + │ │ (template applied to │
│ template name ref) │ │ provider for specific dates)│
├─────────────────────────┤ ├──────────────────────────────┤
│ appointment │ │ Appointments │
│ (provider + patient + │ │ (+ types, reasons, statuses, │
│ time + status) │ │ priorities, sites, rooms) │
└─────────────────────────┘ └──────────────────────────────┘
OSCAR: character-based timecodes ACCURO: proper relational model
joined by varchar refs with typed API resources
API Access — Gated Behind Business Agreement¶
This is the critical business constraint:
- Email
inquiry@AccuroEMR.comwith your company details - Business discussion with QHR team
- Sign Terms of Use (DocuSign)
- Receive OAuth 2.0 credentials + 6-month sandbox
- Complete sandbox/UAT testing + privacy and security review
- Sign production agreement
- All costs borne by the vendor
- Not listed on QHR marketplace until you have at least one live implementation
Sources: - https://accuroemr.com/accuroapi/ - https://accuroemr.com/vendor-expectations/
What This Means for Your Strategy¶
Your OscarSoapAdapter does NOT work here.
Accuro needs a separate AccuroRestAdapter implementing the same IEmrAdapter interface but talking REST/OAuth 2.0 to completely different endpoints.
The scheduling concepts map (templates → applied availabilities → appointments) but the protocol and data shapes are entirely different.
Good news: Accuro's API is vastly better documented than OSCAR's, with proper OpenAPI specs you can generate client code from.
3. Med Access EMR¶
What It Is¶
NOT OSCAR. Not even close.
Proprietary EMR built by Med Access Inc. (Kelowna, BC, founded ~2002).
- Acquired by: TELUS Health in March 2014
- Current status: One of TELUS's two primary EMR products (alongside PS Suite)
- Market: ~2,000+ physicians across BC, AB, SK, MB, ON, NS, NL
- OntarioMD certified
- Web-based, TELUS-hosted cloud
Med Access API — Walled Garden¶
This is the hardest integration target of the three:
| Attribute | Value |
|---|---|
| Protocol | GraphQL (TELUS CHR Enterprise API) NOT REST, NOT SOAP, NOT FHIR |
| Auth | JWT (RS512 algorithm) |
| Documentation | NOT public. Available only to approved partners. |
| Access | Must request through TELUS. They provision everything. |
FHIR¶
TELUS publishes FHIR R4 profiles on Simplifier.net ("TELUS Patient Chart") but this appears to be push-only data extraction, not a full read/write API.
Cloud Connect¶
OceanMD connects via TELUS Cloud Connect middleware. Requires EMR Instance ID + EMR Secret from TELUS.
There is no self-service developer portal. You fill out an Integration Request Form with TELUS, they decide whether to work with you, they provision credentials, they control the connection.
This is a walled garden.
Who Integrates with Med Access¶
OceanMD (Confirmed)¶
Source: https://support.cognisantmd.com/hc/en-us/sections/360002957851-TELUS-Med-Access-Integration-Set-Up
- Via TELUS Cloud Connect
- Full eReferrals, eConsults, patient messaging, eForms
Cortico — NOT officially integrated¶
Source: https://help.cortico.ca/help/emr-compatibility
- Listed as "In Progress" on Cortico's compatibility page
- Explicit statement:
"While users of Med Access and PSS may use Cortico, we have no partnership with TELUS, and Cortico is not a TELUS-endorsed integration."
Tali AI (Confirmed)¶
Source: https://help.tali.ai/en/articles/9672039-tali-ai-s-integration-with-med-access
- AI medical scribe, officially integrated via TELUS
What This Means for Your Strategy¶
This is a separate adapter AND a separate business relationship.
You'd need: - TELUS partnership approval - GraphQL client (not REST, not SOAP) - JWT auth with RS512 signing - Completely different data model mapping
Med Access is the hardest and lowest-priority integration target.
Even Cortico — the most established OSCAR booking platform — hasn't been able to officially integrate with Med Access.
Summary: Three EMRs, Three Realities¶
| Attribute | Juno EMR | Accuro EMR | Med Access EMR |
|---|---|---|---|
| Based on OSCAR | YES (fork) | NO | NO |
| Owner | WELL Health | Loblaw/SDM | TELUS Health |
| API Protocol | SOAP + REST | REST only | GraphQL |
| Auth | WS-Security + OAuth 1.0a | OAuth 2.0 | JWT (RS512) |
| API Docs | WSDL + WADL (self-serve) | OpenAPI/Swagger (public) | NOT public (gated) |
| Schedule API | getDayWorkSchedule (SOAP only) | Full REST CRUD + templates | Unknown (GraphQL) |
| Access Model | IP whitelist + credentials | Business agreement + 6mo sandbox | TELUS approval + provisioning (walled garden) |
| Hosting | Cloud (WELL) | Citrix Cloud | Cloud (TELUS) |
| Database | MariaDB | SQL Server | Unknown |
| FHIR | No (OSCAR Pro has it) | No (via Ocean only) | Partial (TELUS FHIR profiles) |
| Your Adapter | OscarSoapAdapter (SAME as OSCAR!) | AccuroRestAdapter (NEW, ~400 lines) | MedAccessGraphQLAdapter (NEW, hardest, needs TELUS partnership) |
| Effort | ZERO (reuse OSCAR adapter) | MEDIUM (good docs, clear API) | HIGH + business dev required |
| Priority | FREE — comes with OSCAR adapter | 2nd target after OSCAR | Last target (even Cortico can't do it) |
How This Maps to Your Adapter Strategy¶
IEmrAdapter interface
│
├── OscarSoapAdapter → OSCAR + Juno + OSCAR Pro + MedAccess(Oscar-based)
│ (one adapter, four EMRs — all OSCAR forks)
│ getDayWorkSchedule via SOAP
│ addAppointment via SOAP
│ Auth: WS-Security
│
├── AccuroRestAdapter → Accuro EMR
│ /v1/provider-portal/scheduler/* via REST
│ availability-templates + applied-availabilities
│ Auth: OAuth 2.0
│ Good docs, clear path, business agreement needed
│
├── MedAccessAdapter → Med Access EMR (TELUS)
│ GraphQL via TELUS CHR Enterprise API
│ Auth: JWT RS512
│ Requires TELUS partnership
│ Lowest priority, hardest access
│
└── FhirR4Adapter → US EHRs (Epic, Cerner) + future Canadian FHIR
FHIR Schedule/Slot/Appointment resources
Auth: SMART on FHIR / OAuth 2.0
Future play (US market or CA 2029+)
The adapter pattern holds. Each EMR speaks a different language, but your BookingEngine doesn't care — it calls the same IEmrAdapter methods regardless.
The strategy is sound across all target EMRs.
Next: Adapter Implementations — Technical details of each adapter