Documentation Index Fetch the complete documentation index at: https://docs.mirobody.ai/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Data mapping transforms vendor-specific JSON responses into Mirobody Health’s standardized format. This ensures consistency across all health data sources.
All health data is transformed into StandardPulseData objects:
from mirobody.pulse.theta.platform.indicator import StandardPulseData, StandardIndicator
data = StandardPulseData(
indicator = StandardIndicator. HEART_RATE ,
value = "72" ,
start_time = "2024-01-15T10:00:00Z" ,
end_time = "2024-01-15T10:00:00Z" ,
source = "garmin"
)
Mapping Pattern
Basic Mapping
Map simple values directly:
INDICATOR_MAPPING = {
"daily_steps" : StandardIndicator. DAILY_STEPS ,
"sleep_seconds" : StandardIndicator. DAILY_SLEEP_DURATION ,
"resting_heart_rate" : StandardIndicator. DAILY_HEART_RATE_RESTING ,
}
def format_data ( self , raw_data : Dict) -> List[StandardPulseData]:
"""Transform vendor data"""
results = []
for vendor_key, standard_indicator in INDICATOR_MAPPING .items():
if vendor_key in raw_data:
results.append(StandardPulseData(
indicator = standard_indicator,
value = str (raw_data[vendor_key]),
start_time = raw_data[ "date" ],
end_time = raw_data[ "date" ]
))
return results
Nested Data Mapping
For nested JSON structures:
def format_sleep_data ( self , sleep_response : Dict) -> List[StandardPulseData]:
"""Map nested sleep data"""
results = []
sleep_data = sleep_response.get( "sleep" , {})
# Total sleep duration
if "total_seconds" in sleep_data:
results.append(StandardPulseData(
indicator = StandardIndicator. DAILY_SLEEP_DURATION ,
value = str (sleep_data[ "total_seconds" ] * 1000 ), # Convert to ms
start_time = sleep_data[ "start_time" ],
end_time = sleep_data[ "end_time" ]
))
# Sleep stages
stages = sleep_data.get( "stages" , {})
if "deep_seconds" in stages:
results.append(StandardPulseData(
indicator = StandardIndicator. DAILY_DEEP_SLEEP ,
value = str (stages[ "deep_seconds" ] * 1000 ),
start_time = sleep_data[ "start_time" ],
end_time = sleep_data[ "end_time" ]
))
return results
Unit Conversion
Convert vendor units to standard units:
# Standard units: grams, milliseconds, meters
UNIT_CONVERSIONS = {
"kg_to_grams" : lambda x : x * 1000 ,
"seconds_to_ms" : lambda x : x * 1000 ,
"minutes_to_ms" : lambda x : x * 60 * 1000 ,
}
# Example
weight_kg = raw_data[ "weight" ]
weight_grams = UNIT_CONVERSIONS [ "kg_to_grams" ](weight_kg)
Standard Indicators
Activity Indicators
Standard Indicator Unit Description DAILY_STEPSsteps Total daily steps DAILY_DISTANCEmeters Distance traveled DAILY_CALORIES_ACTIVEkcal Active calories DAILY_FLOORS_CLIMBEDfloors Floors/flights climbed ACTIVE_TIMEmilliseconds Active time duration
Sleep Indicators
Standard Indicator Unit Description DAILY_SLEEP_DURATIONmilliseconds Total sleep time DAILY_DEEP_SLEEPmilliseconds Deep sleep duration DAILY_LIGHT_SLEEPmilliseconds Light sleep duration DAILY_REM_SLEEPmilliseconds REM sleep duration SLEEP_EFFICIENCYpercentage Sleep efficiency
Heart Rate Indicators
Standard Indicator Unit Description HEART_RATEbpm Instantaneous HR DAILY_HEART_RATE_RESTINGbpm Resting HR DAILY_AVG_HEART_RATEbpm Average daily HR HRVms Heart rate variability
Complete Reference
For the full list of standard indicators and detailed mapping examples:
Full Provider Integration Guide See complete data mapping patterns, unit conversions, and indicator reference
Next Steps
Provider Integration Build a custom provider
Provider Testing Test data transformations
Examples See real mapping code