How to Save Heart Rate in HKCategoryTypeIdentifier.mindfulSession

I’m trying to associate heart rate (HR) data with a mindfulness session (HKCategoryTypeIdentifier.mindfulSession) in HealthKit, but I can’t find any documentation on how to do this.

I’ve seen third-party apps (like Medito) successfully log HR within Mindful Minutes, even when the session takes place on an iPhone (not an Apple Watch). However, when I try saving HR in the metadata, it does not appear in the Health app's Mindful Minutes section.

Code snippet:

func logMindfulnessSession(start: Bool, heartRate: Double? = nil) {
    let mindfulType = HKCategoryType.categoryType(forIdentifier: .mindfulSession)!
    let now = Date()
    let endTime = now.addingTimeInterval(Double(selectedDuration))

    var metadata: [String: Any]? = nil
    if let hr = heartRate {
        let heartRateUnit = HKUnit.count().unitDivided(by: HKUnit.minute())
        let hrQuantity = HKQuantity(unit: heartRateUnit, doubleValue: hr)
        metadata = ["heartRate": hrQuantity]  // ❓ Is there a correct key for HR?
    }

    let sample = HKCategorySample(
        type: mindfulType,
        value: 0,
        start: now,
        end: endTime,
        metadata: metadata
    )

    healthStore.save(sample) { success, error in
        if let error = error {
            print("HealthKit session save error: \(error.localizedDescription)")
        } else {
            print("Mindfulness session saved successfully.")
            if let hr = heartRate {
                print("Saved with HR: \(hr) BPM")
            }
        }
    }
}

Questions:

  • What is the correct metadata key for associating heart rate with a mindful session?
  • Does HealthKit require a specific format (e.g., HKQuantitySample) for HR?

0 Are there additional permissions needed to allow HR to appear in Mindful Minutes?

  • Does HR need to be stored separately in HKQuantityTypeIdentifier.heartRate, and if so, how do third-party apps ensure it appears in the same entry as the mindful session?

thank you!

Answered by DTS Engineer in 827892022

I don't think we expose any metadata key that can tie a heart rate to a mindful session as of today, but if you create a heart rate sample that is aligned to the time of the mindful session, as shown in the following code, the heart rate will show up in the Finess.app:

let endTime = Date()
let startTime = endTime.addingTimeInterval(-60 * 1)

let mindfulSessionSample = HKCategorySample(
    type: HKCategoryType(.mindfulSession),
    value: 0, start: startTime, end: endTime, metadata: nil
)

let heartRateUnit = HKUnit.count().unitDivided(by: HKUnit.minute())
let hrQuantity = HKQuantity(unit: heartRateUnit, doubleValue: 56)
let heartRateSample = HKQuantitySample(
    type: HKQuantityType(.heartRate),
    quantity: hrQuantity, start: startTime, end: startTime
)

healthStore.save([mindfulSessionSample, heartRateSample]) { success, error in
    if let error = error {
        print("HealthKit session save error: \(error.localizedDescription)")
    } else {
        print("Mindfulness session saved successfully.")
    }
}

Note that you need to have the user authorization to write / share the following HealthKit data types:

HKQuantityType(.heartRate),
HKCategoryType(.mindfulSession)

Best,
——
Ziqiao Chen
 Worldwide Developer Relations.

I don't think we expose any metadata key that can tie a heart rate to a mindful session as of today, but if you create a heart rate sample that is aligned to the time of the mindful session, as shown in the following code, the heart rate will show up in the Finess.app:

let endTime = Date()
let startTime = endTime.addingTimeInterval(-60 * 1)

let mindfulSessionSample = HKCategorySample(
    type: HKCategoryType(.mindfulSession),
    value: 0, start: startTime, end: endTime, metadata: nil
)

let heartRateUnit = HKUnit.count().unitDivided(by: HKUnit.minute())
let hrQuantity = HKQuantity(unit: heartRateUnit, doubleValue: 56)
let heartRateSample = HKQuantitySample(
    type: HKQuantityType(.heartRate),
    quantity: hrQuantity, start: startTime, end: startTime
)

healthStore.save([mindfulSessionSample, heartRateSample]) { success, error in
    if let error = error {
        print("HealthKit session save error: \(error.localizedDescription)")
    } else {
        print("Mindfulness session saved successfully.")
    }
}

Note that you need to have the user authorization to write / share the following HealthKit data types:

HKQuantityType(.heartRate),
HKCategoryType(.mindfulSession)

Best,
——
Ziqiao Chen
 Worldwide Developer Relations.

How to Save Heart Rate in HKCategoryTypeIdentifier.mindfulSession
 
 
Q