Data Points

PostMessage events sent from KinesteX SDK for integration with native apps and external systems. Events are sent in real-time, work safely offline, and provide comprehensive tracking for workouts, exercises, and health assessments.

Receiving Data

Each platform has a specific pattern for receiving data from KinesteX.


SDK Platforms (Swift, Kotlin, React Native, React-TS, Flutter): Use the callback function provided by the SDK with typed message enums.


HTML/JS: Set up a message event listener manually since there's no SDK wrapper.

Platform-Specific Data Handlers
1// onMessageReceived callback passes WebViewMessage enum
2// Available message types:
3
4// kinestex_launched([String: Any]) - KinesteX View launched
5// finished_workout([String: Any]) - Workout completed
6// error_occurred([String: Any]) - Errors (e.g., missing camera)
7// exercise_completed([String: Any]) - Exercise finished
8// exit_kinestex([String: Any]) - User exits KinesteX view
9// workout_opened([String: Any]) - Workout description viewed
10// workout_started([String: Any]) - Workout begins
11// plan_unlocked([String: Any]) - Workout plan unlocked
12// custom_type([String: Any]) - Unrecognized messages
13// reps([String: Any]) - Successful repetitions
14// mistake([String: Any]) - Detected mistakes
15// left_camera_frame([String: Any]) - User left camera frame
16// returned_camera_frame([String: Any]) - User returned to frame
17// workout_overview([String: Any]) - Workout summary
18// exercise_overview([String: Any]) - Exercise summary
19// workout_completed([String: Any]) - Workout done, overview exited

Application Lifecycle

Events for app startup, loading, and exit.


EventData FieldsDescription
kinestex_launcheddata: string ("dd mm yyyy hh:mm:ss")KinesteX application is launched
kinestex_loadeddate: string (ISO format)KinesteX fully loaded and ready
exit_kinestexdate: Date, time_spent: string ("hh:mm:ss")User exits with total time spent
main_page_openeddate: string (ISO format)Main/home page is opened

Workout Events

Events for workout lifecycle and statistics.


EventData FieldsDescription
workout_openedtitle: string, id: string, date: stringWorkout details page opened
workout_startedid: string, date: stringWorkout session started
workout_started (alt)workoutId: stringAlternative workout start format
workout_completedworkout: string, date: stringWorkout finished, user exits overview
workout_overviewdata: objectComplete workout summary statistics

workout_overview Data Structure:

1{
2  workout_title: string,           // Workout name
3  workout_id: string,              // Unique workout ID
4  target_duration_seconds: number, // Target workout duration
5  completed_reps_count: number,    // Total completed reps
6  target_reps_count: number,       // Total target reps
7  calories_burned: number,         // Calories (2 decimal places)
8  completion_percentage: number,   // Completion % (2 decimals)
9  total_mistakes: number,          // Total mistake count
10  accuracy_score: number,          // Overall accuracy (0-100)
11  efficiency_score: number,        // Efficiency metric (0-100)
12  total_exercise: number,          // Number of exercises
13  actual_hold_time_seconds: number,  // Time in correct position
14  target_hold_time_seconds: number   // Target hold time
15}
Handling Workout Overview
1case .workout_overview(let data):
2    if let calories = data["calories_burned"] as? Double,
3       let completion = data["completion_percentage"] as? Double {
4        print("Burned \(calories) cal, \(completion)% complete")
5    }

Exercise Events

Events for individual exercise tracking.


EventDescription
exercise_completedIndividual exercise completed
exercise_overviewAll exercises summary (array)

exercise_completed Data Structure:

1{
2  exercise_title: string,    // Exercise name
3  time_spent: number,        // Seconds spent
4  repeats: number,           // Reps completed
5  total_reps: number,        // Required reps
6  total_duration: number,    // Countdown time
7  calories: number,          // Calories burned
8  exercise_id: string,       // Exercise ID
9  exercise_index: number,    // 1-based position of the completed exercise
10  total_exercises: number,   // Total number of exercises in the workout
11  mistakes: Array<{          // Mistakes made
12    mistake: string,
13    count: number
14  }>,
15  average_accuracy?: number  // Average accuracy (0-1, optional)
16}

exercise_overview Item Structure:

1{
2  exercise_title: string,        // Exercise name
3  exercise_id: string,           // Unique exercise ID
4  time_spent: number,            // Time on exercise (seconds)
5  perfect_hold_position: number, // Time in correct position (timer-based)
6  repeats: number,               // Reps completed
7  total_required_reps: number,   // Target reps
8  total_required_time: number,   // Target time (seconds)
9  calories: number,              // Calories (2 decimal places)
10  mistakes: Array<{              // Detailed mistake breakdown
11    mistake: string,
12    count: number
13  }>,
14  mistake_count: number,         // Total mistakes for exercise
15  accuracy_reps?: number[],      // Per-rep accuracy scores (optional)
16  average_accuracy?: number      // Average accuracy 0-100 (optional)
17}

Camera & Frame Events

Events for camera tracking and frame detection.


EventData FieldsDescription
left_camera_framedate: string ("dd mm yyyy hh:mm:ss")User left camera view
returned_camera_framedate: string ("dd mm yyyy hh:mm:ss")User returned to camera view
check_frame_completedmessage: string ("Person stepped into frame")Frame check completed
camera_selector_openedmessage: array (available cameras)Camera selector opened
camera_selectedid: string, label: string, isMirrorCamera: booleanCamera selected by user

Plans & Programs

Events for workout plans and programs.


EventData FieldsDescription
plan_unlockedid: string, img: string, title: string, date: stringPlan unlocked/selected
personalized_plan_exitworkout: string, date: stringExit from personalized plan

Challenge Events

Events for challenge mode.


EventData FieldsDescription
challenge_startedexerciseId: stringChallenge exercise started
challenge_completedrepCount: number, mistakes: numberChallenge completed
challenge_exitworkout: string, date: stringExit from challenge

Leaderboard Events

Events for leaderboard functionality.


EventData FieldsDescription
highlighted_userdata: objectUser's leaderboard position

highlighted_user Data Structure:

1{
2  username: string,  // User's username
3  score: number,     // User's score
4  position: number   // Leaderboard position (1-based)
5}

Feedback Events

Events dispatched when a user submits feedback.


EventDescription
feedback_submittedUser submitted training rating or per-exercise feedback

Training Feedback Payload (source: "training_feedback"):

1{
2  type: "feedback_submitted",
3  source: "training_feedback",
4  rating: number,              // User rating (e.g., 1-5)
5  is_like: boolean,            // Whether the user liked the workout
6  description: string,         // Optional text feedback
7  workout_id: string,          // Workout ID
8  workout_title: string        // Workout name
9}

Per-Exercise Feedback Payload (source: "exercise_feedback"):

1{
2  type: "feedback_submitted",
3  source: "exercise_feedback",
4  workout_id: string,          // Workout ID
5  workout_title: string,       // Workout name
6  feedbacks: Array<{           // Per-exercise feedback entries
7    exercise_id: string,       // Exercise ID
8    exercise_title: string,    // Exercise name
9    is_like: boolean,          // Whether the user liked the exercise
10    description: string        // Optional text feedback
11  }>
12}

Session & Upload Events

Events related to workout session saving and motion recording uploads. These events are only dispatched when \shouldSendStats: true\ is passed in the SDK configuration.


EventData FieldsDescription
workout_session_saveddata: objectWorkout session successfully saved to backend
session_save_complete-Motion recording uploads finished successfully
motion_upload_progressdata: { completed: number, total: number }Motion recording upload progress
motion_upload_errordata: { error: string }Motion recording upload failed or timed out
workout_completion_overlay_dismissed-User dismissed the workout completion celebration overlay

workout_session_saved Data Structure:

1{
2  session_id: number,            // Backend-assigned session ID
3  workout_title: string,         // Name of the workout
4  accuracy_score: number,        // Overall accuracy (0-100)
5  efficiency_score: number,      // Efficiency score (0-100)
6  completion_percentage: number,  // How much of the workout was completed (0-100)
7  completed_reps_count: number,  // Total reps completed
8  calories_burned: number        // Estimated calories burned
9}

motion_upload_progress Data Structure:

1{
2  completed: number,  // Number of exercise recordings uploaded so far
3  total: number       // Total number of exercise recordings to upload
4}

Error & Status Events

Events for errors, warnings, and active time tracking.


EventData FieldsDescription
error_occurreddata: stringGeneral error message
error_occurredmessage: stringAlternative error format
error_occurreddata: string, error: anyError with details
warningdata: stringWarning message
total_active_secondsnumberActive workout time (sent every 5s, pauses when user leaves camera frame)

Assessment Exit Events

Events dispatched when a user exits an assessment before completing it.


EventData FieldsDescription
assessment_exitexerciseId: stringUser exited the assessment early (before results)
assessment_exit_resultsexerciseId: stringUser exited the assessment from the results screen

assessment_exit Payload:

1{
2  type: "assessment_exit",
3  data: {
4    exerciseId: string  // The assessment exercise identifier
5  }
6}

assessment_exit_results Payload:

1{
2  type: "assessment_exit_results",
3  data: {
4    exerciseId: string  // The assessment exercise identifier
5  }
6}

Use \assessment_exit\ to detect when users abandon an assessment mid-session, and \assessment_exit_results\ to detect when they leave after viewing their results.

Assessment Overview

AI-powered health assessments with two event types:

  • assessment_overview: Sent when results page loads
  • assessment_completed: Sent when user clicks restart or finish

Common Fields (All Assessments):

FieldTypeDescription
typestring"assessment_overview" or "assessment_completed"
assessmentTypestringAssessment identifier (e.g., "tug", "sls")
dateDateTimestamp when completed
timenumberTotal assessment time (seconds)
stepsnumber?Estimated step count (walking assessments)

Assessment Types:

  • Mobility: TUG (tug), Gait Speed Test (gaitspeedtest)
  • Balance: SLS (sls), SBSS (sbss), STSS (stss), Full Tandem (fulltandem)
  • Functional: STS (sts), Five Times STS (fivetimessts), FRT (frt)
  • Games: Balloon Pop (balloonpop), Color Chase (colorchase), Alien Squat Shooter (aliensquatshooter)

Risk Levels:

ValueMeaning
lowGood performance, minimal fall/balance risk
moderateSome limitations, may benefit from training
highSignificant limitations, balance training recommended

Mobility Assessments

TUG (Timed Up and Go) - assessmentType: "tug"


Stand-walk-turn-return-sit timing test.


FieldTypeDescription
timenumberTotal completion time (seconds)
stepsnumberEstimated step count
standingUpTimenumberTime to stand from seated (seconds)
sittingDownTimenumberTime to sit at end (seconds)
walkingForwardTimenumberTime walking to 3m marker (seconds)
walkingBackwardTimenumberTime walking back (seconds)
turningTimenumberTime spent turning (seconds)
backBendingAngleSittingnumber[]Back angles during sitting countdown (degrees)
backBendingAngleStandingnumber[]Back angles during movement (degrees)
averageSpeedMs_tugnumberAverage walking speed. Formula: 6m / time
avgBackBendingSittingnumber?Average back angle sitting (degrees)
avgBackBendingStandingnumber?Average back angle standing (degrees)



Gait Speed Test - assessmentType: "gaitspeedtest"


Walking speed measurement over 4 meters.


FieldTypeDescription
timenumberTotal test time (seconds)
stepsnumberEstimated step count
standingTimenumberTime in standing phase (seconds)
walkingTimenumberActive walking time (seconds)
averageGaitSpeednumberGait speed. Formula: 4m / time

Balance Assessments

SLS (Single Leg Stand) - assessmentType: "sls"


FieldTypeDescription
rightTimenumberDuration on right leg (seconds)
leftTimenumberDuration on left leg (seconds)
symmetryScore_slsnumber?Leg symmetry % (0-100). Formula: (min/max) * 100
riskLevel_slsstring"low", "moderate", or "high"

Risk Calculation:

  • Low: Min time >=20s AND symmetry good (difference <=5s)
  • Moderate: Min time >=10s AND average >=15s
  • High: All other cases



SBSS (Side-by-Side Stand) - assessmentType: "sbss"


FieldTypeDescription
timeInProperPosition_sbssnumberTime in correct stance (max 10s)
maxShoulderShift_sbssnumberMax lateral shoulder shift (% of shoulder width)
maxHipShift_sbssnumberMax lateral hip shift (% of hip width)
feetMoved_sbssbooleanWhether feet moved
riskLevel_sbssstring"low", "moderate", or "high"

Risk Calculation:

  • High: Feet moved OR (time <7s AND sway >=30%)
  • Moderate: Time >=7s AND sway <30%
  • Low: Time >=9.5s AND sway <15%



STSS (Semi-Tandem Stand) - assessmentType: "stss"


FieldTypeDescription
timeInProperPosition_stssnumberTime in correct stance (max 10s)
maxShoulderShift_stssnumberMax shoulder shift (% of width)
maxHipShift_stssnumberMax hip shift (% of projection)
feetMoved_stssbooleanWhether feet moved
riskLevel_stssstring"low", "moderate", or "high"

Risk calculation same as SBSS.




Full Tandem Stand - assessmentType: "fulltandem"


FieldTypeDescription
timenumberTotal test time (seconds)
timeInProperPosition_fulltandemnumberTime in heel-to-toe stance (max 10s)
maxShoulderShift_fulltandemnumberMax shoulder shift (%)
maxHipShift_fulltandemnumberMax hip shift (%)
feetMoved_fulltandembooleanWhether feet moved
testFailed_fulltandembooleanWhether test was terminated early
terminationReason_fulltandemstring?Reason for early termination
riskLevel_fulltandemstring"low", "moderate", or "high"

Risk Calculation:

  • Low: Time >=10s AND no feet movement
  • Moderate: Time >=5s
  • High: Time <5s

Functional Assessments

STS (30-Second Sit-to-Stand) - assessmentType: "sts"


FieldTypeDescription
repsnumberTotal reps completed in 30 seconds
averageSittingTimenumberAverage time sitting per rep (seconds)
averageStandingTimenumberAverage time standing per rep (seconds)
avgTimePerRep_stsnumber?Average seconds per rep. Formula: 30 / reps
repTimeVariance_minRepTimenumber?Fastest rep time (seconds)
repTimeVariance_maxRepTimenumber?Slowest rep time (seconds)
repTimeVariance_minRepIndexnumber?Which rep was fastest (1-indexed)
repTimeVariance_maxRepIndexnumber?Which rep was slowest (1-indexed)



Five Times STS - assessmentType: "fivetimessts"


FieldTypeDescription
timenumberTotal completion time for 5 reps (seconds)
averageSittingTimenumberAverage time sitting (seconds)
averageStandingTimenumberAverage time standing (seconds)



FRT (Functional Reach Test) - assessmentType: "frt"


FieldTypeDescription
reachnumberMaximum forward reach (cm)
maxHeelLiftnumberMaximum heel lift detected (cm)
heelLiftCountnumberCount of heel lift violations
legLiftCountnumberCount of leg lift violations
testCompletedbooleanWhether test finished normally
endReasonstring?Reason for early termination
riskLevel_frtstring?"low", "moderate", or "high"

End Reason Values:

  • "Feet moved out of zone"
  • "User left zone"
  • "User turned forward"
  • "Arm dropped completely"
  • "Reference lost"
  • "Unhandled state"

Risk Calculation:

  • High: Test not completed OR reach <=15cm
  • Moderate: Reach 15-25cm
  • Low: Reach >25cm

Game Assessments

Balloon Pop - assessmentType: "balloonpop"


FieldTypeDescription
gameScorenumberTotal balloons popped
averageReactionTimestringAverage time to pop (seconds)
maxIdleTimestringMax time without action (seconds)
averageSpeed_balloonpopnumberBalloons/second. Formula: gameScore / 30
masteryTitle_balloonpopstringAchievement tier

Mastery Titles:

ScoreTitle
>=30pop_tastic_hero
>=25magic_popper
>=20super_duper_popper
>=15sparkly_popper
>=10giggly_popper
>=5bouncy_bubbler
<5tiny_popper



Color Chase - assessmentType: "colorchase"


FieldTypeDescription
gameScorenumberTotal score achieved
levelReachednumberHighest level completed
totalDurationstringTotal game duration (seconds)
averageReactionTimestringAverage reaction time per tap (seconds)
maxIdleTimestringMax time between taps (seconds)
masteryTitle_colorchasestringAchievement tier

Mastery Titles:

LevelTitle
>=10color_chase_legend
>=8magic_color_wizard
>=6super_color_star
>=4shiny_sequencer
>=2rainbow_chaser
>=1color_buddy
<1little_color_finder



Alien Squat Shooter - assessmentType: "aliensquatshooter"


FieldTypeDescription
gameScorenumberTotal aliens destroyed
squatsPerformednumberNumber of squats completed
totalDurationstringTotal game duration (seconds)
averageSquatRatestringSquats per second
maxTimeBetweenSquatsstringMax idle between squats (seconds)
averageAlienDestroyTimestringAverage time to destroy alien (seconds)
masteryTitle_aliensquatshooterstringAchievement tier

Mastery Titles:

ScoreTitle
>=25alien_annihilator
>=20cosmic_blaster
>=15star_shooter
>=10galactic_gunner
>=5space_squatter
<5rookie_defender



Health Benefits (All Games)


Included in payload for all game types.


1healthBenefits: {
2  heartDiseaseReduction: number,  // Estimated % reduction (max 15)
3  diabetesReduction: number,      // Estimated % reduction (max 20)
4  obesityReduction: number,       // Estimated % reduction (max 10)
5  depressionReduction: number     // Estimated % reduction (max 15)
6}

Health Benefit Calculation:

reduction = min((gameScore / 100) * maxReduction, maxReduction)

Event Flow Examples

Complete Workout Flow:

1. kinestex_launched - Application starts

2. workout_opened - User views workout details

3. workout_started - Workout begins

4. returned_camera_frame / left_camera_frame - Frame tracking

5. Multiple exercise_completed - Each exercise finished

6. workout_overview - Summary statistics

7. exercise_overview - All exercises summary

8. workout_completed - User exits statistics

9. exit_kinestex - Application closed


Challenge Flow:

1. challenge_started - Challenge begins

2. exercise_completed - Exercise finished

3. challenge_completed - Challenge complete

4. challenge_exit - Exit from challenge


Assessment Flow:

1. kinestex_launched - Application starts

2. Assessment performed (user follows on-screen instructions)

3. assessment_overview - Results page loads with all metrics

4. assessment_completed - User clicks restart or finish

5. assessment_exit_results - User exits from results screen (or assessment_exit if they exit early)

6. exit_kinestex - Application closed

Need Help?

Our team is ready to assist with your integration.

Contact Support