Get current org threshold (v2)
| Method | Path |
|---|---|
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.heartRateandsettings.respiratoryRatecarrymode: "organization"with absoluteminandmax. A home stored on a baseline band before baseline bands became per-resident still reads back asmode: "baseline"withdeviationPercent. A PUT no longer accepts that, so such a home must send an absolute band.settings.outOfBed.maxDurationSecondsis a non-negative multiple of 60.deviationPercentis the home's relative out-of-bed band, ornull.baselineAverageandeffectiveMaxDurationSecondsare per resident, so they arenullhere; see Get patient effective threshold (v2).settings.bedTimePeriodis a top-level field, separate fromoutOfBed.timezoneis resolved by the server: the home's time zone (Europe/Berlin unless the home set one), in whichstartandendare 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.rangesis 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,perfusionIndexandbodyTemperaturearenulluntil the home watches the vital, else{ mode: "organization", enabled, min, max }, whereminormaxisnullfor a one-sided limit.- Not in v2:
sleepDuration,numberOfTimesGettingOutOfBed, standalonemeanHeartRate/meanRespiratoryRate,status,date, thepatient-automode, and the deprecateddurationSeconds. - A home with no thresholds yet gets an empty template: every metric disabled,
idisnullandupdatedAtis the time of the request. If the stored thresholds cannot be read, the route answers 502, never the empty template. signalsSyncis alwaysnullon 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
}
| Field | Type | Description |
|---|---|---|
id | string | null | The id of the stored threshold document. null for a home with nothing stored. |
projectId | string | The caller's project. |
updatedAt | string (ISO 8601 date-time) | null | When the home's thresholds were last saved. For a home with nothing stored, the time of the request. |
settings | object | The home's limits. |
settings.heartRate | object | Heart-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.enabled | boolean | Whether the limit alerts. |
settings.heartRate.min | number | Lower bound in beats per minute. Absolute shape only. |
settings.heartRate.max | number | Upper bound in beats per minute. Absolute shape only. |
settings.heartRate.deviationPercent | number | Baseline shape only: the symmetric deviation from the resident's baseline, in percent. |
settings.heartRate.baselineAverage | null | Baseline shape only. Always null: the baseline is per resident. |
settings.heartRate.effectiveBand | null | Baseline shape only. Always null: the band is per resident. |
settings.respiratoryRate | object | Respiratory-rate limit. Same fields as settings.heartRate, in breaths per minute. |
settings.outOfBed | object | Out-of-bed limit. |
settings.outOfBed.mode | "organization" | Always organization on this route. |
settings.outOfBed.enabled | boolean | Whether out-of-bed alerting is on. |
settings.outOfBed.maxDurationSeconds | integer | The longest exit allowed, in seconds. A multiple of 60. |
settings.outOfBed.deviationPercent | integer | null | The relative band: alert once an exit runs this many percent past the resident's usual one. null when off. |
settings.outOfBed.baselineAverage | null | Always null here: the usual exit length is per resident. |
settings.outOfBed.effectiveMaxDurationSeconds | null | Always null here: the limit in effect is per resident. |
settings.bedTimePeriod | object | The window in which out-of-bed is checked. |
settings.bedTimePeriod.mode | "organization" | Always organization on this route. |
settings.bedTimePeriod.start | string (HH:MM:SS) | Window start, wall-clock time in timezone. |
settings.bedTimePeriod.end | string (HH:MM:SS) | Window end. Equal to start means 24 hours; before start crosses midnight. |
settings.bedTimePeriod.timezone | string | null | IANA time zone the window is read in. null only if the home's zone could not be read. |
settings.oxygenSaturation | object | null | SpO₂ limit. null until the home watches the vital. |
settings.oxygenSaturation.mode | "organization" | Always organization on this route. |
settings.oxygenSaturation.enabled | boolean | Whether the limit alerts. |
settings.oxygenSaturation.min | number | null | Lower bound, or null for none. |
settings.oxygenSaturation.max | number | null | Upper bound, or null for none. |
settings.pulseRate | object | null | Pulse-rate limit. Same fields as settings.oxygenSaturation. |
settings.perfusionIndex | object | null | Perfusion-index limit. Same fields as settings.oxygenSaturation. |
settings.bodyTemperature | object | null | Body-temperature limit. Same fields as settings.oxygenSaturation. |
ranges | object | The range each vital's limits may take in this home. Always present. |
ranges.heartRate | object | { min, max }, both number. Same shape for ranges.respiratoryRate, ranges.oxygenSaturation, ranges.pulseRate, ranges.perfusionIndex and ranges.bodyTemperature. |
signalsSync | null | Always null on a read. |
Errors
| Status | Meaning |
|---|---|
400 | Your session has no project. |
401 | Bearer token is missing, invalid or expired. |
403 | You are not a practitioner, admin or System Owner, or you lack PlanDefinition:read. |
502 | The home's stored thresholds could not be read. |
503 | The access policy could not be read right now. Retry. |