Documentation Index
Fetch the complete documentation index at: https://docs.synheart.ai/llms.txt
Use this file to discover all available pages before exploring further.
synheart-wear ships a stable adapter layer per vendor. This page is the reference for what each adapter does, what it produces, and how it interacts with cloud streaming.
Adapter matrix
| Vendor | Local source | Cloud / push source | RAMEN delivery hint | Status |
|---|---|---|---|---|
| Apple Watch | HealthKit (apple_healthkit) | β | n/a | Ready |
| Health Connect (Android) | Health Connect API | β | n/a | Ready |
| BLE HRM (any) | GATT 0x180D Heart Rate Profile | β | n/a | Ready |
| WHOOP | Broadcast HR via BLE | OAuth + webhooks | stream (full payload inline) | Ready |
| Garmin (Cloud) | β | OAuth + Connect API webhooks | ping (REST pull required) | Ready |
| Garmin Health SDK (RTS) | Native real-time streaming | β | n/a | On-demand, license-gated |
| Fitbit | β | OAuth + webhooks (planned) | ping | Planned |
| Oura | HealthKit / Health Connect proxy | OAuth (planned) | ping | Via HK/HC |
| Samsung Watch | (planned) | β | n/a | Planned |
DeviceAdapter enum lists platformHealth, fitbit, garmin, whoop, samsungHealth. The Swift and Kotlin enums additionally include bleHrm / BLE_HRM. Across all three platforms, Oura has no enum entry and is reached via OuraProvider; BLE HRM on Dart is reached via BleHrmBridge.
Apple HealthKit
Capabilities:- HR (instantaneous + samples).
- HRV (RMSSD, SDNN; SDNN derived on-device when only RR is exposed).
- Steps, calories, distance.
- RR intervals via the HealthKit RR channel (workout-mode only on most Apple Watch models).
- Health profile snapshot (DOB, sex, height, weight) for personalization context.
- Workout events.
HKObjectType set, requested once via requestPermissions.
source field on WearMetrics: "apple_healthkit".
Health Connect (Android)
Capabilities:- HR, HRV (when the recording app provides it; otherwise SDNN/RMSSD are unavailable).
- Steps, calories, distance.
- Sleep records (sleep stages from compatible apps).
source field: "health_connect".
BLE HRM
Direct connection over BLE GATT Heart Rate Profile (0x180D). No vendor cloud, no OAuth. Compatible devices:- WHOOP (Broadcast HR mode).
- Polar chest straps (H10, OH1).
- Wahoo TICKR family.
- Garmin HRM-Pro / HRM-Dual.
- Any HRM advertising 0x180D Heart Rate Service.
- HR (every second per Bluetooth profile).
- RR intervals when the device advertises the optional RR field.
requestPermissions. See BLE Heart Rate Monitor for the detailed flow.
source field: "ble_hrm".
WHOOP
Two modes:| Mode | Path |
|---|---|
| OAuth + webhooks | Cloud-side handles OAuth + webhook ingest, publishes wear.events, RAMEN delivers to client. DeliveryHint.stream (full payload inline). |
| BLE Broadcast HR | Local-only via BleHrmBridge. No cloud round-trip; no recovery/strain/sleep. |
WhoopProvider exposes:
fetchRawDataForFlux(start, end)β pulls raw vendor data for HSI 1.3 transformation.- Real-time HR via webhooks (mode A) or BLE (mode B).
- Workout events.
source field: "whoop" for the OAuth path. The cloud-vs-BLE distinction lives in meta.source_type ("whoop_cloud"); WHOOP via BLE Broadcast HR uses the shared BLE HRM adapter (source = "ble_hrm").
Garmin (Cloud)
Path: OAuth β Garmin Connect API webhooks β cloud β RAMEN. Delivery hint:ping β vendor only sends a notification; client must pull the full record via REST when needed.
GarminProvider exposes:
fetchRawDataForFlux(start, end)β REST pull for Flux input.- Wellness, sleep, activity data classes (
GarminWellnessData,GarminSleepData,GarminActivityData). - Connection state (
GarminConnectionState) for UI. - Realtime data shape (
GarminRealtimeData) when a session is active.
source field: "garmin" for the OAuth Connect API path; meta.source_type carries the more specific "garmin_cloud".
Garmin Health SDK (Real-Time Streaming)
Native RTS path β direct device pairing without going through Garmin Connect cloud. Requires a separate Garmin license and is bundled on demand for licensed integrations only. The underlying Garmin Health SDK code is proprietary; this SDK exposes aGarminHealth provider faΓ§ade that wraps it.
source field: "garmin_sdk" (the adapter id from GarminSdkAdapter).
Fitbit (planned)
OAuth + webhooks pattern,DeliveryHint.ping. Currently scaffolding; not production.
source field: "fitbit".
Oura
Today the Oura ring data flows through HealthKit (iOS) and Health Connect (Android) β the SDKβsOuraProvider is a thin classifier over those data sources. A direct OAuth path is planned.
source field: "oura" (the underlying HK / Health Connect proxy is captured via the data path, not a different source string).
Apple Health XML backfill
When a user exportsexport.zip from the iOS Health app:
synheart-core aggregates samples per day and replays them via Synheart.srmPushWearableDaily(...) so the imported data populates the userβs runtime baselines.
RAMEN π integration
Each cloud adapter participates in the RAMEN stream when the cloudwear-service publishes events:
RamenEvent.payload_json:
DeliveryHint.stream: parse inline, emit immediately.DeliveryHint.ping: schedule a REST pull (via the adapterβs provider) to fetch the body.DeliveryHint.unknown: treat asstream(best-effort) and log.
Permission flow
SynheartWear.requestPermissions(permissions, reason):
- Maps Synheart
PermissionTypevalues to OS permission scopes. - Routes to the appropriate adapter (HealthKit on iOS, Health Connect on Android, OAuth flow for cloud adapters).
- Returns
Map<PermissionType, ConsentStatus>per type.
Related
- Wear Overview β full SDK surface.
- Data Schema β what each adapter writes into the unified
WearMetrics. - BLE Heart Rate Monitor β direct BLE HRM flow.