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:
typescript
1{
2 workout_title: string, // Workout name
3 workout_id: string, // Unique workout ID
4 target_duration_seconds: number, // Target workout duration (seconds)
5 workout_duration_seconds: number, // Total wall-clock session time
6 // (includes rest, transitions, pauses).
7 // For challenges/assessments this equals
8 // total_time_spent (no wall-clock concept)
9 total_time_spent: number, // Active exercise time only (seconds)
10 completed_reps_count: number, // Total completed reps
11 target_reps_count: number, // Total target reps
12 calories_burned: number, // Calories (2 decimal places)
13 completion_percentage: number, // Completion % (2 decimals)
14 total_mistakes: number, // Total mistake count
15 accuracy_score: number, // Overall accuracy (0-100)
16 efficiency_score: number, // Efficiency metric (0-100)
17 total_exercise: number, // Number of exercises
18 actual_hold_time_seconds: number, // Time in correct position
19 target_hold_time_seconds: number // Target hold time
20}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
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 }