KinesteX

Exercise Events

Events for individual exercise tracking.


EventDescription
exercise_completedIndividual exercise completed
exercise_overviewAll exercises summary (array)
exercise_auto_skippedThe SDK skipped a stalled exercise on its own (see below)

exercise_completed Data Structure:

typescript
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  perfect_hold_position: number, // Time in perfect hold position (seconds).
8                                 // 0 for non-hold exercises
9  calories: number,              // Calories burned
10  exercise_id: string,           // Exercise ID
11  exercise_index: number,        // 1-based position in the workout, rest periods included
12  total_exercises: number,       // Total entries in the workout, rest periods included
13  mistakes: Array<{              // Mistakes made
14    mistake: string,
15    count: number
16  }>,
17  average_accuracy?: number      // Average accuracy (0-1, optional)
18}

exercise_index and total_exercises count rest periods here, unlike workout_progress. In the Gym Log, editing a set that was already reported sends exercise_completed again for the same exercise, so treat it as an update.


exercise_auto_skipped: sent when the SDK moves past an exercise because the user made 7 form mistakes in a row (a correct rep resets the count), or no rep or mistake was detected for 30 seconds in a rep-based exercise. A 5-second warning comes first, and a correct rep during it cancels the skip. The usual exercise_completed and workout_progress for that exercise follow. Only in Workout, Plan, Personalized Plan and Custom Workout. It cannot be turned off; includePhrases can only drop the spoken auto_skip line.

typescript
1{
2  type: "exercise_auto_skipped",
3  data: {
4    exercise_id: string,
5    exercise_title: string,
6    trigger: "mistake_count" | "inactivity",
7    exercise_index: number,      // 1-based, rest periods included
8    total_exercises: number
9  },
10  date: string                   // "DD MM YYYY HH:MM:SS"
11}

exercise_overview Item Structure:

typescript
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}