Skip to main content

Get current org threshold (v2)

MethodPath
GET/v2/slim/threshold

Authentication · Access policies

Returns the home's threshold configuration in the v2 shape: the alert limits every resident follows unless they have limits of their own.

This route supersedes GET /v1/slim/threshold. It adds ranges and a separate bedTimePeriod, shows the optional vitals in the v2 shape, folds baseline bands into heart rate and respiratory rate, and drops the metrics no editor uses.

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 PlanDefinition:read (admins and super admins skip this check). Scope: The caller's project (from the token).

Request​

No parameters.

Behaviour​

  • Read-only.
  • Heart-rate and respiratory-rate limits (and the optional vitals below) are evaluated by Signals. Ovok stores them and forwards them to Signals.
  • settings.heartRate and settings.respiratoryRate carry mode: "organization" with absolute min and max. A home stored on a baseline band before baseline bands became per-resident still reads back as mode: "baseline" with deviationPercent. A PUT no longer accepts that, so such a home must send an absolute band.
  • settings.outOfBed.maxDurationSeconds is a non-negative multiple of 60. deviationPercent is the home's relative out-of-bed band, or null. baselineAverage and effectiveMaxDurationSeconds are per resident, so they are null here; see Get patient effective threshold (v2).
  • settings.bedTimePeriod is a top-level field, separate from outOfBed. timezone is resolved by the server: the home's time zone (Europe/Berlin unless the home set one), in which start and end are wall-clock times. A window nobody stored reads as 19:00 to 09:00, and that is the window the out-of-bed check applies.
  • ranges is the range each vital's limits may take in this home. It is always present: what the home set, else the default (heart rate 40–120, respiratory rate 4–60, SpO₂ 70–100, pulse rate 40–120, perfusion index 0–20, body temperature 34–42).
  • settings.oxygenSaturation, pulseRate, perfusionIndex and bodyTemperature are null until the home watches the vital, else { mode: "organization", enabled, min, max }, where min or max is null for a one-sided limit.
  • Not in v2: sleepDuration, numberOfTimesGettingOutOfBed, standalone meanHeartRate / meanRespiratoryRate, status, date, the patient-auto mode, and the deprecated durationSeconds.
  • A home with no thresholds yet gets an empty template: every metric disabled, id is null and updatedAt is the time of the request. If the stored thresholds cannot be read, the route answers 502, never the empty template.
  • signalsSync is always null on a read. The home's limits are not checked against Signals here; use the resident route for that.

Example​

curl -X GET 'https://api.sandbox.ovok.com/v2/slim/threshold' \
-H "Authorization: Bearer ${OVOK_TOKEN}"

Successful response​

200 — Current v2 threshold retrieved successfully.

{
"id": "3f1c2b7e-8d4a-4c1e-9b2f-6a7d5e4c3b31",
"projectId": "3f1c2b7e-8d4a-4c1e-9b2f-6a7d5e4c3b11",
"updatedAt": "2026-10-09T08:30:00.000Z",
"settings": {
"heartRate": { "mode": "organization", "enabled": true, "min": 40, "max": 110 },
"respiratoryRate": { "mode": "organization", "enabled": true, "min": 8, "max": 25 },
"outOfBed": {
"mode": "organization",
"enabled": true,
"maxDurationSeconds": 600,
"deviationPercent": null,
"baselineAverage": null,
"effectiveMaxDurationSeconds": null
},
"bedTimePeriod": { "mode": "organization", "start": "19:00:00", "end": "09:00:00", "timezone": "Europe/Berlin" },
"oxygenSaturation": { "mode": "organization", "enabled": true, "min": 92, "max": null },
"pulseRate": null,
"perfusionIndex": null,
"bodyTemperature": null
},
"ranges": {
"heartRate": { "min": 40, "max": 120 },
"respiratoryRate": { "min": 4, "max": 60 },
"oxygenSaturation": { "min": 70, "max": 100 },
"pulseRate": { "min": 40, "max": 120 },
"perfusionIndex": { "min": 0, "max": 20 },
"bodyTemperature": { "min": 34, "max": 42 }
},
"signalsSync": null
}
FieldTypeDescription
idstring | nullThe id of the stored threshold document. null for a home with nothing stored.
projectIdstringThe caller's project.
updatedAtstring (ISO 8601 date-time) | nullWhen the home's thresholds were last saved. For a home with nothing stored, the time of the request.
settingsobjectThe home's limits.
settings.heartRateobjectHeart-rate limit. Either the absolute shape or, for a legacy home, the baseline shape below.
settings.heartRate.mode"organization" | "baseline"organization for an absolute band. baseline only for a legacy home stored on a baseline band.
settings.heartRate.enabledbooleanWhether the limit alerts.
settings.heartRate.minnumberLower bound in beats per minute. Absolute shape only.
settings.heartRate.maxnumberUpper bound in beats per minute. Absolute shape only.
settings.heartRate.deviationPercentnumberBaseline shape only: the symmetric deviation from the resident's baseline, in percent.
settings.heartRate.baselineAveragenullBaseline shape only. Always null: the baseline is per resident.
settings.heartRate.effectiveBandnullBaseline shape only. Always null: the band is per resident.
settings.respiratoryRateobjectRespiratory-rate limit. Same fields as settings.heartRate, in breaths per minute.
settings.outOfBedobjectOut-of-bed limit.
settings.outOfBed.mode"organization"Always organization on this route.
settings.outOfBed.enabledbooleanWhether out-of-bed alerting is on.
settings.outOfBed.maxDurationSecondsintegerThe longest exit allowed, in seconds. A multiple of 60.
settings.outOfBed.deviationPercentinteger | nullThe relative band: alert once an exit runs this many percent past the resident's usual one. null when off.
settings.outOfBed.baselineAveragenullAlways null here: the usual exit length is per resident.
settings.outOfBed.effectiveMaxDurationSecondsnullAlways null here: the limit in effect is per resident.
settings.bedTimePeriodobjectThe window in which out-of-bed is checked.
settings.bedTimePeriod.mode"organization"Always organization on this route.
settings.bedTimePeriod.startstring (HH:MM:SS)Window start, wall-clock time in timezone.
settings.bedTimePeriod.endstring (HH:MM:SS)Window end. Equal to start means 24 hours; before start crosses midnight.
settings.bedTimePeriod.timezonestring | nullIANA time zone the window is read in. null only if the home's zone could not be read.
settings.oxygenSaturationobject | nullSpO₂ limit. null until the home watches the vital.
settings.oxygenSaturation.mode"organization"Always organization on this route.
settings.oxygenSaturation.enabledbooleanWhether the limit alerts.
settings.oxygenSaturation.minnumber | nullLower bound, or null for none.
settings.oxygenSaturation.maxnumber | nullUpper bound, or null for none.
settings.pulseRateobject | nullPulse-rate limit. Same fields as settings.oxygenSaturation.
settings.perfusionIndexobject | nullPerfusion-index limit. Same fields as settings.oxygenSaturation.
settings.bodyTemperatureobject | nullBody-temperature limit. Same fields as settings.oxygenSaturation.
rangesobjectThe range each vital's limits may take in this home. Always present.
ranges.heartRateobject{ min, max }, both number. Same shape for ranges.respiratoryRate, ranges.oxygenSaturation, ranges.pulseRate, ranges.perfusionIndex and ranges.bodyTemperature.
signalsSyncnullAlways null on a read.

Errors​

StatusMeaning
400Your session has no project.
401Bearer token is missing, invalid or expired.
403You are not a practitioner, admin or System Owner, or you lack PlanDefinition:read.
502The home's stored thresholds could not be read.
503The access policy could not be read right now. Retry.