Skip to main content

List medical notifications

MethodPath
GET/v1/slim/notifications/medical

Authentication · Access policies

Lists your project's medical notifications (heart rate, respiratory rate and other vital-sign alerts), newest first, one page at a time. Medical episodes are decided by Signals; Ovok reads them from Signals, adds the resident context, and never re-derives a clinical value.

Auth: Bearer token. The caller must be a practitioner, an admin, a super admin, or hold the "System Owner" access policy. The access policy must grant Patient:read, Device:read and Location:read (admins and super admins skip this check). Scope: The caller's project (from the token), applied on both sides: Signals filters on the resident's project stamp, and Ovok checks each resolved resident against your project.

Behaviour​

  • One row per episode, not per reading: a run of readings outside the band is one episode, which closes on recovery or acknowledgement.
  • Each row has three blocks. episode is the Signals episode with its aggregates. carehub is the resident context Signals does not hold: resident, room and bed, device, zone. Its fields are null when the resident has no device assigned. acknowledgement is null until someone acknowledges the episode.
  • Use episode.id with GET /v1/slim/notifications/medical/{episodeId} to get the full value history.
  • episode.firedBand is the band the episode was judged under: the band Signals recorded when it fired, or else the band rebuilt from Signals' configuration history at the episode's trigger version. It is not the resident's current band, so editing a threshold does not change past rows. min and max are each nullable (a band can be one-sided). firedBand is null when the band cannot be established; that never fails the read.
  • Filters: status (OPEN or CLOSED, both when omitted), since (episodes opened at or after this ISO 8601 instant), acknowledged (true, 1 or yes for acknowledged only; any other value for unacknowledged only; both when omitted).
  • patient narrows the feed to one resident, by Medplum Patient.id (the carehub.patientId a row returns). It does not change the project scope. A resident who cannot be resolved, or who is in another project, answers 404 rather than an unfiltered page.
  • codes narrows the feed to these LOINC codes, comma separated, at most 32 (for example 8867-4,9279-1). Perfusion index is PI. Signals applies the filter. Out-of-bed is never in this feed.
  • Paging: limit is 1 to 200 (default 50). Pass the previous page's nextCursor as cursor. Page until nextCursor is null, not until a short page arrives: rows whose resident cannot be resolved into your project are dropped after Signals counted them.
  • A resident with no Signals project stamp matches no project and does not appear.
  • When the project's Signals tenant has episodic alerts switched off, the page is empty.
  • Out-of-bed is served by GET /v1/slim/notifications/oob.
  • A 503 with signals_unavailable means Signals could not be reached; retry after retryAfterSec.

Example​

curl -X GET 'https://api.sandbox.ovok.com/v1/slim/notifications/medical?status=OPEN&codes=8867-4,9279-1&limit=50' \
-H "Authorization: Bearer ${OVOK_TOKEN}"

Successful response​

200 — A page of medical notifications.

Errors​

StatusMeaning
401Bearer token is missing, invalid or expired.
403You are not a practitioner, admin or System Owner, you lack Patient:read, Device:read or Location:read, your session has no project, or you cannot access the project.
404The patient filter names a resident who cannot be resolved or is not in your project.
422A query parameter fails validation.