Session & Upload Events
Events related to workout session saving and motion recording uploads. The saving events are only sent when the session is saved to the backend (shouldSendStats: true, which is the default for the AI Trainer). workout_completion_overlay_dismissed is sent either way.
| Event | Data Fields | Description |
| workout_session_saved | data: object | Workout session successfully saved to backend. May arrive after a delay when the save was recovered by the offline outbox (same payload) — see the offline note under Plans & Programs |
| session_save_complete | - | The session and its motion recordings finished uploading (also sent when there was nothing to upload). Not sent for saves recovered by the offline outbox |
| motion_upload_progress | data: { completed: number, total: number } | Motion recording upload progress |
| motion_upload_error | data: { error: string } | Motion recording upload failed or timed out |
| workout_completion_overlay_dismissed | - | The workout completion overlay closed (tap or auto-dismiss) |
workout_session_saved Data Structure:
typescript
1{
2 session_id: number, // Backend-assigned session ID
3 content_id: string | null, // Workout ID
4 content_type: string, // Integration that ran it: "Workout", "Plan",
5 // "PersonalizedPlan", "CustomWorkout", "Challenge",
6 // "Trainer", ...
7 workout_title: string, // Name of the workout
8 accuracy_score: number, // Overall accuracy (0-100)
9 efficiency_score: number, // Efficiency score (0-100)
10 completion_percentage: number, // How much of the workout was completed (0-100)
11 completed_reps_count: number, // Total reps completed
12 calories_burned: number // Estimated calories burned
13}motion_upload_progress Data Structure:
typescript
1{
2 completed: number, // Number of exercise recordings uploaded so far
3 total: number // Total number of exercise recordings to upload
4}