Sync Multi-Activity Merge
Multi-Activity Merge
iOS :IDOSyncDataType.activityMerge
Android : IDOSyncDataType.ACTIVITYMERGE
Function table: supportSyncMultiActivityNew
Callback type:
IDOSyncDataType.activityMerge/ACTIVITYMERGEWhen enabled, replaces legacy
activity/swimcallbacks and covers multi-sport, swim, running course, running plan, and post-run stretch data.
JSON fields received by App:
| Field | Type | Description |
|---|---|---|
| version | int | Protocol version Default 0 |
| year | int | Start time year |
| month | int | Start time month |
| day | int | Start time day |
| hour | int | Start time hour |
| minute | int | Start time minute |
| second | int | Start time second |
| end_year | int | End time year |
| end_month | int | End time month App uses month!=0 to decide whether to use end-time fields |
| end_day | int | End time day |
| end_hour | int | End time hour |
| end_minute | int | End time minute |
| end_sec | int | End time second |
| training_offset | int | Training course date offset starting from 0 0 if setSupportSportPlan is not enabled |
| hr_data_interval_sec | int | Heart rate sample interval Unit: second |
| connect_app | int | Whether the band is connected to app for report generation 1 connected, 0 not connected |
| sport_start_type | int | 0: invalid, 1: started by app, 2: started by watch |
| type | int | Sport type enum, see Sport Types |
| act_type | int | Plan type: 1: 3km running plan 2: 5km running plan 3: 10km running plan 4: half marathon training 5: marathon training 64: 6-min easy run 65: 10-min easy run 66: 15-min easy run 67: walk-run beginner 68: walk-run intermediate 69: walk-run advanced 70: post-run stretch 0 if setSupportSportPlan is not enabled |
| in_class_calories | int | In-class calories Unit: kcal |
| step | int | Steps |
| durations | int | Duration Unit: second |
| calories | int | Calories Unit: kcal |
| distance | int | Distance Unit: meter |
| distance3d | int | 3D distance Unit: meter |
| circle_distance | int | Lap distance Unit: meter |
| avg_hr_value | int | Average HR Unit: BPM |
| max_hr_value | int | Max HR Unit: BPM |
| min_hr_value | int | Min HR Unit: BPM |
| hr_item_count | int | HR sample count |
| avg_step_frequency | int | Average cadence Unit: steps/min |
| max_step_frequency | int | Max cadence Unit: steps/min |
| min_step_frequency | int | Min cadence Unit: steps/min |
| frequency_count | int | Cadence sample count |
| avg_step_stride | int | Average stride Unit: cm |
| max_step_stride | int | Max stride Unit: cm |
| min_step_stride | int | Min stride Unit: cm |
| stride_count | int | Stride sample count |
| avg_speed | int | Average speed km/h, firmware x100 For swim, overwritten by swim avg pace when swim_avg_pace > 0 |
| max_speed | int | Max speed km/h, firmware x100 |
| avg_3d_speed | int | Average 3D speed km/h App should divide by 100 |
| avg_vertical_speed | int | Average vertical speed m/h App should divide by 10 |
| avg_km_speed | int | Average km pace Unit: second |
| max_km_speed | int | Fastest km pace Seconds per km |
| slowest_km_pace | int | Slowest km pace Unit: second |
| real_pace_save_interval | int | Realtime pace save interval Unit: second |
| real_pace_start_offset | int | Realtime pace data start offset |
| pace_count | int | Realtime pace sample count |
| hr_zone_max_val | int | HR zone max value |
| training_effect | int | Aerobic training effect, range 1.0-5.0 (x10) |
| aerobic_training_effect | int | Aerobic training effect, range 1.0-5.0 (x10) |
| anaerobic_training_effect | int | Anaerobic training effect, range 1.0-5.0 (x10), 0 invalid |
| load | int | Training load |
| vo2max | int | VO2max ml/kg/min Range 0-80, not scaled by 100 |
| grade | int | VO2max grade 1 low … 7 professional 0 means unsupported |
| recovery_time_year | int | Recovery time year |
| recovery_time_mon | int | Recovery time month |
| recovery_time_day | int | Recovery time day |
| recovery_time_hour | int | Recovery time hour |
| recovery_time_min | int | Recovery time minute |
| recovery_time_s | int | Recovery time second |
| activity_data_item_count | int | Per-minute activity item count |
| km_speed_count | int | Km pace count |
| mi_speed_count | int | Mile pace count |
| act_count | int | Action item count |
| total_paddle_number | int | Total paddle count |
| max_paddle_frequency | int | Max paddle frequency |
| min_paddle_frequency | int | Min paddle frequency |
| avg_paddle_frequency | int | Average paddle frequency |
| paddle_frequency_count | int | Paddle frequency sample count |
| tread_frequency_count | int | Tread frequency sample count |
| completion_rate | int | Action completion rate 0-100 |
| hr_completion_rate | int | HR control rate 0-100 |
| warm_up_performance | int | Warm-up performance 0-100 Valid when setSupportSportPlan and supportWarmUpBeforeRunning |
| avg_slope | int | Average slope degrees -90 ~ 90 |
| avg_altitude | int | Average altitude meters -500 ~ 9000 |
| max_altitude | int | Max altitude meters -500 ~ 9000 |
| min_altitude | int | Min altitude meters -500 ~ 9000 |
| cumulative_altitude_rise | int | Cumulative altitude gain meters |
| cumulative_altitude_loss | int | Cumulative altitude loss meters |
| altitude_count | int | Altitude sample count |
| gps_status | int | GPS status 0 invalid, 1 on, 2 off |
| running_economy | int | Running economy |
| max_running_power | int | Max running power |
| min_running_power | int | Min running power |
| avg_running_power | int | Average running power |
| running_power_count | int | Running power sample count |
| rtpe_count | int | Realtime perceived exertion (RTPE) sample count |
| aerobic_power_interval | int | Aerobic power interval |
| mixed_oxygen_power_interval | int | Mixed oxygen power interval |
| threshold_running_power_interval | int | Threshold running power interval |
| intermittent_run_power_interval | int | Intermittent run power interval |
| sprint_run_power_interval | int | Sprint run power interval |
| max_rtoc | int | Max realtime O2 consumption (RTOC) |
| min_rtoc | int | Min realtime O2 consumption (RTOC) |
| avg_rtoc | int | Average realtime O2 consumption (RTOC) |
| rtoc_count | int | RTOC sample count |
| max_rope_frequency | int | Max jump-rope frequency /min |
| min_rope_frequency | int | Min jump-rope frequency /min |
| avg_rope_frequency | int | Average jump-rope frequency /min |
| max_rope_skip_count | int | Max consecutive jumps |
| rope_trip_count | int | Rope trip count |
| total_rope_count | int | Total jump count |
| rope_item_count | int | Jump-rope item count |
| smart_competitor | int | 0 invalid, 1 non-smart pacer, 2 smart pacer Valid when supportSmartCompetitor |
| ai_image_id | int | AI avatar ID Valid when supportSmartCompetitor |
| user_image_id | int | User avatar ID Valid when supportSmartCompetitor |
| bg_image_id | int | Background image ID Valid when supportSmartCompetitor |
| smart_competitor_pace | int | Smart competitor pace Valid when supportSmartCompetitor |
| interval_train_item_count | int | Interval training item count |
| lap_count | int | Lap item count |
| recovery_hr_start_time | int | Post-workout recovery HR start time |
| recovery_hr_count | int | Post-workout recovery HR count |
| trips | int | Swim laps |
| average_swolf | int | Average SWOLF |
| total_strokes_number | int | Total strokes |
| swimming_posture | int | Main stroke 0 mixed, 1 freestyle, 2 breaststroke, 3 backstroke, 4 butterfly |
| pool_distance | int | Pool length: integer part Unit: meter (e.g. for 16.23m, pass 16 as the integer part) e.g. 16.23m → pool_distance=16, pool_distance_decimal=2300 |
| pool_distance_decimal | int | Pool length: fractional part 4 decimal digits; e.g. 16.23m → pool_distance=16, pool_distance_decimal=2300 |
| avg_frequency | int | Average stroke rate Unit: /min |
| total_duration | int | Swim total duration Unit: second |
| total_rest_time | int | Swim total rest time Unit: second |
| swim_item_count | int | Swim lap item count |
| heart_rate_zones_mode | int | HR zones mode 0x01 reserve HR mode (easy/marathon/threshold/anaerobic/interval fields) else classic five zones (warm_up/fat_burning/...) |
| location_marker_item_count | int | Location marker count |
| slowest_speed | int | Slowest speed km/h, firmware x100 |
| start_dist_unit | int | Start distance unit |
| tennis_stroke_count | int | Tennis stroke count |
| tennis_serve_count | int | Tennis serve count |
| tennis_forehead_count | int | Tennis forehand count |
| tennis_backhand_count | int | Tennis backhand count |
| stroke_count | int | Stroke count (same as tennis_stroke_count; legacy-compatible) |
| serve_count | int | Serve count (same as tennis_serve_count) |
| forehand_count | int | Forehand count (v20 multi-sport; interoperates with tennis_forehead_count) |
| backhand_count | int | Backhand count (v20 multi-sport; interoperates with tennis_backhand_count) |
| body_age | int | Body age |
| session_id | int | Session ID |
| total_sit_up_count | int | Total sit-up count |
| sport_mode_data_type | int | Sport mode data type 0 invalid, 1 auto, 2 manual |
| is_tentative | bool | true when the device is a screenless band and the record is automatic sport data (tentative) |
| easy_zone_mins | int | Reserve HR mode easy zone minutes Valid when heart_rate_zones_mode==0x01 |
| marathon_zone_mins | int | Reserve HR mode marathon zone minutes |
| threshold_zone_mins | int | Reserve HR mode threshold zone minutes |
| anaerobic_zone_mins | int | Reserve HR mode anaerobic zone minutes |
| interval_zone_mins | int | Reserve HR mode interval zone minutes |
| easy_zone_sec | int | Reserve HR mode easy zone seconds |
| marathon_zone_sec | int | Reserve HR mode marathon zone seconds |
| threshold_zone_sec | int | Reserve HR mode threshold zone seconds |
| anaerobic_zone_sec | int | Reserve HR mode anaerobic zone seconds |
| interval_zone_sec | int | Reserve HR mode interval zone seconds |
| warm_up_mins | int | Warm-up duration minutes |
| fat_burning_mins | int | Fat-burning duration minutes |
| aerobic_exercise_mins | int | Aerobic duration minutes |
| anaerobic_exercise_mins | int | Anaerobic duration minutes |
| extreme_exercise_mins | int | Extreme duration minutes |
| warm_up_sec | int | Warm-up duration seconds |
| fat_burning_sec | int | Fat-burning duration seconds |
| aerobic_exercise_sec | int | Aerobic duration seconds |
| anaerobic_exercise_sec | int | Anaerobic duration seconds |
| extreme_exercise_sec | int | Extreme duration seconds |
| hr_data_vlaue | int [] | HR samples |
| items | collection | Per-minute activity items: steps & calories & distance |
| items_km_speed | collection | Km pace items: second |
| frequency_items | int [] | Cadence samples |
| items_mi_speed | int [] | Mile pace samples |
| pace_speed_items | int [] | Realtime pace samples |
| paddle_frequency_items | int [] | Paddle frequency samples |
| tread_frequency_items | int [] | Tread frequency samples |
| altitude_item | int [] | Altitude samples meters -500~9000 |
| item_running_power | int [] | Running power samples |
| item_rtpe | int [] | RTPE samples |
| item_rtoc | int [] | RTOC samples |
| item_rope_info | collection | Jump-rope items: rope_skip_count & duration |
| action_temp | collection | Action items: type & actual_time & goal_time & heart_value |
| interval_item | collection | Interval items: stage_type & repeat_num & stage_data_num & stage_data_type_item |
| stride_items | int [] | Realtime stride samples |
| lap_item | collection | Lap items: lap_data_num & lap_data_item |
| swim_lap_items | collection | Swim lap items: swolf & swimming_posture & strokes_number & duration & distance & frequency & speed & stop_time & difference_time & avg_hr |
| location_marker_items | collection | Location markers: location_name & longitude & latitude & altitude |
| recovery_hr_items_60 | collection | Recovery HR items: data_type & recovery_hr_data |
items items — Per-minute activity details
| Field | Type | Description |
|---|---|---|
| steps | int | Steps |
| calories | int | Calories |
| distance | int | Distance Unit: meter |
items_km_speed items — Km pace
| Field | Type | Description |
|---|---|---|
| second | int | Km pace Unit: second |
item_rope_info items — Jump-rope details
| Field | Type | Description |
|---|---|---|
| rope_skip_count | int | Jump count in segment |
| duration | int | Segment duration Unit: second |
action_temp items — Action details
| Field | Type | Description |
|---|---|---|
| type | int | Action type |
| actual_time | int | Actual duration Unit: second |
| goal_time | int | Goal duration Unit: second |
| heart_value | int | Heart rate Unit: BPM |
interval_item items — Interval training details
| Field | Type | Description |
|---|---|---|
| stage_type | int | Stage type |
| repeat_num | int | Repeat count |
| stage_data_num | int | Stage data count |
| stage_data_type_item | collection | Stage data items: stage_support_type & stage_data_value |
stage_data_type_item items — Interval stage data
| Field | Type | Description |
|---|---|---|
| stage_support_type | int | Stage data type |
| stage_data_value | int | Stage data value |
lap_item items — Lap details
| Field | Type | Description |
|---|---|---|
| lap_data_num | int | Lap data count |
| lap_data_item | collection | Lap data items: lap_data_type & lap_data_val |
lap_data_item items — Lap data entry
| Field | Type | Description |
|---|---|---|
| lap_data_type | int | Lap data type |
| lap_data_val | int | Lap data value |
swim_lap_items items — Swim lap details
| Field | Type | Description |
|---|---|---|
| swolf | int | SWOLF (0–65535) |
| swimming_posture | int | Stroke 0 mixed, 1 freestyle, 2 breaststroke, 3 backstroke, 4 butterfly |
| strokes_number | int | Stroke count |
| duration | int | Duration Unit: second |
| distance | int | Distance Unit: meter |
| frequency | int | Frequency Unit: /min |
| speed | int | Pace sec/100m |
| stop_time | int | Stop time Unit: second |
| difference_time | int | Rest between laps Unit: second |
| avg_hr | int | Average HR per lap Unit: BPM; present when firmware sends new lap detail |
location_marker_items items — Location marker details
| Field | Type | Description |
|---|---|---|
| location_name | string | Location name |
| longitude | string | Longitude (string after /1e7) |
| latitude | string | Latitude (string after /1e7) |
| altitude | int | Altitude Unit: meter |
recovery_hr_items_60 items — Post-workout recovery HR details
| Field | Type | Description |
|---|---|---|
| data_type | int | Recovery HR data type |
| recovery_hr_data | int | Recovery HR value Unit: BPM |
Example:
{
"version": 0,
"year": 2024,
"month": 6,
"day": 1,
"hour": 8,
"minute": 0,
"second": 0,
"end_year": 2024,
"end_month": 6,
"end_day": 1,
"end_hour": 8,
"end_minute": 30,
"end_sec": 0,
"training_offset": 0,
"hr_data_interval_sec": 5,
"connect_app": 1,
"sport_start_type": 2,
"type": 48,
"act_type": 0,
"in_class_calories": 0,
"step": 3200,
"durations": 1800,
"calories": 180,
"distance": 3200,
"distance3d": 3250,
"circle_distance": 400,
"avg_hr_value": 128,
"max_hr_value": 160,
"min_hr_value": 90,
"hr_item_count": 3,
"avg_step_frequency": 160,
"max_step_frequency": 180,
"min_step_frequency": 140,
"frequency_count": 2,
"avg_step_stride": 110,
"max_step_stride": 125,
"min_step_stride": 95,
"stride_count": 2,
"avg_speed": 960,
"max_speed": 1200,
"avg_3d_speed": 970,
"avg_vertical_speed": 50,
"avg_km_speed": 360,
"max_km_speed": 330,
"slowest_km_pace": 420,
"real_pace_save_interval": 5,
"real_pace_start_offset": 0,
"pace_count": 2,
"hr_zone_max_val": 190,
"training_effect": 35,
"aerobic_training_effect": 35,
"anaerobic_training_effect": 20,
"load": 80,
"vo2max": 45,
"grade": 4,
"recovery_time_year": 2024,
"recovery_time_mon": 6,
"recovery_time_day": 1,
"recovery_time_hour": 12,
"recovery_time_min": 0,
"recovery_time_s": 0,
"activity_data_item_count": 2,
"km_speed_count": 2,
"mi_speed_count": 1,
"act_count": 1,
"total_paddle_number": 0,
"max_paddle_frequency": 0,
"min_paddle_frequency": 0,
"avg_paddle_frequency": 0,
"paddle_frequency_count": 0,
"tread_frequency_count": 0,
"completion_rate": 90,
"hr_completion_rate": 85,
"warm_up_performance": 70,
"avg_slope": 2,
"avg_altitude": 50,
"max_altitude": 80,
"min_altitude": 20,
"cumulative_altitude_rise": 30,
"cumulative_altitude_loss": 10,
"altitude_count": 2,
"gps_status": 1,
"running_economy": 0,
"max_running_power": 320,
"min_running_power": 180,
"avg_running_power": 250,
"running_power_count": 2,
"rtpe_count": 2,
"aerobic_power_interval": 10,
"mixed_oxygen_power_interval": 8,
"threshold_running_power_interval": 5,
"intermittent_run_power_interval": 3,
"sprint_run_power_interval": 1,
"max_rtoc": 50,
"min_rtoc": 30,
"avg_rtoc": 40,
"rtoc_count": 2,
"max_rope_frequency": 0,
"min_rope_frequency": 0,
"avg_rope_frequency": 0,
"max_rope_skip_count": 0,
"rope_trip_count": 0,
"total_rope_count": 0,
"rope_item_count": 0,
"smart_competitor": 0,
"ai_image_id": 0,
"user_image_id": 0,
"bg_image_id": 0,
"smart_competitor_pace": 0,
"interval_train_item_count": 1,
"lap_count": 1,
"recovery_hr_start_time": 0,
"recovery_hr_count": 2,
"trips": 2,
"average_swolf": 102,
"total_strokes_number": 30,
"swimming_posture": 1,
"pool_distance": 16,
"pool_distance_decimal": 2300,
"avg_frequency": 25,
"total_duration": 78,
"total_rest_time": 42,
"swim_item_count": 1,
"heart_rate_zones_mode": 0,
"location_marker_item_count": 1,
"slowest_speed": 800,
"start_dist_unit": 0,
"tennis_stroke_count": 0,
"tennis_serve_count": 0,
"tennis_forehead_count": 0,
"tennis_backhand_count": 0,
"stroke_count": 0,
"serve_count": 0,
"forehand_count": 0,
"backhand_count": 0,
"body_age": 0,
"session_id": 0,
"total_sit_up_count": 0,
"sport_mode_data_type": 0,
"is_tentative": false,
"easy_zone_mins": 0,
"marathon_zone_mins": 0,
"threshold_zone_mins": 0,
"anaerobic_zone_mins": 0,
"interval_zone_mins": 0,
"easy_zone_sec": 0,
"marathon_zone_sec": 0,
"threshold_zone_sec": 0,
"anaerobic_zone_sec": 0,
"interval_zone_sec": 0,
"warm_up_mins": 2,
"fat_burning_mins": 10,
"aerobic_exercise_mins": 12,
"anaerobic_exercise_mins": 3,
"extreme_exercise_mins": 1,
"warm_up_sec": 10,
"fat_burning_sec": 20,
"aerobic_exercise_sec": 5,
"anaerobic_exercise_sec": 15,
"extreme_exercise_sec": 0,
"hr_data_vlaue": [
120,
125,
130
],
"items": [
{
"steps": 160,
"calories": 8,
"distance": 160
},
{
"steps": 165,
"calories": 9,
"distance": 165
}
],
"items_km_speed": [
{
"second": 360
},
{
"second": 355
}
],
"frequency_items": [
160,
162
],
"items_mi_speed": [
580
],
"pace_speed_items": [
360,
355
],
"paddle_frequency_items": [],
"tread_frequency_items": [],
"altitude_item": [
45,
55
],
"item_running_power": [
240,
260
],
"item_rtpe": [
70,
75
],
"item_rtoc": [
38,
42
],
"item_rope_info": [],
"action_temp": [
{
"type": 1,
"actual_time": 60,
"goal_time": 60,
"heart_value": 130
}
],
"interval_item": [
{
"stage_type": 1,
"repeat_num": 2,
"stage_data_num": 1,
"stage_data_type_item": [
{
"stage_support_type": 1,
"stage_data_value": 100
}
]
}
],
"stride_items": [
110,
112
],
"lap_item": [
{
"lap_data_num": 1,
"lap_data_item": [
{
"lap_data_type": 1,
"lap_data_val": 400
}
]
}
],
"swim_lap_items": [
{
"swolf": 102,
"swimming_posture": 1,
"strokes_number": 15,
"duration": 36,
"distance": 25,
"frequency": 25,
"speed": 144,
"stop_time": 0,
"difference_time": 7
}
],
"location_marker_items": [
{
"location_name": "start",
"longitude": "113.9345280",
"latitude": "22.5405030",
"altitude": 50
}
],
"recovery_hr_items_60": [
{
"data_type": 1,
"recovery_hr_data": 110
},
{
"data_type": 1,
"recovery_hr_data": 100
}
]
}