# Workout Events

Events for workout lifecycle and statistics.

| Event | Data Fields | Description |
|-------|-------------|-------------|
| workout_opened | title: string, id: string, date: string | Workout details page opened |
| workout_started | id: string, date: string | Workout session started |
| workout_started (alt) | workoutId: string | Alternative workout start format |
| workout_completed | workout: string, date: string | Workout finished, user exits overview |
| workout_ended | id: string, exit_type: string, date: string | Workout session ended (see exit_type values below) |
| workout_overview | data: object | Complete workout summary statistics |

**workout_ended exit_type values:**

| Value | Meaning |
|-------|---------|
| complete | User finished the entire workout including outro |
| exit | User abandoned the workout mid-session |
| outro | User exited from the outro/cooldown screen after completing all exercises |

**workout_overview Data Structure:**
```
{
  workout_title: string,            // Workout name
  workout_id: string,               // Unique workout ID
  target_duration_seconds: number,  // Target workout duration (seconds)
  workout_duration_seconds: number, // Total wall-clock session time
                                    // (includes rest, transitions, pauses).
                                    // For challenges/assessments this equals
                                    // total_time_spent (no wall-clock concept)
  total_time_spent: number,         // Active exercise time only (seconds)
  completed_reps_count: number,     // Total completed reps
  target_reps_count: number,        // Total target reps
  calories_burned: number,          // Calories (2 decimal places)
  completion_percentage: number,    // Completion % (2 decimals)
  total_mistakes: number,           // Total mistake count
  accuracy_score: number,           // Overall accuracy (0-100)
  efficiency_score: number,         // Efficiency metric (0-100)
  total_exercise: number,           // Number of exercises
  actual_hold_time_seconds: number, // Time in correct position
  target_hold_time_seconds: number  // Target hold time
}
```

**Note:** Use `workout_duration_seconds` to display or log the full session time (including rest periods). Use `total_time_spent` if you only need active exercise time.

**Handling Workout Overview**

_Swift (iOS)_
```swift
case .workout_overview(let data):
    if let calories = data["calories_burned"] as? Double,
       let completion = data["completion_percentage"] as? Double {
        print("Burned \(calories) cal, \(completion)% complete")
    }
```

_Kotlin (Android)_
```kotlin
is WebViewMessage.WorkoutOverview -> {
    val calories = message.caloriesBurned
    val completion = message.completionPercentage
    Log.d("Workout", "Burned $calories cal, $completion% complete")
}
```

_React Native_
```jsx
case "workout_overview":
  const { calories_burned, completion_percentage, accuracy_score } = data;
  console.log(`Workout: ${completion_percentage}% complete`);
  console.log(`Calories: ${calories_burned}, Accuracy: ${accuracy_score}`);
  break;
```

_Flutter_
```dart
if (message is WorkoutOverview) {
  print("Calories: ${message.caloriesBurned}");
  print("Completion: ${message.completionPercentage}%");
  print("Accuracy: ${message.accuracyScore}");
}
```

_HTML / JavaScript_
```html
case "workout_overview":
  const stats = message.data;
  console.log("Workout:", stats.workout_title);
  console.log("Calories:", stats.calories_burned);
  console.log("Accuracy:", stats.accuracy_score);
  break;
```

_React (TypeScript)_
```tsx
case "workout_overview":
  const { calories_burned, completion_percentage, accuracy_score } = data;
  console.log(`Workout: ${completion_percentage}% complete`);
  console.log(`Calories: ${calories_burned}, Accuracy: ${accuracy_score}`);
  break;
```

---
Source: https://kinestex.com/docs/data-points/workout-events · Index: https://kinestex.com/llms.txt
