A personal health record reader for iPhone. Documentation for health systems and reviewers.
Krates reads the medical records a person has already connected on their own device and helps them make sense of them. It charts each lab analyte over time against its reference range and surfaces a small number of findings worth raising with a clinician — a value drifting inside its normal range, a result never followed up, a panel whose usual rhythm has lapsed.
It is used by one person reading their own record, or by a parent or carer reading the record of someone they are responsible for.
Read-only. Krates never writes to any FHIR resource and calls no write API. It requests a patient-facing standalone launch with these scopes and no others:
| Scope | USCDI v3 data class | Used for |
|---|---|---|
patient/Patient.read | Patient Demographics | Sex and age band, which select the applicable reference interval |
patient/Observation.read | Laboratory, Vital Signs | The results themselves |
patient/Condition.read | Problems | Whether a diagnosis has matching monitoring |
patient/MedicationRequest.read | Medications | Whether a medication has its conventional safety labs |
patient/Encounter.read | Encounter Information | Encounter class only, to keep results drawn during an admission off a trend line |
Also openid and fhirUser. No refresh tokens and no
offline_access: each session is authorised afresh by the patient.
Public native client using PKCE (S256). Krates holds no client secret and no
signing key, because an iOS application cannot keep one — anything compiled into
the binary can be read out of it. The redirect URI is
https://mpotamias.github.io/oauth/callback, a static page that
hands the authorization code back to the app through its custom URL scheme;
Epic's authorize endpoint does not accept a custom scheme directly.
Records are stored only in the app's local database on the patient's iPhone, protected by the device passcode and Apple's file encryption. There is no account, no cloud sync, and no server that holds a patient record. Deleting the app deletes its database.
One optional feature sends data off the device: the sentences on a finding card, and any question the patient types into a card's chat box, are written by a language model. A first-run screen shows exactly what would be sent before anything is sent, and it can be switched off at any time — every finding is still computed on the phone either way.
What is sent: the measurements behind one finding (analyte, value, unit, reference range, date), sex and age band where a finding depends on them, and typed question text. Never sent: name, date of birth, address, email, phone, medical record number, or the name of any provider or clinician. These requests pass through a stateless relay that holds the model provider's API key so no key ships inside the app; it stores no request content, keeping only a per-device count for rate limiting. Devices authenticate to it with Apple's App Attest.
Krates makes no diagnosis and gives no treatment advice. It displays a person's own records, charts them against the reference ranges published with those records, and points out results a clinician may want to look at. Every card says so.
Krates is made by Lizwise Elv LLC — [email protected]