MediVoice supports bi-directional EMR integration. This means:
MediVoice supports four integration methods. Choose the one that matches your EMR's capabilities:
| Method | Protocol | Best for | Effort |
|---|---|---|---|
| 1. FHIR R4 Server | HL7 FHIR R4 REST API | Epic, Cerner, OpenMRS, any FHIR-compliant EMR | Low — your EMR just queries our API |
| 2. FHIR R4 Client | HL7 FHIR R4 REST API | MediVoice reads from / writes to your EMR's FHIR endpoint | Low — we connect to your FHIR server |
| 3. REST API Adapter | Custom REST/webhook | Proprietary EMRs with a REST API | Medium — build a small adapter |
| 4. File Import/Export | PDF, JSON, CSV | EMRs with no API — manual or scheduled file exchange | Low — no real-time sync |
MediVoice exposes a standards-compliant FHIR R4 REST API. Your EMR system (or a middleware) queries it to pull patient data.
https://medivoice.cloud/fhir
All requests (except /metadata) require a Bearer token:
Authorization: Bearer <your-integration-token>
The token is provisioned per-tenant. Contact your MediVoice administrator to generate one.
| Resource | Endpoint | Search Parameters | What it returns |
|---|---|---|---|
| Patient | GET /fhir/Patient | identifier (MRN), name | Patient demographics from encounters |
| Encounter | GET /fhir/Encounter | patient | Clinical encounters (visit records) |
| Condition | GET /fhir/Condition | patient | Diagnoses with ICD-10/SNOMED codes |
| DocumentReference | GET /fhir/DocumentReference | patient | Finalized clinical reports (base64 JSON) |
| ServiceRequest | GET /fhir/ServiceRequest | patient | Investigation orders (labs, imaging) |
| MedicationRequest | GET /fhir/MedicationRequest | patient | Medication/management orders |
curl -H "Authorization: Bearer YOUR_TOKEN" \
"https://medivoice.cloud/fhir/Condition?patient=MRN-12345"
Response (FHIR R4 Bundle):
{
"resourceType": "Bundle",
"type": "searchset",
"total": 2,
"entry": [
{
"fullUrl": "https://medivoice.cloud/fhir/Condition/101",
"resource": {
"resourceType": "Condition",
"id": "101",
"clinicalStatus": {
"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-clinical", "code": "active"}]
},
"code": {
"coding": [{"system": "http://hl7.org/fhir/sid/icd-10", "code": "E11.9", "display": "Type 2 Diabetes Mellitus"}],
"text": "Type 2 Diabetes Mellitus"
},
"subject": {"reference": "Patient/MRN-12345"},
"recordedDate": "2026-07-15T10:30:00+00:00"
}
}
]
}
Check what MediVoice supports without authentication:
curl https://medivoice.cloud/fhir/metadata
If your EMR exposes a FHIR R4 API (Epic, Cerner, OpenMRS), MediVoice can connect as a client to:
DocumentReference resources into the patient charthttps://your-emr.com/fhir)POST https://medivoice.cloud/api/ai/config
Content-Type: application/json
Authorization: Bearer <admin-session>
{
"task": "emr",
"provider_type": "fhir_r4",
"base_url": "https://your-emr.com/fhir",
"token": "YOUR_OAUTH_BEARER_TOKEN"
}
POST https://medivoice.cloud/api/emr/test
For EMRs with a custom REST API but no FHIR support, MediVoice provides an adapter framework:
Patient ↔ your patient table, Condition ↔ your diagnoses, etc.Contact support for the adapter specification.
For EMRs with no API at all, MediVoice can export reports as structured files:
Files can be delivered via:
Epic supports FHIR R4 via their App Orchard platform.
fhir.epic.comPatient.read, Condition.read, DocumentReference.writeDocumentReference into Epic's chartCerner supports FHIR R4 via code.cerner.com.
code.cerner.comOpenMRS has a built-in FHIR R4 module. This is the easiest integration:
Administration → Advanced Administration → Manage Modules)http://your-openmrs:8080/openmrs/ws/fhir2/R4Aegis is on the same infrastructure as MediVoice. Direct integration uses Aegis's integration API:
integration_credentials)provider_type: "aegis"POST /api/integration/clinical/documentPOST /api/integration/clinical/conditionsPOST /api/integration/clinical/ordersclinical_audit_logMediVoice uses a patient crosswalk table to link MediVoice patients to EMR patients:
| Matching method | How it works |
|---|---|
| MRN (preferred) | Medical Record Number — exact match |
| Name + DOB | Fuzzy match if MRN unavailable |
| Manual | Physician selects the correct patient during the encounter |
The crosswalk is stored per-tenant and remembered for future encounters.
To set up an EMR integration:
/api/emr/test endpoint