Two kinds of key, both made by a clinic admin inside the app and shown once.
API keys · mza_…Admin → Integrations. Each key holds named scopes and can call only the routes those scopes open. It reaches its own clinic and nothing else, expires within two years, and is limited to 600 requests a minute.
Device keys · mzv_…Voice Inbox → Integrations. For a recorder or notetaker: it can open, feed and close voice sessions and read what became of them, and nothing else.
Patients · 8Find a patient, read the record your key is allowed to read, and check for duplicates before you create one.
✓GET/v1/documents/opd-card/:patientId/pdfOpd card: documents opd card pdf (one record)Scope: patient.read
✓GET/v1/patients/:patientIdThe full record needs a care relationship, not just the permission. Holding `patient.read` lets you read *a* patient, never *this* one.Scope: patient.read
✓GET/v1/scheduling/bookings/:groupId/cardOne appointment as a confirmation reads it: doctor, type, prep note, when.Scope: appointment.read
✓GET/v1/scheduling/bookings/:groupId/icsThe same appointment as a calendar file for a phone.Scope: appointment.read
✓GET/v1/scheduling/diaryThe calendar's read: a day or a week of bookings with the patient's name, the type and the state on each, for every resource at once.Scope: appointment.read· Query: facilityId, from, schedulableId, to
✓GET/v1/scheduling/schedulables/:id/dayOne resource's list for one day — the clinic's working view.Scope: appointment.read· Query: date
Admissions funnel · 5Read-only: report the admission pipeline to a referral partner or a dashboard.
◌POST/v1/voice/ingest/sessions/:id/segmentsAppend up to 200 segments. A segment id already stored is counted as a duplicate, not an error.Device key· JSON body· 600/min
Webhook events
Signed with HMAC-SHA256 and retried with backoff. Envelopes carry ids and changed field names, never clinical content.
{
"error": {
"code": "VALIDATION_FAILED",
"message": "phone must be a valid mobile number.",
"requestId": "req_01J…"
}
}
Send an Idempotency-Key header on writes so a retry is a no-op, not a duplicate. A 429 means slow down; quote the requestId when you write to us. The developer guide walks through pushing a lead and verifying a webhook signature end to end.