---
title: "Presence heartbeat — {in_focus, device_id?, blocking_permissions_enabled?, missing_blocking_permissions?}"
method: POST
path: "/class-session/{id}/heartbeat"
tags: ["class-session"]
---

# Presence heartbeat — {in_focus, device_id?, blocking_permissions_enabled?, missing_blocking_permissions?}

`POST /class-session/{id}/heartbeat`

## Request

- Base URL: `https://api.focusbear.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.focusbear.io/class-session/{id}/heartbeat`
- Auth: HTTP bearer

Report blocking_permissions_enabled as false when the OS reports a required permission missing (with missing_blocking_permissions naming them, e.g. ["accessibility"]), true when none is known missing, and omit both when the client cannot check. Omission/null preserves the latest explicit report within this session, including rejoins. While false, the student counts as opted out and earns no focus credit. Mac every 5s; others approximately 20-30s.

## Path parameters

- `id` string, uuid, required

## Request body

- HeartbeatDto
  - `in_focus` boolean, required
  - `blocking_permissions_enabled` boolean
  - `missing_blocking_permissions` string[]: Platform-specific names (e.g. `accessibility`); only read when blocking_permissions_enabled is false.
  - `device_id` string

## Response `201`

- object

---

[API](https://skmtc.dev/focusbear/apis/focusbear-api.md) - [All operations](https://skmtc.dev/focusbear/apis/focusbear-api/llms.txt) - [OpenAPI document](https://skmtc.dev/focusbear/apis/focusbear-api/revisions/3a83a3b9a811?raw)
