Error & Status Events
Events for errors, warnings, and active time tracking.
| Event | Data Fields | Description |
| error_occurred | data: string | General error message |
| error_occurred | message: string | Alternative error format |
| error_occurred | data: string, error: any | Error with details |
| warning | data: string | Warning message |
| total_active_seconds | number | Active workout time (sent every 5s, pauses when user leaves camera frame) |
| ios_video_fallback_activated | reason, videoUrl, readyState, userAgent | iOS dropped to image-based playback after the full recovery ladder (silent retry → tap-to-play prompt → image mode) failed. The exercise still runs in a degraded-but-functional mode |
ios_video_fallback_activated Payload:
typescript
1{
2 type: "ios_video_fallback_activated",
3 reason: string, // which recovery stage failed (see below)
4 videoUrl: string, // URL of the affected video
5 readyState: number | null, // HTMLMediaElement readyState; null when no video element was available
6 userAgent: string // Device user agent string
7}reason is one of:
"stuck_after_tap"— user tapped the prompt but the video still had no media data"tap_prompt_timeout"— the tap-to-play prompt was ignored (~5s) and auto-advanced to image mode"tap_play_element_missing"— the video element was gone when the user tapped"tap_play_rejected_<ErrorName>"— the gesture-driven play was rejected, e.g."tap_play_rejected_NotAllowedError"
(The former single value "video_stuck_at_metadata" is no longer emitted — prefer treating any occurrence of this event as "iOS entered image mode" and branch on the reason prefixes only if needed. Handle readyState as nullable.)
Use this event for analytics or to surface a notice in your UI when iOS playback degrades. Only listen for it if you need visibility into iOS playback issues — no integrator action is required.