Overview
HANA’s EHR Proxy provides a standardized REST API that abstracts the differences between EHR systems. Write once against HANA’s API, and the Proxy handles translation to Epic, Cerner, Athena, AllScripts, or any FHIR-enabled system. Base URL:https://api.hana.health/v1
Authentication: All requests require an X-API-KEY header and X-ORG-ID header.
Patients
List Patients
Retrieves a list of patients for a practitioner.| Name | In | Type | Required | Description |
|---|---|---|---|---|
| X-API-KEY | header | string | Yes | API key |
| X-ORG-ID | header | string | Yes | Organization ID |
| practitioner_id | query | string | No | Filter by practitioner |
| practitioner_email | query | string | No | Alternative practitioner lookup |
| count | query | integer | No | Results to return (default: 20) |
| include_fhir | query | boolean | No | Include raw FHIR in response |
Create Patient
Confirm Patient Identity
Validates if a patient exists. Requires either (first_name + last_name + date_of_birth) OR (phone_number).Patient Records
Get Patient Record
Retrieves a comprehensive patient record.Get Vital Signs
Update Vital Signs
Get Lab Results
Get Medications
Get Insurance
Update Insurance
Practitioners
List Practitioners
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| count | query | integer | No | Results to return (default: 20) |
| include_fhir | query | boolean | No | Include FHIR format |
Appointments
List Appointments
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| start_date_time | query | string | Yes | Start of range (ISO 8601) |
| end_date_time | query | string | Yes | End of range (ISO 8601) |
| practitioner_id | query | string | No | Filter by practitioner |
| patient identifiers | query | various | No | Filter by patient |
| count | query | integer | No | Results to return |
Book Appointment
Reschedule Appointment
Cancel Appointment
Get Open Slots
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| start_date_time | query | string | Yes | Start of search window |
| end_date_time | query | string | No | End of search window |
| practitioner_id | query | string | No | Filter by practitioner |
Pre-Visit Notes
Encounters & Clinical Notes
Get Encounter Notes
Create Encounter Note
Update Encounter Note
Delete Encounter Note
SOAP Note Sections
Get or update individual SOAP sections:Add Chief Complaints
["string"]
Add Intake Questionnaire
Clinical Codes
Add ICD-10 Codes
["I10", "E11.9", "F32.1"]
Add CPT Codes
["99213", "99490", "96127"]
Medications & Patient Instructions
Add Medications
["Lisinopril 10mg daily", "Metformin 500mg BID"]
Add Patient Instructions
["Schedule follow-up in 2 weeks", "Monitor blood pressure daily"]
Conversations
Create Conversation
Initiate an AI-driven patient conversation.Get Conversation
List Conversations
Get Transcript
Metadata
List Protocols
List Note Templates
List Note Fields
Monitoring
Health Check
EHR Connection Health
Error Handling
All errors follow a consistent format:| Code | HTTP Status | Description |
|---|---|---|
| UNAUTHORIZED | 401 | Invalid or missing API key |
| FORBIDDEN | 403 | Insufficient permissions |
| PATIENT_NOT_FOUND | 404 | No matching patient |
| APPOINTMENT_NOT_FOUND | 404 | No matching appointment |
| INVALID_INPUT | 400 | Malformed request |
| EHR_UNAVAILABLE | 503 | EHR system temporarily unreachable |
| RATE_LIMITED | 429 | Too many requests |
Rate Limits
| Tier | Requests/minute | Burst |
|---|---|---|
| Standard | 60 | 100 |
| Scale | 300 | 500 |
| Enterprise | 1,000 | 2,000 |