# Core signals

> Vitals, presence and movement. Every insight Cymo offers is built on these three.

## Every signal is a measurement

Signals live in each person's `signals`, keyed by name with the unit in it. Each one is a measurement with its own `value`, `timestamp` and `confidence` between 0 and 1, plus the `model` that produced it. A value Cymo can't measure right now is `null`, with a `reason` such as `motion` when it is known.

## Vitals

Breathing rate, heart rate and heart rate variability, read from the movement of the chest: `respiration_rate_per_min`, `heart_rate_bpm` and `rmssd_ms`. HRV is only reported when Cymo can measure beat-to-beat intervals; it is never estimated from heart rate.

Vitals are **consumer-grade and measured at rest**: sitting, lying or sleeping. They are a wellness measurement, not a medical one.

## Presence

Whether a room is occupied, how many people and pets are in it, and where each person is: `occupied`, `person_count` and `pet_count` on the room, and `position` (metres in the room's frame), `zone_ids` and `posture` on each person. Presence works when someone is perfectly still, which is where motion sensors fail.

## Movement

How each person moves: `speed_mps`, `activity` such as walking or sitting up, and `fall_state` after a fall. Falls also arrive as `fall.detected` events.

## Reading only what you need

`/v1/vitals`, `/v1/presence` and `/v1/movement` each return one signal group, selected by `room_id`, `person_id` or `track_id`, for example `/v1/vitals?room_id=room_bedroom`. To get several at once, read the room snapshot and pass `include`, for example `include=vitals,presence`.
