Krates

A personal health record reader for iPhone. Documentation for health systems and reviewers.

What it does

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 an adult (18 or over) reading their own record, or by a parent or carer reading the record of someone they are responsible for. It is offered in the United States only.

Access requested

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:

ScopeUSCDI v3 data classUsed for
patient/Patient.readPatient DemographicsSex and age band, which select the applicable reference interval
patient/Observation.readLaboratory, Vital SignsThe results themselves
patient/Condition.readProblemsWhether a diagnosis has matching monitoring
patient/MedicationRequest.readMedicationsWhether a medication has its conventional safety labs
patient/Encounter.readEncounter InformationEncounter 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.

Authentication

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.

Where the data goes

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.

Nothing from a record leaves the device unless the patient opts in. Optional AI features, each off until allowed on a screen that shows exactly what would be sent, use Google's Gemini (paid service): the sentences on a finding card and answers to questions typed into a card's chat. Every finding is still computed on the phone either way.

What is sent for wording: the results behind one finding (analyte, value, unit, reference range, date, and in chat the source it came from) and any conditions or medications it concerns, age in years, sex at birth and, if the patient entered them, country of birth, work and smoking status, and typed question text. Never sent: name, date of birth, address, email, phone, or medical record number. These requests pass through a relay that holds the model provider's API key so no key ships inside the app; it stores no request content. It keeps daily request counts per pseudonymous (hashed) device code for 35 days, for usage statistics and rate limiting. Devices authenticate to it with Apple's App Attest. AI features are off for any profile under 18.

Full detail: the privacy policy.

Not a medical device

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.

Contact

Krates is made by Lizwise Elv LLC — [email protected]

Privacy policy · Terms of use · Support · Consumer health data privacy policy