---
title: Get current org threshold (v2)
sidebar_label: Get current org threshold (v2)
description: "Get current org threshold (v2) using Ovok’s Slim API."
---

# Get current org threshold (v2)


| Method | Path |
| --- | --- |
| `GET` | `/v2/slim/threshold` |

[Authentication](/authentication) · [Access policies](/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`](/slim-apis/threshold/get-current-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)](/slim-apis/threshold/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

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

## Successful response

`200` — Current v2 threshold retrieved successfully.

```json
{
  "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. |
