Skip to main content

Summaries

Summaries are daily aggregates computed by the SDK from the raw metrics. Each summary covers one day and holds both day-level totals — total steps, average heart rate — and a list of slots, which are periodic buckets within that day.

The slot length is set by slotsIntervalSecs when you initialise the Data SDK; see Data SDK configuration. With a 10-minute slot interval, a day's summary carries slots for 00:00–00:10, 00:10–00:20, and so on, each averaging the raw metrics in that window.

Reading summaries

Each summary has a repository on the Data SDK manager:

val manager = DataSdk.getInstance().getManager()

manager.stepsSummaryRepository.getByDate("2026-07-21") { summary ->
Log.d("Corsano-SDK", "Steps today: ${summary?.stepCount}")
}
ModelRepository
StepsSummaryModelstepsSummaryRepository
HeartRateSummaryModelheartRateSummaryRepository
RespirationSummaryModelrespirationSummaryRepository
SpO2SummaryModelspo2SummaryRepository
TemperatureSummaryModeltemperatureSummaryRepository
SleepSummaryModelsleepSummaryRepository
MetricBloodPressureSummarybloodPressureSummaryRepository
EmographySummaryModelemographySummaryRepository

Repository methods

Every summary repository exposes the same surface. Results arrive through a callback.

MethodParametersDelivers
getByDate(date, result)date: String"yyyy-MM-dd"T?
getByTimestampRange(start, end, result)start: Long, end: LongArray<T>?
getAll(result)Array<T>?
deleteByDate(date, onSuccess, onError)date: String
deleteByTimestampRange(start, end, onSuccess, onError)start: Long, end: Long
deleteAll(onSuccess, onError)

onSuccess and onError are optional. Note the difference from the metric repositories, which are keyed by timestamp: summaries are fetched by date string.

To be notified when a summary changes rather than polling for it, use the value updaters — see Data events.

Field conventions

  • serverDate is the primary key on every summary except blood pressure: the local day, formatted "yyyy-MM-dd".
  • startTimestamp / endTimestamp are UTC milliseconds, bounding the day — midnight of the day, and midnight of the day after.
  • Slot timestamp is UTC milliseconds; slot date is the matching local time, formatted yyyy-MM-dd'T'HH:mm:ss.SSSXXX.
  • uuid is present on most models but not used by the SDK.
  • Quality fields run 0–4, where 0 is unusable and 4 is very good. See Quality.

Steps

StepsSummaryModel

FieldTypeDescription
serverDateStringLocal day, primary key
stepCountIntTotal steps for the day
stepDistanceFloatDistance in metres, estimated from the step count assuming a height of 175 cm
stepCaloriesIntTotal calories for the day (active + rest) in kcal
goalStepPercentageIntPercentage against a 10 000-step goal. 3 000 steps gives 30
startTimestampLongMidnight of the day, UTC ms
endTimestampLongMidnight of the following day, UTC ms
stepsSlotsRealmList<StepsSlotModel>Per-slot breakdown
uuidStringNot used
moveEveryHourIntDeprecated — always zero
workoutsCountIntDeprecated — always zero

Note: stepDistance assumes a fixed 175 cm height rather than the height on the user profile, and goalStepPercentage is computed against a fixed 10 000-step goal. Neither is configurable.

StepsSlotModel

FieldTypeDescription
timestampLongSlot start, UTC ms, primary key
dateStringLocal date of the slot
stepCountIntSteps in the slot
energyExpDoubleEnergy expenditure in kcal (active + passive)
speedDouble?Speed in m/s
activityTypeInt?0 UNSPECIFIED, 1 OTHER, 2 WALK, 4 RUN, 6 CYCLE, 7 REST

Heart rate

HeartRateSummaryModel

FieldTypeDescription
serverDateStringLocal day, primary key
avgDailyHeartRateIntAverage heart rate across the day
maxDailyHeartRateIntHighest heart rate of the day
restDailyHeartRateIntResting heart rate of the day
restHeartRateTimeIntMinutes in the rest zone
warmUpHeartRateTimeIntMinutes in the warm-up zone
fatBurnHeartRateTimeIntMinutes in the fat-burn zone
enduranceHeartRateTimeIntMinutes in the endurance zone
performanceHeartRateTimeIntMinutes in the performance zone
maxHeartRateTimeIntMinutes in the maximum zone
startTimestampLongMidnight of the day, UTC ms
endTimestampLongMidnight of the following day, UTC ms
heartRateSlotsRealmList<HeartRateSlotModel>Per-slot breakdown
syncedBooleanInternal sync flag
uuidStringNot used
allActiveTimeIntAlways zero — the SDK never populates it
dailyPercentInt?Always null — the SDK never populates it

Heart rate zones

The six *Time fields are durations in minutes, one per zone. Zone boundaries are derived from the wearer's age:

maxHeartRate = 220 - age
FieldHeart rate range
restHeartRateTimebelow 50% of maxHeartRate
warmUpHeartRateTime50% – 60%
fatBurnHeartRateTime60% – 70%
enduranceHeartRateTime70% – 80%
performanceHeartRateTime80% – 90%
maxHeartRateTimeabove 90%

Only raw metrics where the bracelet was worn and the heart rate quality was above 0 are counted; everything else is skipped. The age comes from the user profile, so set it — see User Profile.

Warning: The counted samples are divided by a fixed factor of 6 to convert them to minutes, which assumes raw metrics arrive every 10 seconds. The divisor does not adapt to the configured sampling rate, so these durations are only accurate on a 10-second interval. See Set Sampling rate.

HeartRateSlotModel

FieldTypeDescription
timestampLongSlot start, UTC ms, primary key
dateStringLocal date of the slot
bpmInt?Average heart rate over the slot
bpm_qInt?Average heart rate quality [0-4]

Respiration

RespirationSummaryModel

FieldTypeDescription
serverDateStringLocal day, primary key
averageFloatAverage respiration rate for the day, breaths/min
slotsRealmList<RespirationSlotModel>Per-slot breakdown
startTimestampLongMidnight of the day, UTC ms
endTimestampLongMidnight of the following day, UTC ms
uuidStringNot used

RespirationSlotModel

FieldTypeDescription
timestampLongSlot start, UTC ms, primary key
dateStringLocal date of the slot
rateFloatAverage respiration rate over the slot, breaths/min
qualityFloatAverage quality [0-4]. Note this is a Float, unlike most quality fields

SpO2

SpO2SummaryModel

FieldTypeDescription
serverDateStringLocal day, primary key
averageIntAverage SpO2 for the day
slotsRealmList<Spo2SlotModel>Per-slot breakdown
startTimestampLongMidnight of the day, UTC ms
endTimestampLongMidnight of the following day, UTC ms
uuidStringNot used

Spo2SlotModel

FieldTypeDescription
timestampLongSlot start, UTC ms, primary key
dateStringLocal date of the slot
valueInt?Average SpO2 over the slot
qualityInt?Average quality [0-4]. Values 103–106 carry a specific meaning — see Quality

Temperature

TemperatureSummaryModel

FieldTypeDescription
serverDateStringLocal day, primary key
average1FloatDaily average of temp1
average2FloatDaily average of temp2
slotsRealmList<TemperatureSlotModel>Per-slot breakdown
startTimestampLongMidnight of the day, UTC ms
endTimestampLongMidnight of the following day, UTC ms
uuidStringNot used

TemperatureSlotModel

FieldTypeDescription
timestampLongSlot start, UTC ms, primary key
dateStringLocal date of the slot
temp1FloatB2: core body temperature in °C
temp2FloatB1: skin temperature in °C. On B2, skin temperature at night

As with MetricTemperature, temp1 and temp2 mean different things depending on the bracelet.

Sleep

SleepSummaryModel

Unlike the other summaries, a sleep summary covers a night, not a calendar day. Its serverDate is the day the sleep session ended.

FieldTypeDescription
serverDateStringDay the sleep session ended, primary key
dateDateThe same day as a Date object
sleepDurationIntTotal sleep in seconds — REM + light + deep. Excludes awake time
remTimeIntSeconds in REM sleep
lightTimeIntSeconds in light sleep
deepTimeIntSeconds in deep sleep
awakeTimeIntSeconds awake during the session
sleepNeedDurationIntTarget sleep in seconds
performanceIntsleepDuration / sleepNeedDuration × 100, as a percentage
tranquilityIntNumber of wake-ups during the night, not a score
goalSleepPercentageIntPercentage of the sleep goal reached
startTimestampLong?First slot of the session, UTC ms
endTimestampLong?Last slot of the session, UTC ms
sleepSlotsRealmList<SleepSlotModel>Per-slot sleep states
slotDurationSecondsIntComputed: seconds covered by one slot, derived from the first two slots
uuidStringNot used

Note: Despite its name, tranquility is a count of wake-ups. A higher value means a more disturbed night, not a calmer one.

Warning: sleepNeedDuration is currently hard-coded to 7 hours (25 200 seconds). The sleepGoalMinutes, sleepCatchUpMinutes and sleepIntensityMinutes values in Sleep Settings are not applied to it, so performance and goalSleepPercentage are computed against 7 hours regardless of what you configure.

For how sessions are detected and processed, see Sleep processing.

SleepSlotModel

FieldTypeDescription
timestampLongSlot start, UTC ms, primary key
startDateStringLocal start time of the slot
endDateStringLocal end time of the slot
sleepStateIntRaw state value
sleepTypeSleepTypeComputed: sleepState mapped to the enum below
enum class SleepType(var value: Int) {
NONE(0),
AWAKE(1),
LIGHT(2),
DEEP(3),
REM(4)
}

Prefer reading sleepType over sleepState — the numeric values are not in a natural order, so comparing sleepState directly is misleading.

Blood pressure

Produced by NIBP. See NIBP for calibration and measurement.

MetricBloodPressureSummary

FieldTypeDescription
startTimestampLongStart of the period, UTC ms — primary key
endTimestampLongEnd of the period, UTC ms
serverDateStringLocal day
averageSysInt?Average systolic pressure
averageDiaInt?Average diastolic pressure
maxDaySysInt?Highest systolic reading of the day
maxDayDiaInt?Highest diastolic reading of the day
minDaySysInt?Lowest systolic reading of the day
minDayDiaInt?Lowest diastolic reading of the day
slotsRealmList<MetricBloodPressureSummarySlot>Per-slot breakdown

Note: This is the one summary whose primary key is startTimestamp rather than serverDate, and it carries no uuid. Its slot interval is governed by nibpSlotsIntervalSecs, which defaults to 2 hours with a 30-minute minimum — not by slotsIntervalSecs.

MetricBloodPressureSummarySlot

FieldTypeDescription
startTimestampLongSlot start, UTC ms, primary key
endTimestampLongSlot end, UTC ms
dateStringLocal start time of the slot
endDateStringLocal end time of the slot
systolicPressureInt?Systolic pressure for the slot
diastolicPressureInt?Diastolic pressure for the slot

EmographySummaryModel (B2 only)

EmoGraphy — also called EDA or stress data. Only produced when EmoGraphy is enabled; see Stress data.

FieldTypeDescription
serverDateStringLocal day, primary key
stressLevelSkinConductanceAvgIntDaily average stress level from skin conductance [0-1000]
slotsRealmList<EmographySlotModel>Per-slot breakdown
startTimestampLongMidnight of the day, UTC ms
endTimestampLongMidnight of the following day, UTC ms
uuidStringNot used

Note: The day-level summary carries only the skin-conductance average. Cognitive zone values exist per slot only.

EmographySlotModel (B2 only)

FieldTypeDescription
timestampLongSlot start, UTC ms, primary key
dateStringLocal date of the slot
cognitiveZoneIntCognitive zone [0-3]: 0 undefined, 1 under-stimulated, 2 balanced, 3 over-stimulated
cognitiveZoneQIntQuality of the cognitive zone [0-4]
predictiveCZIntPredicted cognitive zone [0-3]
predictiveCZTransitionTimeIntMinutes until the predicted transition [0-65535]
czHourIntCognitive zone one hour ahead [0-3]
cortisolContributionLongCortisol contribution
stressLevelSkinConductanceIntStress level from skin conductance [0-1000]
stressLevelSkinConductanceQIntQuality of the skin conductance value [0-4]

The slot fields mirror MetricEmography.