movementScore (number, 0..1) — movement amplitude similarity
grade (string) — letter grade for the repetition
Example:
Use overallScore if you want a single global score. Use the sub-scores if you want custom logic or custom UI feedback.
Concrete examples
Standalone form_score event (if you see it)
If a form_score-only message exists in other contexts (e.g. live feedback while a rep is in progress), it must not be treated as the authoritative grade for a counted rep.
Single source of truth for counted reps:counter.form_score.
Tips for developers: minGrade vs client-side filtering
Server-side filtering (recommended): minGrade
If you set minGrade=B, PoseTracker only increments current_count for reps graded A or B. This means:
current_count becomes your “valid reps” count
each counter event already corresponds to a valid rep
Client-side filtering (if you don’t want server filtering)
If you do not set minGrade, you receive every counted rep with its grade inside counter.form_score. You can maintain your own strict count:
Pseudo-logic:
if payload.form_score.grade is in ["A","B"], increment your local strict counter
Errors
(keep your existing error section; ensure it includes plan restriction errors and invalid_exercise)