├── version
├── .gitignore
├── img
└── sample.png
├── sample
├── graphs
│ ├── Push Up-reps.png
│ ├── Sit Up-reps.png
│ ├── Ab Wheel-reps.png
│ ├── Face Pull-reps.png
│ ├── Dumbbell Row-reps.png
│ ├── Face Pull-volume.png
│ ├── Face Pull-weight.png
│ ├── Pistol Squat-reps.png
│ ├── Decline Crunch-reps.png
│ ├── Dumbbell Row-volume.png
│ ├── Dumbbell Row-weight.png
│ ├── Lying Leg Raise-reps.png
│ ├── Hanging Leg Raise-reps.png
│ ├── Kettlebell Swing-reps.png
│ ├── Lunge (Dumbbell)-reps.png
│ ├── Seated Cable Row-reps.png
│ ├── Seated Calf Raise-reps.png
│ ├── Bicep Curl (Barbell)-reps.png
│ ├── Chest Fly (Dumbbell)-reps.png
│ ├── Chest Fly (Machine)-reps.png
│ ├── Front Raise (Cable)-reps.png
│ ├── Hack Squat (Machine)-reps.png
│ ├── Hammer Curl (Cable)-reps.png
│ ├── Hip Thrust (Barbell)-reps.png
│ ├── Kettlebell Swing-volume.png
│ ├── Kettlebell Swing-weight.png
│ ├── Lat Pulldown (Cable)-reps.png
│ ├── Leg Press (Machine)-reps.png
│ ├── Lunge (Dumbbell)-volume.png
│ ├── Lunge (Dumbbell)-weight.png
│ ├── Pullover (Dumbbell)-reps.png
│ ├── Seated Cable Row-volume.png
│ ├── Seated Cable Row-weight.png
│ ├── Seated Calf Raise-volume.png
│ ├── Seated Calf Raise-weight.png
│ ├── Bench Press (Barbell)-reps.png
│ ├── Bench Press (Dumbbell)-reps.png
│ ├── Bicep Curl (Barbell)-volume.png
│ ├── Bicep Curl (Barbell)-weight.png
│ ├── Bicep Curl (Dumbbell)-reps.png
│ ├── Chest Fly (Dumbbell)-volume.png
│ ├── Chest Fly (Dumbbell)-weight.png
│ ├── Chest Fly (Machine)-volume.png
│ ├── Chest Fly (Machine)-weight.png
│ ├── Front Raise (Cable)-volume.png
│ ├── Front Raise (Cable)-weight.png
│ ├── Front Raise (Dumbbell)-reps.png
│ ├── Hack Squat (Machine)-volume.png
│ ├── Hack Squat (Machine)-weight.png
│ ├── Hammer Curl (Cable)-volume.png
│ ├── Hammer Curl (Cable)-weight.png
│ ├── Hip Thrust (Barbell)-volume.png
│ ├── Hip Thrust (Barbell)-weight.png
│ ├── Lat Pulldown (Cable)-volume.png
│ ├── Lat Pulldown (Cable)-weight.png
│ ├── Lateral Raise (Cable)-reps.png
│ ├── Leg Press (Machine)-volume.png
│ ├── Leg Press (Machine)-weight.png
│ ├── Pullover (Dumbbell)-volume.png
│ ├── Pullover (Dumbbell)-weight.png
│ ├── Bench Press (Barbell)-volume.png
│ ├── Bench Press (Barbell)-weight.png
│ ├── Bench Press (Dumbbell)-volume.png
│ ├── Bench Press (Dumbbell)-weight.png
│ ├── Bent Over Row (Barbell)-reps.png
│ ├── Bent Over Row (Barbell)-volume.png
│ ├── Bent Over Row (Barbell)-weight.png
│ ├── Bicep Curl (Dumbbell)-volume.png
│ ├── Bicep Curl (Dumbbell)-weight.png
│ ├── Cable Twist (Up to down)-reps.png
│ ├── Decline Crunch (Weighted)-reps.png
│ ├── Front Raise (Dumbbell)-volume.png
│ ├── Front Raise (Dumbbell)-weight.png
│ ├── Hip Abduction (Machine)-reps.png
│ ├── Hip Abduction (Machine)-volume.png
│ ├── Hip Abduction (Machine)-weight.png
│ ├── Lateral Raise (Cable)-volume.png
│ ├── Lateral Raise (Cable)-weight.png
│ ├── Lateral Raise (Dumbbell)-reps.png
│ ├── Leg Extension (Machine)-reps.png
│ ├── Leg Extension (Machine)-volume.png
│ ├── Leg Extension (Machine)-weight.png
│ ├── Overhead Press (Barbell)-reps.png
│ ├── Overhead Press (Dumbbell)-reps.png
│ ├── Seated Leg Curl (Machine)-reps.png
│ ├── Triceps Extension (Cable)-reps.png
│ ├── Cable Twist (Up to down)-volume.png
│ ├── Cable Twist (Up to down)-weight.png
│ ├── Decline Crunch (Weighted)-volume.png
│ ├── Decline Crunch (Weighted)-weight.png
│ ├── Lateral Raise (Dumbbell)-volume.png
│ ├── Lateral Raise (Dumbbell)-weight.png
│ ├── Overhead Press (Barbell)-volume.png
│ ├── Overhead Press (Barbell)-weight.png
│ ├── Overhead Press (Dumbbell)-volume.png
│ ├── Overhead Press (Dumbbell)-weight.png
│ ├── Seated Leg Curl (Machine)-volume.png
│ ├── Seated Leg Curl (Machine)-weight.png
│ ├── Triceps Extension (Barbell)-reps.png
│ ├── Triceps Extension (Cable)-volume.png
│ ├── Triceps Extension (Cable)-weight.png
│ ├── Leg Press Horizontal (Machine)-reps.png
│ ├── Standing Calf Raise (Machine)-reps.png
│ ├── Triceps Extension (Barbell)-volume.png
│ ├── Triceps Extension (Barbell)-weight.png
│ ├── Leg Press Horizontal (Machine)-volume.png
│ ├── Leg Press Horizontal (Machine)-weight.png
│ ├── Standing Calf Raise (Machine)-volume.png
│ ├── Standing Calf Raise (Machine)-weight.png
│ ├── Chest Supported Incline Row (Dumbbell)-reps.png
│ ├── Chest Supported Incline Row (Dumbbell)-volume.png
│ └── Chest Supported Incline Row (Dumbbell)-weight.png
├── README.md
├── 6.workouts.html
├── 1.login.py
├── 4.create-stats.py
├── 2.workout-history.py
├── 3.create-charts.py
└── 5.chart.html
├── .github
└── workflows
│ ├── main.yml
│ └── ai-responder.yml
├── api
├── workoutcount.md
├── login.md
├── user_preferences.md
├── account.md
├── new-routine.md
├── update-routine.md
├── routines_sync_batch.md
├── workouts_batch.md
└── feed_workouts_paged.md
├── README.md
└── LICENSE
/version:
--------------------------------------------------------------------------------
1 | version=0.0.16
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | sample/exports.sh
2 |
--------------------------------------------------------------------------------
/img/sample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/img/sample.png
--------------------------------------------------------------------------------
/sample/graphs/Push Up-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Push Up-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Sit Up-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Sit Up-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Ab Wheel-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Ab Wheel-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Face Pull-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Face Pull-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Dumbbell Row-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Dumbbell Row-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Face Pull-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Face Pull-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Face Pull-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Face Pull-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Pistol Squat-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Pistol Squat-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Decline Crunch-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Decline Crunch-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Dumbbell Row-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Dumbbell Row-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Dumbbell Row-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Dumbbell Row-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Lying Leg Raise-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Lying Leg Raise-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Hanging Leg Raise-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Hanging Leg Raise-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Kettlebell Swing-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Kettlebell Swing-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Lunge (Dumbbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Lunge (Dumbbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Seated Cable Row-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Seated Cable Row-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Seated Calf Raise-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Seated Calf Raise-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Bicep Curl (Barbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bicep Curl (Barbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Chest Fly (Dumbbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Chest Fly (Dumbbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Chest Fly (Machine)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Chest Fly (Machine)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Front Raise (Cable)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Front Raise (Cable)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Hack Squat (Machine)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Hack Squat (Machine)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Hammer Curl (Cable)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Hammer Curl (Cable)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Hip Thrust (Barbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Hip Thrust (Barbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Kettlebell Swing-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Kettlebell Swing-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Kettlebell Swing-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Kettlebell Swing-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Lat Pulldown (Cable)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Lat Pulldown (Cable)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Leg Press (Machine)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Leg Press (Machine)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Lunge (Dumbbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Lunge (Dumbbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Lunge (Dumbbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Lunge (Dumbbell)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Pullover (Dumbbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Pullover (Dumbbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Seated Cable Row-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Seated Cable Row-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Seated Cable Row-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Seated Cable Row-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Seated Calf Raise-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Seated Calf Raise-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Seated Calf Raise-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Seated Calf Raise-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Bench Press (Barbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bench Press (Barbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Bench Press (Dumbbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bench Press (Dumbbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Bicep Curl (Barbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bicep Curl (Barbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Bicep Curl (Barbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bicep Curl (Barbell)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Bicep Curl (Dumbbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bicep Curl (Dumbbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Chest Fly (Dumbbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Chest Fly (Dumbbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Chest Fly (Dumbbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Chest Fly (Dumbbell)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Chest Fly (Machine)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Chest Fly (Machine)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Chest Fly (Machine)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Chest Fly (Machine)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Front Raise (Cable)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Front Raise (Cable)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Front Raise (Cable)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Front Raise (Cable)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Front Raise (Dumbbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Front Raise (Dumbbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Hack Squat (Machine)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Hack Squat (Machine)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Hack Squat (Machine)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Hack Squat (Machine)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Hammer Curl (Cable)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Hammer Curl (Cable)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Hammer Curl (Cable)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Hammer Curl (Cable)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Hip Thrust (Barbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Hip Thrust (Barbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Hip Thrust (Barbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Hip Thrust (Barbell)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Lat Pulldown (Cable)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Lat Pulldown (Cable)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Lat Pulldown (Cable)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Lat Pulldown (Cable)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Lateral Raise (Cable)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Lateral Raise (Cable)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Leg Press (Machine)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Leg Press (Machine)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Leg Press (Machine)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Leg Press (Machine)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Pullover (Dumbbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Pullover (Dumbbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Pullover (Dumbbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Pullover (Dumbbell)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Bench Press (Barbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bench Press (Barbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Bench Press (Barbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bench Press (Barbell)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Bench Press (Dumbbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bench Press (Dumbbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Bench Press (Dumbbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bench Press (Dumbbell)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Bent Over Row (Barbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bent Over Row (Barbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Bent Over Row (Barbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bent Over Row (Barbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Bent Over Row (Barbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bent Over Row (Barbell)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Bicep Curl (Dumbbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bicep Curl (Dumbbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Bicep Curl (Dumbbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Bicep Curl (Dumbbell)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Cable Twist (Up to down)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Cable Twist (Up to down)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Decline Crunch (Weighted)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Decline Crunch (Weighted)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Front Raise (Dumbbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Front Raise (Dumbbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Front Raise (Dumbbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Front Raise (Dumbbell)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Hip Abduction (Machine)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Hip Abduction (Machine)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Hip Abduction (Machine)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Hip Abduction (Machine)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Hip Abduction (Machine)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Hip Abduction (Machine)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Lateral Raise (Cable)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Lateral Raise (Cable)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Lateral Raise (Cable)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Lateral Raise (Cable)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Lateral Raise (Dumbbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Lateral Raise (Dumbbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Leg Extension (Machine)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Leg Extension (Machine)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Leg Extension (Machine)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Leg Extension (Machine)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Leg Extension (Machine)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Leg Extension (Machine)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Overhead Press (Barbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Overhead Press (Barbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Overhead Press (Dumbbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Overhead Press (Dumbbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Seated Leg Curl (Machine)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Seated Leg Curl (Machine)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Triceps Extension (Cable)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Triceps Extension (Cable)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Cable Twist (Up to down)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Cable Twist (Up to down)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Cable Twist (Up to down)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Cable Twist (Up to down)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Decline Crunch (Weighted)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Decline Crunch (Weighted)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Decline Crunch (Weighted)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Decline Crunch (Weighted)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Lateral Raise (Dumbbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Lateral Raise (Dumbbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Lateral Raise (Dumbbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Lateral Raise (Dumbbell)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Overhead Press (Barbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Overhead Press (Barbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Overhead Press (Barbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Overhead Press (Barbell)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Overhead Press (Dumbbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Overhead Press (Dumbbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Overhead Press (Dumbbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Overhead Press (Dumbbell)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Seated Leg Curl (Machine)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Seated Leg Curl (Machine)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Seated Leg Curl (Machine)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Seated Leg Curl (Machine)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Triceps Extension (Barbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Triceps Extension (Barbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Triceps Extension (Cable)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Triceps Extension (Cable)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Triceps Extension (Cable)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Triceps Extension (Cable)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Leg Press Horizontal (Machine)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Leg Press Horizontal (Machine)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Standing Calf Raise (Machine)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Standing Calf Raise (Machine)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Triceps Extension (Barbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Triceps Extension (Barbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Triceps Extension (Barbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Triceps Extension (Barbell)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Leg Press Horizontal (Machine)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Leg Press Horizontal (Machine)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Leg Press Horizontal (Machine)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Leg Press Horizontal (Machine)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Standing Calf Raise (Machine)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Standing Calf Raise (Machine)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Standing Calf Raise (Machine)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Standing Calf Raise (Machine)-weight.png
--------------------------------------------------------------------------------
/sample/graphs/Chest Supported Incline Row (Dumbbell)-reps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Chest Supported Incline Row (Dumbbell)-reps.png
--------------------------------------------------------------------------------
/sample/graphs/Chest Supported Incline Row (Dumbbell)-volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Chest Supported Incline Row (Dumbbell)-volume.png
--------------------------------------------------------------------------------
/sample/graphs/Chest Supported Incline Row (Dumbbell)-weight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmzoneill/hevyapp-api/HEAD/sample/graphs/Chest Supported Incline Row (Dumbbell)-weight.png
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | ---
2 | name: CICD
3 |
4 | on:
5 | push:
6 | branches: [ "main" ]
7 | pull_request:
8 | branches: [ "main" ]
9 |
10 | permissions: write-all
11 |
12 | jobs:
13 | cicd:
14 | secrets: inherit
15 | uses: dmzoneill/dmzoneill/.github/workflows/dispatch.yaml@main
16 | with:
17 | basic: "true"
18 |
--------------------------------------------------------------------------------
/api/workoutcount.md:
--------------------------------------------------------------------------------
1 | ## Workout count
2 |
3 | ### request
4 |
5 | ```
6 | import requests
7 |
8 | headers = {
9 | 'accept': 'application/json, text/plain, */*',
10 | 'x-api-key': 'klean_kanteen_insulated',
11 | 'auth-token': '.......-.....-....-....-.............',
12 | 'Host': 'api.hevyapp.com',
13 | 'User-Agent': 'okhttp/4.9.3',
14 | 'Pragma': 'no-cache',
15 | 'Cache-Control': 'no-cache',
16 | }
17 |
18 | response = requests.get('https://api.hevyapp.com/workout_count', headers=headers)
19 | ```
20 |
21 | ### response
22 | ```
23 | {
24 | "workout_count": 0
25 | }
26 | ```
--------------------------------------------------------------------------------
/sample/README.md:
--------------------------------------------------------------------------------
1 | # hevy-api
2 |
3 | ## Welcome
4 |
5 | - 1.login.py - fairly self explanatory
6 | - 2.workout-history.py - slightly larger exmaple, also saves workouts.json, used for the following examples
7 | - 3.create-charts.py - uses workouts.json and matplotlib.pyplot to create charts found in graphs/
8 | - 4.create-stats.py - takes workouts and simplifies the data
9 | - 5.chart.html - uses stats.json and chartjs to give and clean example of use in webpage.
10 |
11 | ## You will need to define these:
12 |
13 | - export hevy_device_uuid=$(uuidgen)
14 | - export hevy_application_id=$(date | sha1sum | awk '{print $1}')
15 | - export hevy_username="ddddddddddddddddd"
16 | - export hevy_password="gggggggggggggggggg"
--------------------------------------------------------------------------------
/.github/workflows/ai-responder.yml:
--------------------------------------------------------------------------------
1 | ---
2 | name: AI Issue Responder
3 |
4 | on:
5 | issues:
6 | types: [opened]
7 |
8 | permissions:
9 | issues: write
10 |
11 | jobs:
12 | ai-respond:
13 | if: github.actor != 'dependabot[bot]'
14 | runs-on: ubuntu-latest
15 |
16 | steps:
17 | - name: Download AI responder script
18 | run: |
19 | curl -sSL "https://raw.githubusercontent.com/dmzoneill/dmzoneill/main/ai-responder.py" -o ai-responder.py
20 | chmod +x ai-responder.py
21 |
22 | - name: Run AI responder
23 | env:
24 | OPENAI_API_KEY: ${{ secrets.AI_API_KEY }}
25 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
26 | GITHUB_REPOSITORY: ${{ github.repository }}
27 | ISSUE_NUMBER: ${{ github.event.issue.number }}
28 | ISSUE_REPO_URL: "https://github.com/${{ github.repository }}"
29 | run: ./ai-responder.py
30 |
--------------------------------------------------------------------------------
/api/login.md:
--------------------------------------------------------------------------------
1 | ## login
2 |
3 | ### request
4 |
5 | ```
6 | import requests
7 |
8 | headers = {
9 | 'Accept': 'application/json, text/plain, */*',
10 | 'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
11 | 'Cache-Control': 'no-cache',
12 | 'Connection': 'keep-alive',
13 | 'Content-Type': 'application/json',
14 | 'DNT': '1',
15 | 'Origin': 'https://www.hevy.com',
16 | 'Pragma': 'no-cache',
17 | 'Referer': 'https://www.hevy.com/',
18 | 'Sec-Fetch-Dest': 'empty',
19 | 'Sec-Fetch-Mode': 'cors',
20 | 'Sec-Fetch-Site': 'cross-site',
21 | 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
22 | 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"',
23 | 'sec-ch-ua-mobile': '?0',
24 | 'sec-ch-ua-platform': '"Linux"',
25 | 'x-api-key': 'shelobs_hevy_web',
26 | }
27 |
28 | json_data = {
29 | 'emailOrUsername': '................',
30 | 'password': '................',
31 | }
32 |
33 | response = requests.post('https://api.hevyapp.com/login', headers=headers, json=json_data)
34 |
35 | ```
36 |
37 | ### response
38 | ```
39 | {
40 | "auth_token":".......-.....-....-....-............."
41 | }
42 | ```
--------------------------------------------------------------------------------
/sample/6.workouts.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | My Hevy Stats
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | |
14 | Short Id
15 | |
16 |
17 | Start Time
18 | |
19 |
20 | End Time
21 | |
22 |
23 | Name
24 | |
25 |
26 | Exercises
27 | |
28 |
29 | Total volume
30 | |
31 |
32 |
33 |
34 |
35 |
36 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/sample/1.login.py:
--------------------------------------------------------------------------------
1 | from pprint import pprint
2 | import requests
3 | import os
4 | import sys
5 |
6 | hevy_username = os.getenv("hevy_username")
7 | hevy_password = os.environ.get("hevy_password")
8 |
9 | if hevy_username is None:
10 | sys.exit(1)
11 |
12 | if hevy_password is None:
13 | sys.exit(2)
14 |
15 | headers = {
16 | "Accept": "application/json, text/plain, */*",
17 | "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
18 | "Cache-Control": "no-cache",
19 | "Connection": "keep-alive",
20 | "Content-Type": "application/json",
21 | "DNT": "1",
22 | "Origin": "https://www.hevy.com",
23 | "Pragma": "no-cache",
24 | "Referer": "https://www.hevy.com/",
25 | "Sec-Fetch-Dest": "empty",
26 | "Sec-Fetch-Mode": "cors",
27 | "Sec-Fetch-Site": "cross-site",
28 | "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36",
29 | "sec-ch-ua": '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"',
30 | "sec-ch-ua-mobile": "?0",
31 | "sec-ch-ua-platform": '"Linux"',
32 | "x-api-key": "shelobs_hevy_web",
33 | }
34 |
35 | json_data = {
36 | "emailOrUsername": hevy_username,
37 | "password": hevy_password,
38 | }
39 |
40 | response = requests.post(
41 | "https://api.hevyapp.com/login", headers=headers, json=json_data
42 | )
43 |
44 | pprint(headers)
45 | pprint(json_data)
46 | pprint(response.json())
47 | pprint(response.ok)
48 | pprint(response.status_code)
49 |
--------------------------------------------------------------------------------
/api/user_preferences.md:
--------------------------------------------------------------------------------
1 | ## User preferences
2 |
3 | ### request
4 |
5 | ```
6 | import requests
7 |
8 | headers = {
9 | 'Accept': 'application/json, text/plain, */*',
10 | 'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
11 | 'Cache-Control': 'no-cache',
12 | 'Connection': 'keep-alive',
13 | 'DNT': '1',
14 | 'Origin': 'https://www.hevy.com',
15 | 'Pragma': 'no-cache',
16 | 'Referer': 'https://www.hevy.com/',
17 | 'Sec-Fetch-Dest': 'empty',
18 | 'Sec-Fetch-Mode': 'cors',
19 | 'Sec-Fetch-Site': 'cross-site',
20 | 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
21 | 'auth-token': '.......-.....-....-....-.............',
22 | 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"',
23 | 'sec-ch-ua-mobile': '?0',
24 | 'sec-ch-ua-platform': '"Linux"',
25 | 'x-api-key': 'shelobs_hevy_web',
26 | }
27 |
28 | response = requests.get('https://api.hevyapp.com/user_preferences', headers=headers)
29 | ```
30 |
31 | ### response
32 | ```
33 | {
34 | "username": "ddddddddddd",
35 | "language": null,
36 | "weight_unit": "kg",
37 | "distance_unit": "kilometers",
38 | "body_measurement_unit": "cm",
39 | "first_weekday": null,
40 | "default_rest_timer_seconds": null,
41 | "workout_keep_awake": null,
42 | "disabled_review_request": null,
43 | "superset_scrolling": false,
44 | "plate_calculator_enabled": true,
45 | "previous_workout_values_from_routine": null,
46 | "rpe_enabled": false,
47 | "timer_volume": null,
48 | "inline_set_timer_enabled": true
49 | }
50 | ```
--------------------------------------------------------------------------------
/sample/4.create-stats.py:
--------------------------------------------------------------------------------
1 | import json
2 |
3 | stats = {}
4 |
5 | names = []
6 | workout_exercises = {}
7 | workout_time = {}
8 | workout_volume = {}
9 |
10 | wos = json.loads(open("workouts.json").read())
11 |
12 | for X in wos:
13 | index = X["nth_workout"]
14 | name = X["name"]
15 | names.append(name.replace(" ", ""))
16 | workout_time[index] = round((X["end_time"] - X["start_time"]) / 60)
17 | workout_volume[index] = round(X["estimated_volume_kg"])
18 |
19 | for exercise in X["exercises"]:
20 | exercise_title = exercise["title"]
21 |
22 | if exercise_title not in workout_exercises.keys():
23 | workout_exercises[exercise_title] = {}
24 |
25 | volume = 0
26 | max = 0
27 | reps = 0
28 |
29 | for set in exercise["sets"]:
30 | if set["weight_kg"] is not None and set["reps"] is not None:
31 | volume += round(set["weight_kg"] * set["reps"])
32 | else:
33 | volume += 0
34 |
35 | reps += set["reps"] if set["reps"] is not None else 0
36 |
37 | if set["weight_kg"] is not None:
38 | max = set["weight_kg"] if set["weight_kg"] > max else max
39 |
40 | workout_exercises[exercise_title][index] = {}
41 | workout_exercises[exercise_title][index]["total_volume"] = round(volume)
42 | workout_exercises[exercise_title][index]["max_weight"] = max
43 | workout_exercises[exercise_title][index]["total_reps"] = reps
44 |
45 |
46 | names.sort()
47 |
48 | stats = {
49 | "workout_exercises": workout_exercises,
50 | "workout_time": workout_time,
51 | "workout_volume": workout_volume,
52 | }
53 |
54 | with open("stats.json", "w") as file1:
55 | file1.write(json.dumps(stats))
56 | file1.close()
57 |
--------------------------------------------------------------------------------
/api/account.md:
--------------------------------------------------------------------------------
1 | ## Feed workouts paged
2 |
3 | ### request
4 |
5 | ```
6 | import requests
7 |
8 | headers = {
9 | 'Accept': 'application/json, text/plain, */*',
10 | 'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
11 | 'Cache-Control': 'no-cache',
12 | 'Connection': 'keep-alive',
13 | 'DNT': '1',
14 | 'Origin': 'https://www.hevy.com',
15 | 'Pragma': 'no-cache',
16 | 'Referer': 'https://www.hevy.com/',
17 | 'Sec-Fetch-Dest': 'empty',
18 | 'Sec-Fetch-Mode': 'cors',
19 | 'Sec-Fetch-Site': 'cross-site',
20 | 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
21 | 'auth-token': '.......-.....-....-....-.............',
22 | 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"',
23 | 'sec-ch-ua-mobile': '?0',
24 | 'sec-ch-ua-platform': '"Linux"',
25 | 'x-api-key': 'shelobs_hevy_web',
26 | }
27 |
28 | response = requests.get('https://api.hevyapp.com/account', headers=headers)
29 |
30 | ```
31 |
32 | ### response
33 | ```
34 | {
35 | "id":".......-.....-....-....-.............",
36 | "username":"................",
37 | "email":"................",
38 | "full_name":"...............",
39 | "description":"Gym bro",
40 | "profile_pic":"https://pump-app.s3.eu-west-2.amazonaws.com/profile-images/.....................jpg",
41 | "likes_push_enabled":true,
42 | "follows_push_enabled":true,
43 | "comments_push_enabled":true,
44 | "comment_mention_push_enabled":true,
45 | "comment_discussion_push_enabled":true,
46 | "private_profile":true,
47 | "follower_count":0,
48 | "following_count":0,
49 | "created_at":"2023-03-05T17:50:28.769Z",
50 | "last_workout_at":"2023-03-15T10:49:39.873Z",
51 | "comment_replies_push_enabled":true,
52 | "accepted_terms_and_conditions":true,
53 | "is_coached":false
54 | }
55 | ```
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # hevy-api
2 |
3 | 
4 |
5 | ## Samples
6 |
7 | - [Samples](https://github.com/dmzoneill/hevyapp-api/tree/main/sample)
8 | - [Python pyplot example](https://dmzoneill.github.io/hevyapp-api/sample/chart.html)
9 | - [Chart js example](https://dmzoneill.github.io/hevyapp-api/sample/5.chart.html)
10 |
11 | ## Overviews
12 |
13 | - [login.md](https://github.com/dmzoneill/hevyapp-api/blob/main/api/login.md)
14 | - [account.md](https://github.com/dmzoneill/hevyapp-api/blob/main/api/account.md)
15 | - [workoutcount.md](https://github.com/dmzoneill/hevyapp-api/blob/main/api/workoutcount.md)
16 | - [feed_workouts_paged.md](https://github.com/dmzoneill/hevyapp-api/blob/main/api/feed_workouts_paged.md)
17 | - [routines_sync_batched.md](https://github.com/dmzoneill/hevyapp-api/blob/main/api/routines_sync_batched.md)
18 | - [user_preferences.md](https://github.com/dmzoneill/hevyapp-api/blob/main/api/user_preferences.md)
19 |
20 |
21 | ## How to dissect https calls for yourself
22 |
23 | ### Download
24 |
25 | - Android studio
26 | - [Charles proxy](https://www.charlesproxy.com/)
27 | - [apk-mitm](https://www.npmjs.com/package/apk-mitm/)
28 | - [com.hevy apk](https://m.apkpure.com/hevy-gym-log-workout-tracker/com.hevy/download)
29 |
30 | ### Setup
31 |
32 | 1. Open android studio
33 | 2. Create an android virtual device
34 | 3. Boot the device
35 | 4. Download the hevy app apk
36 | 5. Download apk-mitm
37 | 6. Patch the apk as described on [apk-mitm](https://www.npmjs.com/package/apk-mitm/)
38 | 7. Install charles proxy
39 | 8. Install the certificate and setup the proxy on the android device as described here:
40 | https://blog.logrocket.com/test-debug-android-apps-with-charles-web-proxy/
41 | 9. Using android studio upload the patched APK to the android device and then install it
42 | 10. open hevy app and login
43 |
44 | Hevy should use the proxy with the previously installed certificate and in charles you can now see the decrypted https requests.
--------------------------------------------------------------------------------
/api/new-routine.md:
--------------------------------------------------------------------------------
1 | ## New routine
2 |
3 | ### request
4 |
5 | ```
6 | import requests
7 |
8 | headers = {
9 | 'accept': 'application/json, text/plain, */*',
10 | 'x-api-key': 'klean_kanteen_insulated',
11 | 'auth-token': '.......-.....-....-....-.............',
12 | 'Content-Type': 'application/json',
13 | 'Host': 'api.hevyapp.com',
14 | 'User-Agent': 'okhttp/4.9.3',
15 | 'Pragma': 'no-cache',
16 | 'Cache-Control': 'no-cache',
17 | }
18 |
19 | json_data = {
20 | 'routine': {
21 | 'title': '2. Quads/Calves',
22 | 'folder_id': None,
23 | 'index': -1,
24 | 'exercises': [
25 | {
26 | 'exercise_template_id': '3303376C',
27 | 'notes': '',
28 | 'sets': [
29 | {
30 | 'index': 0,
31 | 'indicator': 'normal',
32 | 'distance_meters': 0,
33 | 'duration_seconds': 15,
34 | },
35 | ],
36 | 'rest_seconds': 0,
37 | },
38 | {
39 | 'exercise_template_id': '062AB91A',
40 | 'notes': '',
41 | 'sets': [
42 | {
43 | 'index': 0,
44 | 'indicator': 'normal',
45 | 'weight_kg': 86,
46 | 'reps': 8,
47 | },
48 | {
49 | 'index': 1,
50 | 'indicator': 'normal',
51 | 'weight_kg': 81,
52 | 'reps': 8,
53 | },
54 | {
55 | 'index': 2,
56 | 'indicator': 'normal',
57 | 'weight_kg': 76,
58 | 'reps': 8,
59 | },
60 | ],
61 | 'rest_seconds': 120,
62 | },
63 | {
64 | 'exercise_template_id': '75A4F6C4',
65 | 'notes': '',
66 | 'sets': [
67 | {
68 | 'index': 0,
69 | 'indicator': 'normal',
70 | 'weight_kg': 69,
71 | 'reps': 8,
72 | },
73 | {
74 | 'index': 1,
75 | 'indicator': 'normal',
76 | 'weight_kg': 69,
77 | 'reps': 8,
78 | },
79 | {
80 | 'index': 2,
81 | 'indicator': 'normal',
82 | 'weight_kg': 69,
83 | 'reps': 8,
84 | },
85 | ],
86 | 'rest_seconds': 120,
87 | },
88 | ],
89 | 'program_id': None,
90 | },
91 | }
92 |
93 | response = requests.post('https://api.hevyapp.com/routine', headers=headers, json=json_data)
94 | ```
95 |
96 | ### response
97 | ```
98 |
99 | ```
--------------------------------------------------------------------------------
/sample/2.workout-history.py:
--------------------------------------------------------------------------------
1 | from pprint import pprint
2 | import requests
3 | from requests_toolbelt.utils import dump
4 | import os
5 | import sys
6 | import json
7 |
8 |
9 | class Hevy:
10 | def __init__(self):
11 | self.endpoint = "https://api.hevyapp.com"
12 | self.hevy_username = os.getenv("hevy_username")
13 | self.hevy_password = os.environ.get("hevy_password")
14 | self.request_no = 0
15 |
16 | if self.hevy_username is None:
17 | sys.exit(1)
18 |
19 | if self.hevy_password is None:
20 | sys.exit(2)
21 |
22 | self.headers = {
23 | "Accept": "application/json, text/plain, */*",
24 | "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
25 | "Cache-Control": "no-cache",
26 | "Connection": "keep-alive",
27 | "Content-Type": "application/json",
28 | "DNT": "1",
29 | "Origin": "https://www.hevy.com",
30 | "Pragma": "no-cache",
31 | "Referer": "https://www.hevy.com/",
32 | "Sec-Fetch-Dest": "empty",
33 | "Sec-Fetch-Mode": "cors",
34 | "Sec-Fetch-Site": "cross-site",
35 | "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36",
36 | "sec-ch-ua": '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"',
37 | "sec-ch-ua-mobile": "?0",
38 | "sec-ch-ua-platform": '"Linux"',
39 | "x-api-key": "shelobs_hevy_web",
40 | }
41 |
42 | def WebRequest(self, method, query, data=None):
43 | self.request_no += 1
44 | print("==================" + str(self.request_no) + "===================")
45 |
46 | if method == "POST":
47 | self.response = requests.post(
48 | self.endpoint + query, json=data, headers=self.headers
49 | )
50 | else:
51 | self.response = requests.get(self.endpoint + query, headers=self.headers)
52 |
53 | data = dump.dump_all(self.response)
54 | print(data.decode("utf-8"))
55 |
56 | print(self.response.status_code)
57 | pprint(self.response.text)
58 |
59 | def Login(self):
60 | data = {}
61 | data["password"] = self.hevy_password
62 | data["emailOrUsername"] = self.hevy_username
63 |
64 | self.WebRequest("POST", "/login", data)
65 |
66 | self.headers["x-api-key"] = "klean_kanteen_insulated"
67 | self.headers["auth-token"] = self.response.json()["auth_token"]
68 |
69 | def GetUser(self):
70 | self.WebRequest("GET", "/account")
71 |
72 | def GetWorkouts(self):
73 | all_workouts = []
74 | workouts = []
75 | cache_file = "workouts.json"
76 |
77 | if os.path.isfile(cache_file):
78 | with open(cache_file) as f:
79 | return json.loads(f.read())
80 |
81 | self.WebRequest("GET", "/workouts_batch/0")
82 | workouts = self.response.json()
83 | all_workouts += workouts
84 |
85 | while len(workouts) == 20:
86 | self.WebRequest("GET", "/workouts_batch/" + str(workouts[19]["index"]))
87 | workouts = self.response.json()
88 | all_workouts += workouts
89 |
90 | with open(cache_file, "w") as file1:
91 | file1.write(json.dumps(all_workouts))
92 | file1.close()
93 |
94 | def GetWorkOutsCount(self):
95 | self.WebRequest("GET", "/workout_count")
96 |
97 |
98 | s = Hevy()
99 | s.Login()
100 | s.GetUser()
101 | s.GetWorkouts()
102 | s.GetWorkOutsCount()
103 |
--------------------------------------------------------------------------------
/sample/3.create-charts.py:
--------------------------------------------------------------------------------
1 | import matplotlib.pyplot as plt
2 | import pandas as pd
3 | import json
4 |
5 | path = "graphs/"
6 |
7 | plt.style.use(
8 | "https://github.com/dhaitz/matplotlib-stylesheets/raw/master/pitayasmoothie-dark.mplstyle"
9 | )
10 |
11 | stats = {
12 | "skip": {
13 | "date": {
14 | "total_volume": "(kilo * reps) + set",
15 | "total_reps": "add up all repos from each set",
16 | "max_weight": "max",
17 | "average_weight": "average",
18 | "median": "",
19 | }
20 | }
21 | }
22 |
23 | del stats["skip"]
24 |
25 | names = []
26 | workout_time = {}
27 | workout_volume = {}
28 |
29 | workouts = open("workouts.json").read()
30 | wos = json.loads(workouts)
31 |
32 | for X in wos:
33 | index = X["nth_workout"]
34 | name = X["name"]
35 | names.append(name.replace(" ", ""))
36 | workout_time[index] = round((X["end_time"] - X["start_time"]) / 60)
37 | workout_volume[index] = round(X["estimated_volume_kg"])
38 |
39 | for exercise in X["exercises"]:
40 | exercise_title = exercise["title"]
41 |
42 | if exercise_title not in stats.keys():
43 | stats[exercise_title] = {}
44 |
45 | volume = 0
46 | max = 0
47 | reps = 0
48 |
49 | for set in exercise["sets"]:
50 | if set["weight_kg"] is not None and set["reps"] is not None:
51 | volume += round(set["weight_kg"] * set["reps"])
52 | else:
53 | volume += 0
54 |
55 | reps += set["reps"] if set["reps"] is not None else 0
56 |
57 | if set["weight_kg"] is not None:
58 | max = set["weight_kg"] if set["weight_kg"] > max else max
59 |
60 | stats[exercise_title][index] = {}
61 | stats[exercise_title][index]["total_volume"] = round(volume)
62 | stats[exercise_title][index]["max_weight"] = max
63 | stats[exercise_title][index]["total_reps"] = reps
64 | stats[exercise_title][index]["average_weight"] = reps
65 |
66 |
67 | for exercise in stats.keys():
68 | if len(list(stats[exercise].keys())) < 10:
69 | continue
70 | if all(x["total_volume"] == 0 for x in stats[exercise].values()):
71 | continue
72 |
73 | pdate = list(stats[exercise].keys())
74 | pdate = pdate[len(pdate) - 20 :] if len(pdate) > 19 else pdate
75 | pvolume = [x["total_volume"] for x in stats[exercise].values()]
76 | pvolume = pvolume[len(pvolume) - 20 :] if len(pvolume) > 19 else pvolume
77 |
78 | data = {"date": pdate, "volume": pvolume}
79 |
80 | df = pd.DataFrame(data)
81 | plt.figure()
82 | plt.plot(df["date"], df["volume"], color="red", marker="o")
83 | plt.title(exercise + " volume", fontsize=14)
84 | plt.xlabel("Date", fontsize=12)
85 | plt.ylabel("Kilos", fontsize=12)
86 | plt.xticks(rotation=45, ha="right")
87 | plt.grid(True)
88 | # plt.show()
89 | plt.savefig(path + exercise + "-volume.png", bbox_inches="tight")
90 | plt.close()
91 |
92 |
93 | for exercise in stats.keys():
94 | if len(list(stats[exercise].keys())) < 10:
95 | continue
96 | if all(x["total_reps"] == 0 for x in stats[exercise].values()):
97 | continue
98 |
99 | pdate = list(stats[exercise].keys())
100 | pdate = pdate[len(pdate) - 20 :] if len(pdate) > 19 else pdate
101 | preps = [x["total_reps"] for x in stats[exercise].values()]
102 | preps = preps[len(preps) - 20 :] if len(preps) > 19 else preps
103 |
104 | data = {"date": pdate, "reps": preps}
105 |
106 | df = pd.DataFrame(data)
107 | plt.figure()
108 | plt.plot(df["date"], df["reps"], color="red", marker="o")
109 | plt.title(exercise + " reps", fontsize=14)
110 | plt.xlabel("Date", fontsize=12)
111 | plt.ylabel("Reps", fontsize=12)
112 | plt.xticks(rotation=45, ha="right")
113 | plt.grid(True)
114 | # plt.show()
115 | plt.savefig(path + exercise + "-reps.png", bbox_inches="tight")
116 | plt.close()
117 |
118 |
119 | for exercise in stats.keys():
120 | if len(list(stats[exercise].keys())) < 10:
121 | continue
122 | if all(x["max_weight"] == 0 for x in stats[exercise].values()):
123 | continue
124 |
125 | pdate = list(stats[exercise].keys())
126 | pdate = pdate[len(pdate) - 20 :] if len(pdate) > 19 else pdate
127 | pweight = [x["max_weight"] for x in stats[exercise].values()]
128 | pweight = pweight[len(pweight) - 20 :] if len(pweight) > 19 else pweight
129 |
130 | data = {"date": pdate, "weight": pweight}
131 |
132 | df = pd.DataFrame(data)
133 | plt.figure()
134 | plt.plot(df["date"], df["weight"], color="red", marker="o")
135 | plt.title(exercise + " max weight", fontsize=14)
136 | plt.xlabel("Date", fontsize=12)
137 | plt.ylabel("Kilos", fontsize=12)
138 | plt.xticks(rotation=45, ha="right")
139 | plt.grid(True)
140 | # plt.show()
141 | plt.savefig(path + exercise + "-weight.png", bbox_inches="tight")
142 | plt.close()
143 |
--------------------------------------------------------------------------------
/sample/5.chart.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | My Hevy Stats
5 |
6 |
7 |
8 |
9 |
10 |
11 |
147 |
148 |
--------------------------------------------------------------------------------
/api/update-routine.md:
--------------------------------------------------------------------------------
1 | ## Update routine
2 |
3 | ### request
4 |
5 | ```
6 | import requests
7 |
8 | headers = {
9 | 'accept': 'application/json, text/plain, */*',
10 | 'x-api-key': 'klean_kanteen_insulated',
11 | 'auth-token': '.......-.....-....-....-.............',
12 | 'Content-Type': 'application/json',
13 | 'Host': 'api.hevyapp.com',
14 | 'User-Agent': 'okhttp/4.9.3',
15 | 'Pragma': 'no-cache',
16 | 'Cache-Control': 'no-cache',
17 | }
18 |
19 | json_data = {
20 | 'routine': {
21 | 'title': '1. Shoulders/Lats',
22 | 'folder_id': None,
23 | 'index': -1,
24 | 'exercises': [
25 | {
26 | 'exercise_template_id': '3303376C',
27 | 'notes': '',
28 | 'sets': [
29 | {
30 | 'index': 0,
31 | 'indicator': 'normal',
32 | 'distance_meters': 0,
33 | 'duration_seconds': 15,
34 | },
35 | ],
36 | 'rest_seconds': 0,
37 | },
38 | {
39 | 'exercise_template_id': '67280085',
40 | 'notes': '',
41 | 'sets': [
42 | {
43 | 'index': 0,
44 | 'indicator': 'normal',
45 | 'weight_kg': 35,
46 | 'reps': 8,
47 | },
48 | {
49 | 'index': 1,
50 | 'indicator': 'normal',
51 | 'weight_kg': 35,
52 | 'reps': 8,
53 | },
54 | {
55 | 'index': 2,
56 | 'indicator': 'normal',
57 | 'weight_kg': 35,
58 | 'reps': 8,
59 | },
60 | ],
61 | 'rest_seconds': 0,
62 | },
63 | {
64 | 'exercise_template_id': 'F1E57334',
65 | 'notes': '',
66 | 'sets': [
67 | {
68 | 'index': 0,
69 | 'indicator': 'normal',
70 | 'weight_kg': 40,
71 | 'reps': 8,
72 | },
73 | {
74 | 'index': 1,
75 | 'indicator': 'normal',
76 | 'weight_kg': 40,
77 | 'reps': 8,
78 | },
79 | {
80 | 'index': 2,
81 | 'indicator': 'normal',
82 | 'weight_kg': 40,
83 | 'reps': 8,
84 | },
85 | ],
86 | 'rest_seconds': 0,
87 | },
88 | {
89 | 'exercise_template_id': '3601968B',
90 | 'notes': '',
91 | 'sets': [
92 | {
93 | 'index': 0,
94 | 'indicator': 'normal',
95 | 'weight_kg': 50,
96 | 'reps': 8,
97 | },
98 | {
99 | 'index': 1,
100 | 'indicator': 'normal',
101 | 'weight_kg': 50,
102 | 'reps': 8,
103 | },
104 | {
105 | 'index': 2,
106 | 'indicator': 'normal',
107 | 'weight_kg': 50,
108 | 'reps': 8,
109 | },
110 | ],
111 | 'rest_seconds': 0,
112 | },
113 | {
114 | 'exercise_template_id': 'F1D60854',
115 | 'notes': '',
116 | 'sets': [
117 | {
118 | 'index': 0,
119 | 'indicator': 'normal',
120 | 'weight_kg': 91,
121 | 'reps': 8,
122 | },
123 | {
124 | 'index': 1,
125 | 'indicator': 'normal',
126 | 'weight_kg': 91,
127 | 'reps': 8,
128 | },
129 | {
130 | 'index': 2,
131 | 'indicator': 'normal',
132 | 'weight_kg': 91,
133 | 'reps': 8,
134 | },
135 | ],
136 | 'rest_seconds': 0,
137 | },
138 | {
139 | 'exercise_template_id': '36E8F14E',
140 | 'notes': '',
141 | 'sets': [
142 | {
143 | 'index': 0,
144 | 'indicator': 'normal',
145 | 'weight_kg': 50,
146 | 'reps': 8,
147 | },
148 | {
149 | 'index': 1,
150 | 'indicator': 'normal',
151 | 'weight_kg': 50,
152 | 'reps': 8,
153 | },
154 | {
155 | 'index': 2,
156 | 'indicator': 'normal',
157 | 'weight_kg': 50,
158 | 'reps': 8,
159 | },
160 | ],
161 | 'rest_seconds': 0,
162 | },
163 | {
164 | 'exercise_template_id': '6A6C31A5',
165 | 'notes': '',
166 | 'sets': [
167 | {
168 | 'index': 0,
169 | 'indicator': 'normal',
170 | 'weight_kg': 68,
171 | 'reps': 8,
172 | },
173 | {
174 | 'index': 1,
175 | 'indicator': 'normal',
176 | 'weight_kg': 68,
177 | 'reps': 8,
178 | },
179 | {
180 | 'index': 2,
181 | 'indicator': 'normal',
182 | 'weight_kg': 68,
183 | 'reps': 8,
184 | },
185 | ],
186 | 'rest_seconds': 0,
187 | },
188 | {
189 | 'exercise_template_id': '08A2974E',
190 | 'notes': '',
191 | 'sets': [
192 | {
193 | 'index': 0,
194 | 'indicator': 'normal',
195 | 'weight_kg': 25,
196 | 'reps': 8,
197 | },
198 | {
199 | 'index': 1,
200 | 'indicator': 'normal',
201 | 'weight_kg': 25,
202 | 'reps': 8,
203 | },
204 | {
205 | 'index': 2,
206 | 'indicator': 'normal',
207 | 'weight_kg': 25,
208 | 'reps': 8,
209 | },
210 | ],
211 | 'rest_seconds': 0,
212 | },
213 | {
214 | 'exercise_template_id': 'BC10A922',
215 | 'notes': '',
216 | 'sets': [
217 | {
218 | 'index': 0,
219 | 'indicator': 'normal',
220 | 'reps': 8,
221 | },
222 | {
223 | 'index': 1,
224 | 'indicator': 'normal',
225 | 'reps': 8,
226 | },
227 | {
228 | 'index': 2,
229 | 'indicator': 'normal',
230 | 'reps': 8,
231 | },
232 | ],
233 | 'rest_seconds': 0,
234 | },
235 | {
236 | 'exercise_template_id': 'F8356514',
237 | 'notes': '',
238 | 'sets': [
239 | {
240 | 'index': 0,
241 | 'indicator': 'normal',
242 | 'reps': 8,
243 | },
244 | {
245 | 'index': 1,
246 | 'indicator': 'normal',
247 | 'reps': 8,
248 | },
249 | {
250 | 'index': 2,
251 | 'indicator': 'normal',
252 | 'reps': 8,
253 | },
254 | ],
255 | 'rest_seconds': 0,
256 | },
257 | {
258 | 'exercise_template_id': '09C9F635',
259 | 'notes': '',
260 | 'sets': [
261 | {
262 | 'index': 0,
263 | 'indicator': 'normal',
264 | 'reps': 8,
265 | },
266 | {
267 | 'index': 1,
268 | 'indicator': 'normal',
269 | 'reps': 8,
270 | },
271 | {
272 | 'index': 2,
273 | 'indicator': 'normal',
274 | 'reps': 8,
275 | },
276 | ],
277 | 'rest_seconds': 0,
278 | },
279 | ],
280 | 'program_id': None,
281 | },
282 | }
283 |
284 | response = requests.put('https://api.hevyapp.com/routine/89db8e68-e28b-4ce6-b8fe-aef4b236db21', headers=headers, json=json_data)
285 | ```
286 |
287 | ### response
288 | ```
289 |
290 | ```
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/api/routines_sync_batch.md:
--------------------------------------------------------------------------------
1 | ## Feed workouts paged
2 |
3 | ### request
4 |
5 | ```
6 | import requests
7 |
8 | headers = {
9 | 'accept': 'application/json, text/plain, */*',
10 | 'x-api-key': 'klean_kanteen_insulated',
11 | 'auth-token': '.......-.....-....-....-.............',
12 | 'Host': 'api.hevyapp.com',
13 | 'User-Agent': 'okhttp/4.9.3',
14 | 'Pragma': 'no-cache',
15 | 'Cache-Control': 'no-cache',
16 | }
17 |
18 | json_data = {}
19 |
20 | response = requests.post('https://api.hevyapp.com/routines_sync_batch', headers=headers, json=json_data)
21 |
22 | ```
23 |
24 | ### response
25 | ```
26 | {
27 | "updated": [{
28 | "id": "89db8e68-e28b-4ce6-b8fe-aef4b236db21",
29 | "title": "Shoulders/Lats",
30 | "username": "ssssssssssss",
31 | "profile_pic": null,
32 | "exercises": [{
33 | "id": "de57c53e-387b-4120-9c5d-13b3e4b5f97a",
34 | "username": "hevy",
35 | "exercise_template_id": "3303376C",
36 | "warmup_set_count": 0,
37 | "normal_set_count": 0,
38 | "title": "Elliptical Trainer",
39 | "es_title": "Entrenador Elíptico",
40 | "de_title": "Crosstrainer",
41 | "fr_title": "Vélo Elliptique",
42 | "it_title": "Ellittica",
43 | "pt_title": "Elíptica ",
44 | "ko_title": null,
45 | "ja_title": null,
46 | "tr_title": "Eliptik Bisiklet",
47 | "ru_title": null,
48 | "zh_cn_title": null,
49 | "zh_tw_title": null,
50 | "muscle_group": "cardio",
51 | "other_muscles": [],
52 | "exercise_type": "distance_duration",
53 | "equipment_category": "machine",
54 | "sets": [{
55 | "id": 411889220,
56 | "index": 0,
57 | "indicator": "normal",
58 | "weight_kg": null,
59 | "reps": null,
60 | "distance_meters": null,
61 | "duration_seconds": 15
62 | }],
63 | "notes": "",
64 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/21921201-Elliptical-Machine-Walk_Cardio.mp4",
65 | "custom_exercise_image_url": null,
66 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/21921201-Elliptical-Machine-Walk_Cardio_thumbnail@3x.jpg",
67 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/21921201-Elliptical-Machine-Walk_Cardio_thumbnail@3x.jpg",
68 | "media_type": "video",
69 | "superset_id": null,
70 | "rest_seconds": 0
71 | }, {
72 | "id": "1d5097f0-0b19-48e6-9938-a44eb7827c12",
73 | "username": "hevy",
74 | "exercise_template_id": "67280085",
75 | "warmup_set_count": 0,
76 | "normal_set_count": 0,
77 | "title": "Pullover (Dumbbell)",
78 | "es_title": "Pull Over",
79 | "de_title": "Überzüge",
80 | "fr_title": "Pull-Over",
81 | "it_title": "Pullover (Manubrio)",
82 | "pt_title": "Pullover (Haltere)",
83 | "ko_title": null,
84 | "ja_title": null,
85 | "tr_title": "Pullover (Dambıl)",
86 | "ru_title": null,
87 | "zh_cn_title": null,
88 | "zh_tw_title": null,
89 | "muscle_group": "chest",
90 | "other_muscles": [],
91 | "exercise_type": "weight_reps",
92 | "equipment_category": "dumbbell",
93 | "sets": [{
94 | "id": 411889221,
95 | "index": 0,
96 | "indicator": "normal",
97 | "weight_kg": 35,
98 | "reps": 8,
99 | "distance_meters": null,
100 | "duration_seconds": null
101 | }, {
102 | "id": 411889222,
103 | "index": 1,
104 | "indicator": "normal",
105 | "weight_kg": 35,
106 | "reps": 8,
107 | "distance_meters": null,
108 | "duration_seconds": null
109 | }, {
110 | "id": 411889223,
111 | "index": 2,
112 | "indicator": "normal",
113 | "weight_kg": 35,
114 | "reps": 8,
115 | "distance_meters": null,
116 | "duration_seconds": null
117 | }],
118 | "notes": "",
119 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/03751201-Dumbbell-Pullover_Chest.mp4",
120 | "custom_exercise_image_url": null,
121 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/03751201-Dumbbell-Pullover_Chest_thumbnail@3x.jpg",
122 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/03751201-Dumbbell-Pullover_Chest_thumbnail@3x.jpg",
123 | "media_type": "video",
124 | "superset_id": null,
125 | "rest_seconds": 0
126 | }, {
127 | "id": "2cf306ae-681f-4fa9-93e5-25c3df3eb495",
128 | "username": "hevy",
129 | "exercise_template_id": "F1E57334",
130 | "warmup_set_count": 0,
131 | "normal_set_count": 0,
132 | "title": "Dumbbell Row",
133 | "es_title": "Remo con Mancuerna",
134 | "de_title": "Kurzhantel Rudern",
135 | "fr_title": "Rowing Haltère",
136 | "it_title": "Rematore Manubrio",
137 | "pt_title": "Remada (Haltere)",
138 | "ko_title": null,
139 | "ja_title": null,
140 | "tr_title": "Dumbbell Row",
141 | "ru_title": null,
142 | "zh_cn_title": null,
143 | "zh_tw_title": null,
144 | "muscle_group": "upper_back",
145 | "other_muscles": [],
146 | "exercise_type": "weight_reps",
147 | "equipment_category": "dumbbell",
148 | "sets": [{
149 | "id": 411889224,
150 | "index": 0,
151 | "indicator": "normal",
152 | "weight_kg": 40,
153 | "reps": 8,
154 | "distance_meters": null,
155 | "duration_seconds": null
156 | }, {
157 | "id": 411889225,
158 | "index": 1,
159 | "indicator": "normal",
160 | "weight_kg": 40,
161 | "reps": 8,
162 | "distance_meters": null,
163 | "duration_seconds": null
164 | }, {
165 | "id": 411889226,
166 | "index": 2,
167 | "indicator": "normal",
168 | "weight_kg": 40,
169 | "reps": 8,
170 | "distance_meters": null,
171 | "duration_seconds": null
172 | }],
173 | "notes": "",
174 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/02921201-Dumbbell-Bent-over-Row_Back.mp4",
175 | "custom_exercise_image_url": null,
176 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/02921201-Dumbbell-Bent-over-Row_Back_thumbnail@3x.jpg",
177 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/02921201-Dumbbell-Bent-over-Row_Back_thumbnail@3x.jpg",
178 | "media_type": "video",
179 | "superset_id": null,
180 | "rest_seconds": 0
181 | }, {
182 | "id": "9fdad100-a678-47c9-9534-7e4cf26634e4",
183 | "username": "hevy",
184 | "exercise_template_id": "3601968B",
185 | "warmup_set_count": 0,
186 | "normal_set_count": 0,
187 | "title": "Bench Press (Dumbbell)",
188 | "es_title": "Press de Banca (Mancuerna)",
189 | "de_title": "Bankdrücken (Kurzhantel)",
190 | "fr_title": "Développé Couché (Haltère)",
191 | "it_title": "Panca Piana (Manubrio)",
192 | "pt_title": "Supino (Haltere)",
193 | "ko_title": null,
194 | "ja_title": null,
195 | "tr_title": "Bench Press (Dambıl)",
196 | "ru_title": null,
197 | "zh_cn_title": null,
198 | "zh_tw_title": null,
199 | "muscle_group": "chest",
200 | "other_muscles": ["triceps", "shoulders"],
201 | "exercise_type": "weight_reps",
202 | "equipment_category": "dumbbell",
203 | "sets": [{
204 | "id": 411889227,
205 | "index": 0,
206 | "indicator": "normal",
207 | "weight_kg": 50,
208 | "reps": 8,
209 | "distance_meters": null,
210 | "duration_seconds": null
211 | }, {
212 | "id": 411889228,
213 | "index": 1,
214 | "indicator": "normal",
215 | "weight_kg": 50,
216 | "reps": 8,
217 | "distance_meters": null,
218 | "duration_seconds": null
219 | }, {
220 | "id": 411889229,
221 | "index": 2,
222 | "indicator": "normal",
223 | "weight_kg": 50,
224 | "reps": 8,
225 | "distance_meters": null,
226 | "duration_seconds": null
227 | }],
228 | "notes": "",
229 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/02891201-Dumbbell-Bench-Press_Chest.mp4",
230 | "custom_exercise_image_url": null,
231 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/02891201-Dumbbell-Bench-Press_Chest_thumbnail@3x.jpg",
232 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/02891201-Dumbbell-Bench-Press_Chest_thumbnail@3x.jpg",
233 | "media_type": "video",
234 | "superset_id": null,
235 | "rest_seconds": 0
236 | }, {
237 | "id": "5dd12ecb-7226-4cf8-981f-7540643049e6",
238 | "username": "hevy",
239 | "exercise_template_id": "F1D60854",
240 | "warmup_set_count": 0,
241 | "normal_set_count": 0,
242 | "title": "Seated Cable Row",
243 | "es_title": "Remo Sentado con Cable",
244 | "de_title": "Rudern am Kabel sitzend",
245 | "fr_title": "Rowing Poulie Assis",
246 | "it_title": "Rematore al Cavo da Seduto",
247 | "pt_title": "Remada (Corda) Sentado",
248 | "ko_title": null,
249 | "ja_title": null,
250 | "tr_title": "Oturarak Cable Row",
251 | "ru_title": null,
252 | "zh_cn_title": null,
253 | "zh_tw_title": null,
254 | "muscle_group": "upper_back",
255 | "other_muscles": [],
256 | "exercise_type": "weight_reps",
257 | "equipment_category": "machine",
258 | "sets": [{
259 | "id": 411889230,
260 | "index": 0,
261 | "indicator": "normal",
262 | "weight_kg": 91,
263 | "reps": 8,
264 | "distance_meters": null,
265 | "duration_seconds": null
266 | }, {
267 | "id": 411889231,
268 | "index": 1,
269 | "indicator": "normal",
270 | "weight_kg": 91,
271 | "reps": 8,
272 | "distance_meters": null,
273 | "duration_seconds": null
274 | }, {
275 | "id": 411889232,
276 | "index": 2,
277 | "indicator": "normal",
278 | "weight_kg": 91,
279 | "reps": 8,
280 | "distance_meters": null,
281 | "duration_seconds": null
282 | }],
283 | "notes": "",
284 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/01801201-Cable-Low-Seated-Row_Back.mp4",
285 | "custom_exercise_image_url": null,
286 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/01801201-Cable-Low-Seated-Row_Back_thumbnail@3x.jpg",
287 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/01801201-Cable-Low-Seated-Row_Back_thumbnail@3x.jpg",
288 | "media_type": "video",
289 | "superset_id": null,
290 | "rest_seconds": 0
291 | }, {
292 | "id": "96550a69-10a7-41e2-880e-81b947057532",
293 | "username": "hevy",
294 | "exercise_template_id": "36E8F14E",
295 | "warmup_set_count": 0,
296 | "normal_set_count": 0,
297 | "title": "Hammer Curl (Cable)",
298 | "es_title": "Curl Martillo (Cable)",
299 | "de_title": "Hammer Curl (Kabel)",
300 | "fr_title": "Curl Marteau (Poulie)",
301 | "it_title": "Bicipiti Martello (Cavo)",
302 | "pt_title": "Curl Em Martelo (Cabo)",
303 | "ko_title": null,
304 | "ja_title": null,
305 | "tr_title": "Hammer Curl (Cable)",
306 | "ru_title": null,
307 | "zh_cn_title": null,
308 | "zh_tw_title": null,
309 | "muscle_group": "biceps",
310 | "other_muscles": [],
311 | "exercise_type": "weight_reps",
312 | "equipment_category": "machine",
313 | "sets": [{
314 | "id": 411889233,
315 | "index": 0,
316 | "indicator": "normal",
317 | "weight_kg": 50,
318 | "reps": 8,
319 | "distance_meters": null,
320 | "duration_seconds": null
321 | }, {
322 | "id": 411889234,
323 | "index": 1,
324 | "indicator": "normal",
325 | "weight_kg": 50,
326 | "reps": 8,
327 | "distance_meters": null,
328 | "duration_seconds": null
329 | }, {
330 | "id": 411889235,
331 | "index": 2,
332 | "indicator": "normal",
333 | "weight_kg": 50,
334 | "reps": 8,
335 | "distance_meters": null,
336 | "duration_seconds": null
337 | }],
338 | "notes": "",
339 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/01661201-Cable-Hammer-Curl_Forearm.mp4",
340 | "custom_exercise_image_url": null,
341 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/01661201-Cable-Hammer-Curl_Forearm_thumbnail@3x.jpg",
342 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/01661201-Cable-Hammer-Curl_Forearm_thumbnail@3x.jpg",
343 | "media_type": "video",
344 | "superset_id": null,
345 | "rest_seconds": 0
346 | }, {
347 | "id": "0afaa157-f653-4020-a979-d37344e335a9",
348 | "username": "hevy",
349 | "exercise_template_id": "6A6C31A5",
350 | "warmup_set_count": 0,
351 | "normal_set_count": 0,
352 | "title": "Lat Pulldown (Cable)",
353 | "es_title": "Jalón al Pecho (Cable)",
354 | "de_title": "Latzug (Kabel)",
355 | "fr_title": "Tirage Poitrine (Poulie)",
356 | "it_title": "Lat Pulldown (Cavo)",
357 | "pt_title": "Puxadas (Corda)",
358 | "ko_title": null,
359 | "ja_title": null,
360 | "tr_title": "Lat Pulldown (Cable)",
361 | "ru_title": null,
362 | "zh_cn_title": null,
363 | "zh_tw_title": null,
364 | "muscle_group": "lats",
365 | "other_muscles": [],
366 | "exercise_type": "weight_reps",
367 | "equipment_category": "machine",
368 | "sets": [{
369 | "id": 411889236,
370 | "index": 0,
371 | "indicator": "normal",
372 | "weight_kg": 68,
373 | "reps": 8,
374 | "distance_meters": null,
375 | "duration_seconds": null
376 | }, {
377 | "id": 411889237,
378 | "index": 1,
379 | "indicator": "normal",
380 | "weight_kg": 68,
381 | "reps": 8,
382 | "distance_meters": null,
383 | "duration_seconds": null
384 | }, {
385 | "id": 411889238,
386 | "index": 2,
387 | "indicator": "normal",
388 | "weight_kg": 68,
389 | "reps": 8,
390 | "distance_meters": null,
391 | "duration_seconds": null
392 | }],
393 | "notes": "",
394 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/01501201-Cable-Bar-Lateral-Pulldown_Back.mp4",
395 | "custom_exercise_image_url": null,
396 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/01501201-Cable-Bar-Lateral-Pulldown_Back_thumbnail@3x.jpg",
397 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/01501201-Cable-Bar-Lateral-Pulldown_Back_thumbnail@3x.jpg",
398 | "media_type": "video",
399 | "superset_id": null,
400 | "rest_seconds": 0
401 | }, {
402 | "id": "f67c524c-49ac-4dca-93aa-f7605fd6abca",
403 | "username": "hevy",
404 | "exercise_template_id": "08A2974E",
405 | "warmup_set_count": 0,
406 | "normal_set_count": 0,
407 | "title": "T Bar Row",
408 | "es_title": "Remo en Punta",
409 | "de_title": "T-Bar Rudern",
410 | "fr_title": "Rowing Barre T",
411 | "it_title": "Rematore T Bar",
412 | "pt_title": "Remada T",
413 | "ko_title": null,
414 | "ja_title": null,
415 | "tr_title": "T Bar Row",
416 | "ru_title": null,
417 | "zh_cn_title": null,
418 | "zh_tw_title": null,
419 | "muscle_group": "upper_back",
420 | "other_muscles": [],
421 | "exercise_type": "weight_reps",
422 | "equipment_category": "barbell",
423 | "sets": [{
424 | "id": 411889239,
425 | "index": 0,
426 | "indicator": "normal",
427 | "weight_kg": 25,
428 | "reps": 8,
429 | "distance_meters": null,
430 | "duration_seconds": null
431 | }, {
432 | "id": 411889240,
433 | "index": 1,
434 | "indicator": "normal",
435 | "weight_kg": 25,
436 | "reps": 8,
437 | "distance_meters": null,
438 | "duration_seconds": null
439 | }, {
440 | "id": 411889241,
441 | "index": 2,
442 | "indicator": "normal",
443 | "weight_kg": 25,
444 | "reps": 8,
445 | "distance_meters": null,
446 | "duration_seconds": null
447 | }],
448 | "notes": "",
449 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/06061201-Lever-T-bar-Row-(plate-loaded)_Back.mp4",
450 | "custom_exercise_image_url": null,
451 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/06061201-Lever-T-bar-Row-(plate-loaded)_Back_thumbnail@3x.jpg",
452 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/06061201-Lever-T-bar-Row-(plate-loaded)_Back_thumbnail@3x.jpg",
453 | "media_type": "video",
454 | "superset_id": null,
455 | "rest_seconds": 0
456 | }, {
457 | "id": "9ed1ae52-0b90-4389-8d7b-43341c6016c0",
458 | "username": "hevy",
459 | "exercise_template_id": "BC10A922",
460 | "warmup_set_count": 0,
461 | "normal_set_count": 0,
462 | "title": "Decline Crunch",
463 | "es_title": "Abdominal Corto en Banco Inclinado",
464 | "de_title": "Negativer Crunch",
465 | "fr_title": "Crunch Décliné",
466 | "it_title": "Crunch Declinato",
467 | "pt_title": "Abdominal Declinado",
468 | "ko_title": null,
469 | "ja_title": null,
470 | "tr_title": "Eğik Sehpada Yarım Mekik",
471 | "ru_title": null,
472 | "zh_cn_title": null,
473 | "zh_tw_title": null,
474 | "muscle_group": "abdominals",
475 | "other_muscles": [],
476 | "exercise_type": "reps_only",
477 | "equipment_category": "none",
478 | "sets": [{
479 | "id": 411889242,
480 | "index": 0,
481 | "indicator": "normal",
482 | "weight_kg": null,
483 | "reps": 8,
484 | "distance_meters": null,
485 | "duration_seconds": null
486 | }, {
487 | "id": 411889243,
488 | "index": 1,
489 | "indicator": "normal",
490 | "weight_kg": null,
491 | "reps": 8,
492 | "distance_meters": null,
493 | "duration_seconds": null
494 | }, {
495 | "id": 411889244,
496 | "index": 2,
497 | "indicator": "normal",
498 | "weight_kg": null,
499 | "reps": 8,
500 | "distance_meters": null,
501 | "duration_seconds": null
502 | }],
503 | "notes": "",
504 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/02771201-Decline-Crunch_Waist.mp4",
505 | "custom_exercise_image_url": null,
506 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/02771201-Decline-Crunch_Waist_thumbnail@3x.jpg",
507 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/02771201-Decline-Crunch_Waist_thumbnail@3x.jpg",
508 | "media_type": "video",
509 | "superset_id": null,
510 | "rest_seconds": 0
511 | }, {
512 | "id": "84481e54-25e0-4709-aecd-42e13d699048",
513 | "username": "hevy",
514 | "exercise_template_id": "F8356514",
515 | "warmup_set_count": 0,
516 | "normal_set_count": 0,
517 | "title": "Hanging Leg Raise",
518 | "es_title": "Levantamiento de Piernas en Barra",
519 | "de_title": "Beinheben hängend",
520 | "fr_title": "Relevé de Jambes Suspendu",
521 | "it_title": "Leg Raise Appeso",
522 | "pt_title": "Elevação De Pernas Na Barra Fixa",
523 | "ko_title": null,
524 | "ja_title": null,
525 | "tr_title": "Hanging Leg Raise",
526 | "ru_title": null,
527 | "zh_cn_title": null,
528 | "zh_tw_title": null,
529 | "muscle_group": "abdominals",
530 | "other_muscles": [],
531 | "exercise_type": "reps_only",
532 | "equipment_category": "none",
533 | "sets": [{
534 | "id": 411889245,
535 | "index": 0,
536 | "indicator": "normal",
537 | "weight_kg": null,
538 | "reps": 8,
539 | "distance_meters": null,
540 | "duration_seconds": null
541 | }, {
542 | "id": 411889246,
543 | "index": 1,
544 | "indicator": "normal",
545 | "weight_kg": null,
546 | "reps": 8,
547 | "distance_meters": null,
548 | "duration_seconds": null
549 | }, {
550 | "id": 411889247,
551 | "index": 2,
552 | "indicator": "normal",
553 | "weight_kg": null,
554 | "reps": 8,
555 | "distance_meters": null,
556 | "duration_seconds": null
557 | }],
558 | "notes": "",
559 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/17641201-Hanging-Leg-Hip-Raise_Waist.mp4",
560 | "custom_exercise_image_url": null,
561 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/17641201-Hanging-Leg-Hip-Raise_Waist_thumbnail@3x.jpg",
562 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/17641201-Hanging-Leg-Hip-Raise_Waist_thumbnail@3x.jpg",
563 | "media_type": "video",
564 | "superset_id": null,
565 | "rest_seconds": 0
566 | }, {
567 | "id": "de1632e3-cfa0-4642-86a4-5bd502f3ef6f",
568 | "username": "hevy",
569 | "exercise_template_id": "09C9F635",
570 | "warmup_set_count": 0,
571 | "normal_set_count": 0,
572 | "title": "Lying Leg Raise",
573 | "es_title": "Levantamiento de Piernas Tumbado",
574 | "de_title": "Liegendes Beinheben",
575 | "fr_title": "Relevé de Jambes Allongé",
576 | "it_title": "Leg Raise Sdraiato",
577 | "pt_title": "Elevação De Pernas (Deitado)",
578 | "ko_title": null,
579 | "ja_title": null,
580 | "tr_title": "Çakı Hareketi",
581 | "ru_title": null,
582 | "zh_cn_title": null,
583 | "zh_tw_title": null,
584 | "muscle_group": "abdominals",
585 | "other_muscles": [],
586 | "exercise_type": "reps_only",
587 | "equipment_category": "none",
588 | "sets": [{
589 | "id": 411889248,
590 | "index": 0,
591 | "indicator": "normal",
592 | "weight_kg": null,
593 | "reps": 8,
594 | "distance_meters": null,
595 | "duration_seconds": null
596 | }, {
597 | "id": 411889249,
598 | "index": 1,
599 | "indicator": "normal",
600 | "weight_kg": null,
601 | "reps": 8,
602 | "distance_meters": null,
603 | "duration_seconds": null
604 | }, {
605 | "id": 411889250,
606 | "index": 2,
607 | "indicator": "normal",
608 | "weight_kg": null,
609 | "reps": 8,
610 | "distance_meters": null,
611 | "duration_seconds": null
612 | }],
613 | "notes": "",
614 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/11631201-Lying-Leg-Raise_Waist.mp4",
615 | "custom_exercise_image_url": null,
616 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/11631201-Lying-Leg-Raise_Waist_thumbnail@3x.jpg",
617 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/11631201-Lying-Leg-Raise_Waist_thumbnail@3x.jpg",
618 | "media_type": "video",
619 | "superset_id": null,
620 | "rest_seconds": 0
621 | }],
622 | "updated_at": "2023-03-05T20:34:31.432Z",
623 | "parent_routine_id": null,
624 | "index": null,
625 | "folder_id": null,
626 | "short_id": "O6hLrOcO8cb",
627 | "program_id": null
628 | }],
629 | "deleted": [],
630 | "isMore": false
631 | }
632 | ```
--------------------------------------------------------------------------------
/api/workouts_batch.md:
--------------------------------------------------------------------------------
1 | ## Feed workouts paged
2 |
3 | ### request
4 |
5 | ```
6 | import requests
7 |
8 | all_workouts = []
9 | workouts = []
10 |
11 | headers = {
12 | 'accept': 'application/json, text/plain, */*',
13 | 'x-api-key': 'klean_kanteen_insulated',
14 | 'auth-token': '.......-.....-....-....-.............',
15 | 'Host': 'api.hevyapp.com',
16 | 'User-Agent': 'okhttp/4.9.3',
17 | 'Pragma': 'no-cache',
18 | 'Cache-Control': 'no-cache',
19 | }
20 |
21 | response = requests.get('https://api.hevyapp.com/workouts_batch/0', headers=headers)
22 | workouts = response.json()
23 | all_workouts += workouts
24 |
25 | while len(workouts) == 20:
26 | response = requests.get('https://api.hevyapp.com/workouts_batch/' + str(workouts[19].index), headers=headers)
27 | workouts = response.json()
28 | all_workouts += workouts
29 |
30 | pprint(all_workouts)
31 |
32 | ```
33 | ### response
34 |
35 | ```
36 | [
37 | ...,
38 | ...,
39 | {
40 | "id": "70ba8b48-1525-4850-9902-219ba53bebe7",
41 | "short_id": "NVGtJMdNeQJ",
42 | "index": 12944844,
43 | "name": "Arm day dumbbell",
44 | "description": "Arms",
45 | "start_time": 1653042520,
46 | "end_time": 1653048880,
47 | "created_at": "2023-03-06T21:38:13.569Z",
48 | "updated_at": "2023-03-06T21:38:13.569Z",
49 | "apple_watch": false,
50 | "user_id": "93620a45-5bef-4a70-baab-5c1058a88046",
51 | "username": "bitwiseshift",
52 | "profile_image": "https://pump-app.s3.eu-west-2.amazonaws.com/profile-images/bitwiseshift-e4a12928-f0f3-4a87-adc5-99c1daae5951.jpg",
53 | "verified": false,
54 | "nth_workout": 20,
55 | "like_count": 0,
56 | "is_liked_by_user": false,
57 | "like_images": [],
58 | "comments": [],
59 | "comment_count": 0,
60 | "media": [],
61 | "image_urls": [],
62 | "exercises": [{
63 | "id": "6b8b594e-60c7-4ae6-8e1b-03a2eaf748ef",
64 | "title": "Cycling",
65 | "es_title": "Bicicleta",
66 | "de_title": "Radfahren",
67 | "fr_title": "Cyclisme",
68 | "it_title": "Bicicletta",
69 | "pt_title": "Ciclismo",
70 | "ko_title": null,
71 | "ja_title": null,
72 | "tr_title": "Bisiklet",
73 | "ru_title": "Велоспорт",
74 | "zh_cn_title": "踩单车",
75 | "zh_tw_title": "踩單車",
76 | "superset_id": null,
77 | "rest_seconds": null,
78 | "notes": "",
79 | "exercise_template_id": "D8F7F851",
80 | "url": null,
81 | "exercise_type": "distance_duration",
82 | "equipment_category": "machine",
83 | "media_type": null,
84 | "custom_exercise_image_url": null,
85 | "custom_exercise_image_thumbnail_url": null,
86 | "thumbnail_url": null,
87 | "muscle_group": "cardio",
88 | "other_muscles": [],
89 | "priority": 0,
90 | "sets": [{
91 | "id": 298257286,
92 | "index": 0,
93 | "indicator": "normal",
94 | "weight_kg": null,
95 | "reps": null,
96 | "distance_meters": 0,
97 | "duration_seconds": 22,
98 | "rpe": null,
99 | "prs": [],
100 | "personalRecords": []
101 | }]
102 | }, {
103 | "id": "60c40ee1-8b09-4832-bc2c-0d5f9fc51c00",
104 | "title": "Incline Bench Press (Dumbbell)",
105 | "es_title": "Press de Banca Inclinado (Mancuerna)",
106 | "de_title": "Schrägbankdrücken (Kurzhantel)",
107 | "fr_title": "Développé Couché Incliné (Haltère)",
108 | "it_title": "Panca Inclinata (Manubrio)",
109 | "pt_title": "Supino Inclinado (Halter)",
110 | "ko_title": null,
111 | "ja_title": null,
112 | "tr_title": "Incline Bench Press (Dambıl)",
113 | "ru_title": "Жим в наклоне лежа (Гантель)",
114 | "zh_cn_title": "上斜推胸 (哑铃)",
115 | "zh_tw_title": "上斜推胸 (啞鈴)",
116 | "superset_id": null,
117 | "rest_seconds": null,
118 | "notes": "",
119 | "exercise_template_id": "07B38369",
120 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/03141201-Dumbbell-Incline-Bench-Press_Chest.mp4",
121 | "exercise_type": "weight_reps",
122 | "equipment_category": "dumbbell",
123 | "media_type": "video",
124 | "custom_exercise_image_url": null,
125 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/03141201-Dumbbell-Incline-Bench-Press_Chest_thumbnail@3x.jpg",
126 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/03141201-Dumbbell-Incline-Bench-Press_Chest_thumbnail@3x.jpg",
127 | "muscle_group": "chest",
128 | "other_muscles": ["triceps", "shoulders"],
129 | "priority": 10,
130 | "sets": [{
131 | "id": 298257287,
132 | "index": 0,
133 | "indicator": "normal",
134 | "weight_kg": 45,
135 | "reps": 8,
136 | "distance_meters": null,
137 | "duration_seconds": null,
138 | "rpe": null,
139 | "prs": [{
140 | "type": "best_weight",
141 | "value": 45
142 | }],
143 | "personalRecords": [{
144 | "type": "best_weight",
145 | "value": 45
146 | }]
147 | }, {
148 | "id": 298257288,
149 | "index": 1,
150 | "indicator": "normal",
151 | "weight_kg": 45,
152 | "reps": 8,
153 | "distance_meters": null,
154 | "duration_seconds": null,
155 | "rpe": null,
156 | "prs": [],
157 | "personalRecords": []
158 | }, {
159 | "id": 298257289,
160 | "index": 2,
161 | "indicator": "normal",
162 | "weight_kg": 45,
163 | "reps": 6,
164 | "distance_meters": null,
165 | "duration_seconds": null,
166 | "rpe": null,
167 | "prs": [],
168 | "personalRecords": []
169 | }]
170 | }, {
171 | "id": "5b70b03f-10e9-4120-8acb-3fb52575b814",
172 | "title": "Bench Press (Dumbbell)",
173 | "es_title": "Press de Banca (Mancuerna)",
174 | "de_title": "Bankdrücken (Kurzhantel)",
175 | "fr_title": "Développé Couché (Haltère)",
176 | "it_title": "Panca Piana (Manubrio)",
177 | "pt_title": "Supino (Halter)",
178 | "ko_title": null,
179 | "ja_title": null,
180 | "tr_title": "Bench Press (Dambıl)",
181 | "ru_title": "Жима лежа (Гантель)",
182 | "zh_cn_title": "卧推 (哑铃)",
183 | "zh_tw_title": "臥推 (啞鈴)",
184 | "superset_id": null,
185 | "rest_seconds": null,
186 | "notes": "",
187 | "exercise_template_id": "3601968B",
188 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/02891201-Dumbbell-Bench-Press_Chest.mp4",
189 | "exercise_type": "weight_reps",
190 | "equipment_category": "dumbbell",
191 | "media_type": "video",
192 | "custom_exercise_image_url": null,
193 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/02891201-Dumbbell-Bench-Press_Chest_thumbnail@3x.jpg",
194 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/02891201-Dumbbell-Bench-Press_Chest_thumbnail@3x.jpg",
195 | "muscle_group": "chest",
196 | "other_muscles": ["triceps", "shoulders"],
197 | "priority": 9,
198 | "sets": [{
199 | "id": 298257290,
200 | "index": 0,
201 | "indicator": "normal",
202 | "weight_kg": 35,
203 | "reps": 8,
204 | "distance_meters": null,
205 | "duration_seconds": null,
206 | "rpe": null,
207 | "prs": [],
208 | "personalRecords": []
209 | }, {
210 | "id": 298257291,
211 | "index": 1,
212 | "indicator": "normal",
213 | "weight_kg": 40,
214 | "reps": 8,
215 | "distance_meters": null,
216 | "duration_seconds": null,
217 | "rpe": null,
218 | "prs": [],
219 | "personalRecords": []
220 | }, {
221 | "id": 298257292,
222 | "index": 2,
223 | "indicator": "normal",
224 | "weight_kg": 40,
225 | "reps": 8,
226 | "distance_meters": null,
227 | "duration_seconds": null,
228 | "rpe": null,
229 | "prs": [],
230 | "personalRecords": []
231 | }, {
232 | "id": 298257293,
233 | "index": 3,
234 | "indicator": "normal",
235 | "weight_kg": 45,
236 | "reps": 8,
237 | "distance_meters": null,
238 | "duration_seconds": null,
239 | "rpe": null,
240 | "prs": [],
241 | "personalRecords": []
242 | }, {
243 | "id": 298257294,
244 | "index": 4,
245 | "indicator": "normal",
246 | "weight_kg": 45,
247 | "reps": 8,
248 | "distance_meters": null,
249 | "duration_seconds": null,
250 | "rpe": null,
251 | "prs": [],
252 | "personalRecords": []
253 | }]
254 | }, {
255 | "id": "4cf87a7a-bacd-4e0a-a8ee-da85426b29f5",
256 | "title": "Dumbbell Row",
257 | "es_title": "Remo con Mancuerna",
258 | "de_title": "Kurzhantel Rudern",
259 | "fr_title": "Rowing Haltère",
260 | "it_title": "Rematore Manubrio",
261 | "pt_title": "Remada (Halter)",
262 | "ko_title": null,
263 | "ja_title": null,
264 | "tr_title": "Dumbbell Row",
265 | "ru_title": "Тяга гантелью",
266 | "zh_cn_title": "哑铃划船",
267 | "zh_tw_title": "啞鈴划船",
268 | "superset_id": null,
269 | "rest_seconds": null,
270 | "notes": "",
271 | "exercise_template_id": "F1E57334",
272 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/02921201-Dumbbell-Bent-over-Row_Back.mp4",
273 | "exercise_type": "weight_reps",
274 | "equipment_category": "dumbbell",
275 | "media_type": "video",
276 | "custom_exercise_image_url": null,
277 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/02921201-Dumbbell-Bent-over-Row_Back_thumbnail@3x.jpg",
278 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/02921201-Dumbbell-Bent-over-Row_Back_thumbnail@3x.jpg",
279 | "muscle_group": "upper_back",
280 | "other_muscles": [],
281 | "priority": 10,
282 | "sets": [{
283 | "id": 298257295,
284 | "index": 0,
285 | "indicator": "normal",
286 | "weight_kg": 41,
287 | "reps": 8,
288 | "distance_meters": null,
289 | "duration_seconds": null,
290 | "rpe": null,
291 | "prs": [],
292 | "personalRecords": []
293 | }, {
294 | "id": 298257296,
295 | "index": 1,
296 | "indicator": "normal",
297 | "weight_kg": 41,
298 | "reps": 8,
299 | "distance_meters": null,
300 | "duration_seconds": null,
301 | "rpe": null,
302 | "prs": [],
303 | "personalRecords": []
304 | }, {
305 | "id": 298257297,
306 | "index": 2,
307 | "indicator": "normal",
308 | "weight_kg": 45,
309 | "reps": 8,
310 | "distance_meters": null,
311 | "duration_seconds": null,
312 | "rpe": null,
313 | "prs": [{
314 | "type": "best_weight",
315 | "value": 45
316 | }],
317 | "personalRecords": [{
318 | "type": "best_weight",
319 | "value": 45
320 | }]
321 | }, {
322 | "id": 298257298,
323 | "index": 3,
324 | "indicator": "normal",
325 | "weight_kg": 45,
326 | "reps": 8,
327 | "distance_meters": null,
328 | "duration_seconds": null,
329 | "rpe": null,
330 | "prs": [],
331 | "personalRecords": []
332 | }, {
333 | "id": 298257299,
334 | "index": 4,
335 | "indicator": "normal",
336 | "weight_kg": 45,
337 | "reps": 8,
338 | "distance_meters": null,
339 | "duration_seconds": null,
340 | "rpe": null,
341 | "prs": [],
342 | "personalRecords": []
343 | }, {
344 | "id": 298257300,
345 | "index": 5,
346 | "indicator": "normal",
347 | "weight_kg": 45,
348 | "reps": 8,
349 | "distance_meters": null,
350 | "duration_seconds": null,
351 | "rpe": null,
352 | "prs": [],
353 | "personalRecords": []
354 | }, {
355 | "id": 298257301,
356 | "index": 6,
357 | "indicator": "normal",
358 | "weight_kg": 45,
359 | "reps": 8,
360 | "distance_meters": null,
361 | "duration_seconds": null,
362 | "rpe": null,
363 | "prs": [],
364 | "personalRecords": []
365 | }, {
366 | "id": 298257302,
367 | "index": 7,
368 | "indicator": "normal",
369 | "weight_kg": 45,
370 | "reps": 8,
371 | "distance_meters": null,
372 | "duration_seconds": null,
373 | "rpe": null,
374 | "prs": [],
375 | "personalRecords": []
376 | }, {
377 | "id": 298257303,
378 | "index": 8,
379 | "indicator": "normal",
380 | "weight_kg": 45,
381 | "reps": 8,
382 | "distance_meters": null,
383 | "duration_seconds": null,
384 | "rpe": null,
385 | "prs": [],
386 | "personalRecords": []
387 | }, {
388 | "id": 298257304,
389 | "index": 9,
390 | "indicator": "normal",
391 | "weight_kg": 45,
392 | "reps": 8,
393 | "distance_meters": null,
394 | "duration_seconds": null,
395 | "rpe": null,
396 | "prs": [],
397 | "personalRecords": []
398 | }]
399 | }, {
400 | "id": "81e50213-92a9-4d44-9bdc-beb26f6b7331",
401 | "title": "Front Raise (Dumbbell)",
402 | "es_title": "Elevacion Frontal (Mancuerna)",
403 | "de_title": "Frontheben (Kurzhantel)",
404 | "fr_title": "Élévation Frontale (Haltère)",
405 | "it_title": "Alzata Frontale (Manubrio)",
406 | "pt_title": "Elevação Frontal (Halter)",
407 | "ko_title": null,
408 | "ja_title": null,
409 | "tr_title": "Front Raise (Dambıl)",
410 | "ru_title": "Подъем перед собой (Гантель)",
411 | "zh_cn_title": "肩膀抬高 (哑铃)",
412 | "zh_tw_title": "肩膀抬高 (啞鈴)",
413 | "superset_id": null,
414 | "rest_seconds": null,
415 | "notes": "",
416 | "exercise_template_id": "8293E554",
417 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/03101201-Dumbbell-Front-Raise_Shoulders.mp4",
418 | "exercise_type": "weight_reps",
419 | "equipment_category": "dumbbell",
420 | "media_type": "video",
421 | "custom_exercise_image_url": null,
422 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/03101201-Dumbbell-Front-Raise_Shoulders_thumbnail@3x.jpg",
423 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/03101201-Dumbbell-Front-Raise_Shoulders_thumbnail@3x.jpg",
424 | "muscle_group": "shoulders",
425 | "other_muscles": [],
426 | "priority": 10,
427 | "sets": [{
428 | "id": 298257305,
429 | "index": 0,
430 | "indicator": "normal",
431 | "weight_kg": 7.5,
432 | "reps": 8,
433 | "distance_meters": null,
434 | "duration_seconds": null,
435 | "rpe": null,
436 | "prs": [],
437 | "personalRecords": []
438 | }, {
439 | "id": 298257306,
440 | "index": 1,
441 | "indicator": "normal",
442 | "weight_kg": 7.5,
443 | "reps": 8,
444 | "distance_meters": null,
445 | "duration_seconds": null,
446 | "rpe": null,
447 | "prs": [],
448 | "personalRecords": []
449 | }, {
450 | "id": 298257307,
451 | "index": 2,
452 | "indicator": "normal",
453 | "weight_kg": 10,
454 | "reps": 8,
455 | "distance_meters": null,
456 | "duration_seconds": null,
457 | "rpe": null,
458 | "prs": [],
459 | "personalRecords": []
460 | }, {
461 | "id": 298257308,
462 | "index": 3,
463 | "indicator": "normal",
464 | "weight_kg": 10,
465 | "reps": 8,
466 | "distance_meters": null,
467 | "duration_seconds": null,
468 | "rpe": null,
469 | "prs": [],
470 | "personalRecords": []
471 | }, {
472 | "id": 298257309,
473 | "index": 4,
474 | "indicator": "normal",
475 | "weight_kg": 7.5,
476 | "reps": 8,
477 | "distance_meters": null,
478 | "duration_seconds": null,
479 | "rpe": null,
480 | "prs": [],
481 | "personalRecords": []
482 | }, {
483 | "id": 298257310,
484 | "index": 5,
485 | "indicator": "normal",
486 | "weight_kg": 7.5,
487 | "reps": 8,
488 | "distance_meters": null,
489 | "duration_seconds": null,
490 | "rpe": null,
491 | "prs": [],
492 | "personalRecords": []
493 | }, {
494 | "id": 298257311,
495 | "index": 6,
496 | "indicator": "normal",
497 | "weight_kg": 7.5,
498 | "reps": 8,
499 | "distance_meters": null,
500 | "duration_seconds": null,
501 | "rpe": null,
502 | "prs": [],
503 | "personalRecords": []
504 | }, {
505 | "id": 298257312,
506 | "index": 7,
507 | "indicator": "normal",
508 | "weight_kg": 7.5,
509 | "reps": 8,
510 | "distance_meters": null,
511 | "duration_seconds": null,
512 | "rpe": null,
513 | "prs": [],
514 | "personalRecords": []
515 | }, {
516 | "id": 298257313,
517 | "index": 8,
518 | "indicator": "normal",
519 | "weight_kg": 7.5,
520 | "reps": 4,
521 | "distance_meters": null,
522 | "duration_seconds": null,
523 | "rpe": null,
524 | "prs": [],
525 | "personalRecords": []
526 | }, {
527 | "id": 298257314,
528 | "index": 9,
529 | "indicator": "normal",
530 | "weight_kg": 7.5,
531 | "reps": 4,
532 | "distance_meters": null,
533 | "duration_seconds": null,
534 | "rpe": null,
535 | "prs": [],
536 | "personalRecords": []
537 | }]
538 | }, {
539 | "id": "897f9f44-3a61-4a8b-9b4e-62c359b0fea8",
540 | "title": "Lateral Raise (Dumbbell)",
541 | "es_title": "Elevacion Laterales (Mancuerna)",
542 | "de_title": "Seitheben (Kurzhantel)",
543 | "fr_title": "Élévation Latérale (Haltère)",
544 | "it_title": "Aperture Laterali (Manubrio)",
545 | "pt_title": "Elevação Lateral (Halter)",
546 | "ko_title": null,
547 | "ja_title": null,
548 | "tr_title": "Lateral Raise (Dambıl)",
549 | "ru_title": "Боковые подъемы (Гантель)",
550 | "zh_cn_title": "侧平举 (哑铃)",
551 | "zh_tw_title": "側平舉 (啞鈴)",
552 | "superset_id": null,
553 | "rest_seconds": null,
554 | "notes": "",
555 | "exercise_template_id": "422B08F1",
556 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/03341201-Dumbbell-Lateral-Raise_shoulder.mp4",
557 | "exercise_type": "weight_reps",
558 | "equipment_category": "dumbbell",
559 | "media_type": "video",
560 | "custom_exercise_image_url": null,
561 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/03341201-Dumbbell-Lateral-Raise_shoulder_thumbnail@3x.jpg",
562 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/03341201-Dumbbell-Lateral-Raise_shoulder_thumbnail@3x.jpg",
563 | "muscle_group": "shoulders",
564 | "other_muscles": [],
565 | "priority": 10,
566 | "sets": [{
567 | "id": 298257315,
568 | "index": 0,
569 | "indicator": "normal",
570 | "weight_kg": 7.5,
571 | "reps": 8,
572 | "distance_meters": null,
573 | "duration_seconds": null,
574 | "rpe": null,
575 | "prs": [{
576 | "type": "best_weight",
577 | "value": 7.5
578 | }],
579 | "personalRecords": [{
580 | "type": "best_weight",
581 | "value": 7.5
582 | }]
583 | }, {
584 | "id": 298257316,
585 | "index": 1,
586 | "indicator": "normal",
587 | "weight_kg": 7.5,
588 | "reps": 8,
589 | "distance_meters": null,
590 | "duration_seconds": null,
591 | "rpe": null,
592 | "prs": [],
593 | "personalRecords": []
594 | }, {
595 | "id": 298257317,
596 | "index": 2,
597 | "indicator": "normal",
598 | "weight_kg": 5,
599 | "reps": 10,
600 | "distance_meters": null,
601 | "duration_seconds": null,
602 | "rpe": null,
603 | "prs": [],
604 | "personalRecords": []
605 | }, {
606 | "id": 298257318,
607 | "index": 3,
608 | "indicator": "normal",
609 | "weight_kg": 5,
610 | "reps": 10,
611 | "distance_meters": null,
612 | "duration_seconds": null,
613 | "rpe": null,
614 | "prs": [],
615 | "personalRecords": []
616 | }, {
617 | "id": 298257319,
618 | "index": 4,
619 | "indicator": "normal",
620 | "weight_kg": 5,
621 | "reps": 8,
622 | "distance_meters": null,
623 | "duration_seconds": null,
624 | "rpe": null,
625 | "prs": [],
626 | "personalRecords": []
627 | }, {
628 | "id": 298257320,
629 | "index": 5,
630 | "indicator": "normal",
631 | "weight_kg": 5,
632 | "reps": 8,
633 | "distance_meters": null,
634 | "duration_seconds": null,
635 | "rpe": null,
636 | "prs": [],
637 | "personalRecords": []
638 | }]
639 | }, {
640 | "id": "b9067caf-7733-4e9a-bdf3-4607272eaf04",
641 | "title": "Pullover (Dumbbell)",
642 | "es_title": "Pull Over",
643 | "de_title": "Überzüge",
644 | "fr_title": "Pull-Over",
645 | "it_title": "Pullover (Manubrio)",
646 | "pt_title": "Pullover (Halter)",
647 | "ko_title": null,
648 | "ja_title": null,
649 | "tr_title": "Pullover (Dambıl)",
650 | "ru_title": "Пуловер (Гантель)",
651 | "zh_cn_title": "仰卧拉举(哑铃)",
652 | "zh_tw_title": "仰臥拉舉(啞鈴)",
653 | "superset_id": null,
654 | "rest_seconds": null,
655 | "notes": "",
656 | "exercise_template_id": "67280085",
657 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/03751201-Dumbbell-Pullover_Chest.mp4",
658 | "exercise_type": "weight_reps",
659 | "equipment_category": "dumbbell",
660 | "media_type": "video",
661 | "custom_exercise_image_url": null,
662 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/03751201-Dumbbell-Pullover_Chest_thumbnail@3x.jpg",
663 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/03751201-Dumbbell-Pullover_Chest_thumbnail@3x.jpg",
664 | "muscle_group": "chest",
665 | "other_muscles": [],
666 | "priority": 0,
667 | "sets": [{
668 | "id": 298257321,
669 | "index": 0,
670 | "indicator": "normal",
671 | "weight_kg": 20,
672 | "reps": 8,
673 | "distance_meters": null,
674 | "duration_seconds": null,
675 | "rpe": null,
676 | "prs": [],
677 | "personalRecords": []
678 | }, {
679 | "id": 298257322,
680 | "index": 1,
681 | "indicator": "normal",
682 | "weight_kg": 20,
683 | "reps": 8,
684 | "distance_meters": null,
685 | "duration_seconds": null,
686 | "rpe": null,
687 | "prs": [],
688 | "personalRecords": []
689 | }, {
690 | "id": 298257323,
691 | "index": 2,
692 | "indicator": "normal",
693 | "weight_kg": 20,
694 | "reps": 8,
695 | "distance_meters": null,
696 | "duration_seconds": null,
697 | "rpe": null,
698 | "prs": [],
699 | "personalRecords": []
700 | }, {
701 | "id": 298257324,
702 | "index": 3,
703 | "indicator": "normal",
704 | "weight_kg": 22.5,
705 | "reps": 8,
706 | "distance_meters": null,
707 | "duration_seconds": null,
708 | "rpe": null,
709 | "prs": [{
710 | "type": "best_weight",
711 | "value": 22.5
712 | }],
713 | "personalRecords": [{
714 | "type": "best_weight",
715 | "value": 22.5
716 | }]
717 | }, {
718 | "id": 298257325,
719 | "index": 4,
720 | "indicator": "normal",
721 | "weight_kg": 22.5,
722 | "reps": 4,
723 | "distance_meters": null,
724 | "duration_seconds": null,
725 | "rpe": null,
726 | "prs": [],
727 | "personalRecords": []
728 | }]
729 | }, {
730 | "id": "7a80fd84-2fce-421e-8071-908b5e0f0546",
731 | "title": "Bicep Curl (Barbell)",
732 | "es_title": "Curl de Bicéps (Barra)",
733 | "de_title": "Bizepscurl (Langhantel)",
734 | "fr_title": "Curl Biceps (Barre)",
735 | "it_title": "Curl Bicipiti (Bilanciere)",
736 | "pt_title": "Rosca Direta (Barra)",
737 | "ko_title": null,
738 | "ja_title": null,
739 | "tr_title": "Bicep Curl (Bar)",
740 | "ru_title": "Сгибание на бицепс (Штанга)",
741 | "zh_cn_title": "二头弯举 (杠铃)",
742 | "zh_tw_title": "二頭彎舉(槓鈴)",
743 | "superset_id": null,
744 | "rest_seconds": null,
745 | "notes": "",
746 | "exercise_template_id": "A5AC6449",
747 | "url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/00311201-Barbell-Curl_Upper-Arms.mp4",
748 | "exercise_type": "weight_reps",
749 | "equipment_category": "barbell",
750 | "media_type": "video",
751 | "custom_exercise_image_url": null,
752 | "custom_exercise_image_thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/00311201-Barbell-Curl_Upper-Arms_thumbnail@3x.jpg",
753 | "thumbnail_url": "https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/00311201-Barbell-Curl_Upper-Arms_thumbnail@3x.jpg",
754 | "muscle_group": "biceps",
755 | "other_muscles": [],
756 | "priority": 10,
757 | "sets": [{
758 | "id": 298257326,
759 | "index": 0,
760 | "indicator": "normal",
761 | "weight_kg": 25,
762 | "reps": 8,
763 | "distance_meters": null,
764 | "duration_seconds": null,
765 | "rpe": null,
766 | "prs": [{
767 | "type": "best_weight",
768 | "value": 25
769 | }],
770 | "personalRecords": [{
771 | "type": "best_weight",
772 | "value": 25
773 | }]
774 | }, {
775 | "id": 298257327,
776 | "index": 1,
777 | "indicator": "normal",
778 | "weight_kg": 25,
779 | "reps": 10,
780 | "distance_meters": null,
781 | "duration_seconds": null,
782 | "rpe": null,
783 | "prs": [],
784 | "personalRecords": []
785 | }, {
786 | "id": 298257328,
787 | "index": 2,
788 | "indicator": "normal",
789 | "weight_kg": 25,
790 | "reps": 10,
791 | "distance_meters": null,
792 | "duration_seconds": null,
793 | "rpe": null,
794 | "prs": [],
795 | "personalRecords": []
796 | }, {
797 | "id": 298257329,
798 | "index": 3,
799 | "indicator": "normal",
800 | "weight_kg": 25,
801 | "reps": 8,
802 | "distance_meters": null,
803 | "duration_seconds": null,
804 | "rpe": null,
805 | "prs": [],
806 | "personalRecords": []
807 | }, {
808 | "id": 298257330,
809 | "index": 4,
810 | "indicator": "normal",
811 | "weight_kg": 25,
812 | "reps": 8,
813 | "distance_meters": null,
814 | "duration_seconds": null,
815 | "rpe": null,
816 | "prs": [],
817 | "personalRecords": []
818 | }]
819 | }],
820 | "estimated_volume_kg": 8896
821 | }]
822 | ```
--------------------------------------------------------------------------------
/api/feed_workouts_paged.md:
--------------------------------------------------------------------------------
1 | ## Feed workouts paged
2 |
3 | ### request
4 |
5 | ```
6 | import requests
7 |
8 | headers = {
9 | 'accept': 'application/json, text/plain, */*',
10 | 'x-api-key': 'klean_kanteen_insulated',
11 | 'auth-token': '.......-.....-....-....-.............',
12 | 'Host': 'api.hevyapp.com',
13 | 'User-Agent': 'okhttp/4.9.3',
14 | 'Pragma': 'no-cache',
15 | 'Cache-Control': 'no-cache',
16 | }
17 |
18 | response = requests.get('https://api.hevyapp.com/feed_workouts_paged', headers=headers)
19 | ```
20 |
21 | ### response
22 | ```
23 | {
24 | "workouts":[
25 | {
26 | "id":"6c10fadc-5b5c-43f0-9b95-6c38caf99944",
27 | "short_id":"9zxJ5CLFduN",
28 | "index":13490647,
29 | "name":"4. Abs / Cardio",
30 | "description":"",
31 | "start_time":1678869822,
32 | "end_time":1678877371,
33 | "created_at":"2023-03-15T10:49:39.119Z",
34 | "updated_at":"2023-03-15T10:49:39.119Z",
35 | "routine_id":"81272c28-2788-41d0-892f-fc94803f6f48",
36 | "apple_watch":false,
37 | "user_id":"93620a45-5bef-4a70-baab-5c1058a88046",
38 | "username":"bitwiseshift",
39 | "profile_image":"https://pump-app.s3.eu-west-2.amazonaws.com/profile-images/bitwiseshift-e4a12928-f0f3-4a87-adc5-99c1daae5951.jpg",
40 | "verified":false,
41 | "nth_workout":181,
42 | "like_count":0,
43 | "is_liked_by_user":false,
44 | "like_images":[
45 |
46 | ],
47 | "comments":[
48 |
49 | ],
50 | "comment_count":0,
51 | "media":[
52 |
53 | ],
54 | "image_urls":[
55 |
56 | ],
57 | "exercises":[
58 | {
59 | "id":"2918c5ad-f313-41b6-8a60-a91b40049b91",
60 | "title":"Elliptical Trainer",
61 | "es_title":"Entrenador Elíptico",
62 | "de_title":"Crosstrainer",
63 | "fr_title":"Vélo Elliptique",
64 | "it_title":"Ellittica",
65 | "pt_title":"Elíptico",
66 | "ko_title":null,
67 | "ja_title":null,
68 | "tr_title":"Eliptik Bisiklet",
69 | "ru_title":"Эллиптический тренажер",
70 | "zh_cn_title":"椭圆机",
71 | "zh_tw_title":"橢圓機",
72 | "superset_id":null,
73 | "rest_seconds":120,
74 | "notes":"",
75 | "exercise_template_id":"3303376C",
76 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/21921201-Elliptical-Machine-Walk_Cardio.mp4",
77 | "exercise_type":"distance_duration",
78 | "equipment_category":"machine",
79 | "media_type":"video",
80 | "custom_exercise_image_url":null,
81 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/21921201-Elliptical-Machine-Walk_Cardio_thumbnail@3x.jpg",
82 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/21921201-Elliptical-Machine-Walk_Cardio_thumbnail@3x.jpg",
83 | "muscle_group":"cardio",
84 | "other_muscles":[
85 |
86 | ],
87 | "priority":8,
88 | "sets":[
89 | {
90 | "id":310860050,
91 | "index":0,
92 | "indicator":"normal",
93 | "weight_kg":null,
94 | "reps":null,
95 | "distance_meters":0,
96 | "duration_seconds":15,
97 | "rpe":null,
98 | "prs":[
99 |
100 | ],
101 | "personalRecords":[
102 |
103 | ]
104 | }
105 | ]
106 | },
107 | {
108 | "id":"95c7dfa9-5ca9-4bf6-8494-02e4f3d56eff",
109 | "title":"Hanging Leg Raise",
110 | "es_title":"Levantamiento de Piernas en Barra",
111 | "de_title":"Beinheben hängend",
112 | "fr_title":"Relevé de Jambes Suspendu",
113 | "it_title":"Leg Raise Appeso",
114 | "pt_title":"Elevação De Pernas Na Barra Fixa",
115 | "ko_title":null,
116 | "ja_title":null,
117 | "tr_title":"Hanging Leg Raise",
118 | "ru_title":"Подъем ног в висе",
119 | "zh_cn_title":"单杠曲腿上举",
120 | "zh_tw_title":"單槓曲腿上舉",
121 | "superset_id":null,
122 | "rest_seconds":120,
123 | "notes":"",
124 | "exercise_template_id":"F8356514",
125 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/17641201-Hanging-Leg-Hip-Raise_Waist.mp4",
126 | "exercise_type":"reps_only",
127 | "equipment_category":"none",
128 | "media_type":"video",
129 | "custom_exercise_image_url":null,
130 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/17641201-Hanging-Leg-Hip-Raise_Waist_thumbnail@3x.jpg",
131 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/17641201-Hanging-Leg-Hip-Raise_Waist_thumbnail@3x.jpg",
132 | "muscle_group":"abdominals",
133 | "other_muscles":[
134 |
135 | ],
136 | "priority":0,
137 | "sets":[
138 | {
139 | "id":310860051,
140 | "index":0,
141 | "indicator":"normal",
142 | "weight_kg":null,
143 | "reps":6,
144 | "distance_meters":null,
145 | "duration_seconds":null,
146 | "rpe":null,
147 | "prs":[
148 |
149 | ],
150 | "personalRecords":[
151 |
152 | ]
153 | },
154 | {
155 | "id":310860052,
156 | "index":1,
157 | "indicator":"normal",
158 | "weight_kg":null,
159 | "reps":6,
160 | "distance_meters":null,
161 | "duration_seconds":null,
162 | "rpe":null,
163 | "prs":[
164 |
165 | ],
166 | "personalRecords":[
167 |
168 | ]
169 | },
170 | {
171 | "id":310860053,
172 | "index":2,
173 | "indicator":"normal",
174 | "weight_kg":null,
175 | "reps":6,
176 | "distance_meters":null,
177 | "duration_seconds":null,
178 | "rpe":null,
179 | "prs":[
180 |
181 | ],
182 | "personalRecords":[
183 |
184 | ]
185 | },
186 | {
187 | "id":310860054,
188 | "index":3,
189 | "indicator":"normal",
190 | "weight_kg":null,
191 | "reps":6,
192 | "distance_meters":null,
193 | "duration_seconds":null,
194 | "rpe":null,
195 | "prs":[
196 |
197 | ],
198 | "personalRecords":[
199 |
200 | ]
201 | }
202 | ]
203 | },
204 | {
205 | "id":"0a5f260f-2b3f-4c39-8909-0b99a62c8e2c",
206 | "title":"Lying Leg Raise",
207 | "es_title":"Levantamiento de Piernas Tumbado",
208 | "de_title":"Liegendes Beinheben",
209 | "fr_title":"Relevé de Jambes Allongé",
210 | "it_title":"Leg Raise Sdraiato",
211 | "pt_title":"Elevação De Pernas (Deitado)",
212 | "ko_title":null,
213 | "ja_title":null,
214 | "tr_title":"Çakı Hareketi",
215 | "ru_title":"Подъем ног лежа",
216 | "zh_cn_title":"躺式抬腿",
217 | "zh_tw_title":"躺式抬腿",
218 | "superset_id":null,
219 | "rest_seconds":120,
220 | "notes":"",
221 | "exercise_template_id":"09C9F635",
222 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/11631201-Lying-Leg-Raise_Waist.mp4",
223 | "exercise_type":"reps_only",
224 | "equipment_category":"none",
225 | "media_type":"video",
226 | "custom_exercise_image_url":null,
227 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/11631201-Lying-Leg-Raise_Waist_thumbnail@3x.jpg",
228 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/11631201-Lying-Leg-Raise_Waist_thumbnail@3x.jpg",
229 | "muscle_group":"abdominals",
230 | "other_muscles":[
231 |
232 | ],
233 | "priority":8,
234 | "sets":[
235 | {
236 | "id":310860055,
237 | "index":0,
238 | "indicator":"normal",
239 | "weight_kg":null,
240 | "reps":8,
241 | "distance_meters":null,
242 | "duration_seconds":null,
243 | "rpe":null,
244 | "prs":[
245 |
246 | ],
247 | "personalRecords":[
248 |
249 | ]
250 | },
251 | {
252 | "id":310860056,
253 | "index":1,
254 | "indicator":"normal",
255 | "weight_kg":null,
256 | "reps":8,
257 | "distance_meters":null,
258 | "duration_seconds":null,
259 | "rpe":null,
260 | "prs":[
261 |
262 | ],
263 | "personalRecords":[
264 |
265 | ]
266 | },
267 | {
268 | "id":310860057,
269 | "index":2,
270 | "indicator":"normal",
271 | "weight_kg":null,
272 | "reps":8,
273 | "distance_meters":null,
274 | "duration_seconds":null,
275 | "rpe":null,
276 | "prs":[
277 |
278 | ],
279 | "personalRecords":[
280 |
281 | ]
282 | },
283 | {
284 | "id":310860058,
285 | "index":3,
286 | "indicator":"normal",
287 | "weight_kg":null,
288 | "reps":8,
289 | "distance_meters":null,
290 | "duration_seconds":null,
291 | "rpe":null,
292 | "prs":[
293 |
294 | ],
295 | "personalRecords":[
296 |
297 | ]
298 | },
299 | {
300 | "id":310860059,
301 | "index":4,
302 | "indicator":"normal",
303 | "weight_kg":null,
304 | "reps":8,
305 | "distance_meters":null,
306 | "duration_seconds":null,
307 | "rpe":null,
308 | "prs":[
309 |
310 | ],
311 | "personalRecords":[
312 |
313 | ]
314 | }
315 | ]
316 | },
317 | {
318 | "id":"8d764819-6d95-434f-a78c-a5c554b8f5da",
319 | "title":"Decline Crunch",
320 | "es_title":"Abdominal Corto en Banco Inclinado",
321 | "de_title":"Negativer Crunch",
322 | "fr_title":"Crunch Décliné",
323 | "it_title":"Crunch Declinato",
324 | "pt_title":"Abdominal Declinado",
325 | "ko_title":null,
326 | "ja_title":null,
327 | "tr_title":"Eğik Sehpada Yarım Mekik",
328 | "ru_title":"Скручивание в наклоне",
329 | "zh_cn_title":"斜板卷腹",
330 | "zh_tw_title":"斜板捲腹",
331 | "superset_id":null,
332 | "rest_seconds":120,
333 | "notes":"",
334 | "exercise_template_id":"BC10A922",
335 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/02771201-Decline-Crunch_Waist.mp4",
336 | "exercise_type":"reps_only",
337 | "equipment_category":"none",
338 | "media_type":"video",
339 | "custom_exercise_image_url":null,
340 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/02771201-Decline-Crunch_Waist_thumbnail@3x.jpg",
341 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/02771201-Decline-Crunch_Waist_thumbnail@3x.jpg",
342 | "muscle_group":"abdominals",
343 | "other_muscles":[
344 |
345 | ],
346 | "priority":9,
347 | "sets":[
348 | {
349 | "id":310860060,
350 | "index":0,
351 | "indicator":"normal",
352 | "weight_kg":null,
353 | "reps":8,
354 | "distance_meters":null,
355 | "duration_seconds":null,
356 | "rpe":null,
357 | "prs":[
358 |
359 | ],
360 | "personalRecords":[
361 |
362 | ]
363 | },
364 | {
365 | "id":310860061,
366 | "index":1,
367 | "indicator":"normal",
368 | "weight_kg":null,
369 | "reps":8,
370 | "distance_meters":null,
371 | "duration_seconds":null,
372 | "rpe":null,
373 | "prs":[
374 |
375 | ],
376 | "personalRecords":[
377 |
378 | ]
379 | },
380 | {
381 | "id":310860062,
382 | "index":2,
383 | "indicator":"normal",
384 | "weight_kg":null,
385 | "reps":8,
386 | "distance_meters":null,
387 | "duration_seconds":null,
388 | "rpe":null,
389 | "prs":[
390 |
391 | ],
392 | "personalRecords":[
393 |
394 | ]
395 | },
396 | {
397 | "id":310860063,
398 | "index":3,
399 | "indicator":"normal",
400 | "weight_kg":null,
401 | "reps":8,
402 | "distance_meters":null,
403 | "duration_seconds":null,
404 | "rpe":null,
405 | "prs":[
406 |
407 | ],
408 | "personalRecords":[
409 |
410 | ]
411 | },
412 | {
413 | "id":310860064,
414 | "index":4,
415 | "indicator":"normal",
416 | "weight_kg":null,
417 | "reps":8,
418 | "distance_meters":null,
419 | "duration_seconds":null,
420 | "rpe":null,
421 | "prs":[
422 |
423 | ],
424 | "personalRecords":[
425 |
426 | ]
427 | }
428 | ]
429 | },
430 | {
431 | "id":"72222465-ff9f-41b2-b7b7-c178a21d8dd0",
432 | "title":"Rowing Machine",
433 | "es_title":"Máquina de Remo",
434 | "de_title":"Rudermaschine",
435 | "fr_title":"Rameur",
436 | "it_title":"Macchina Rematore",
437 | "pt_title":"Máquina De Remo",
438 | "ko_title":null,
439 | "ja_title":null,
440 | "tr_title":"Kürek Çekme",
441 | "ru_title":"Гребной тренажер",
442 | "zh_cn_title":"划船机",
443 | "zh_tw_title":"划船機",
444 | "superset_id":null,
445 | "rest_seconds":120,
446 | "notes":"",
447 | "exercise_template_id":"0222DB42",
448 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/22701201-Rowing-Straight-Back-(with-rowing-machine)-(female)_Cardio.mp4",
449 | "exercise_type":"distance_duration",
450 | "equipment_category":"machine",
451 | "media_type":"video",
452 | "custom_exercise_image_url":null,
453 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/22701201-Rowing-Straight-Back-(with-rowing-machine)-(female)_Cardio_thumbnail@3x.jpg",
454 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/22701201-Rowing-Straight-Back-(with-rowing-machine)-(female)_Cardio_thumbnail@3x.jpg",
455 | "muscle_group":"cardio",
456 | "other_muscles":[
457 |
458 | ],
459 | "priority":8,
460 | "sets":[
461 | {
462 | "id":310860065,
463 | "index":0,
464 | "indicator":"normal",
465 | "weight_kg":null,
466 | "reps":null,
467 | "distance_meters":0,
468 | "duration_seconds":2,
469 | "rpe":null,
470 | "prs":[
471 |
472 | ],
473 | "personalRecords":[
474 |
475 | ]
476 | },
477 | {
478 | "id":310860066,
479 | "index":1,
480 | "indicator":"normal",
481 | "weight_kg":null,
482 | "reps":null,
483 | "distance_meters":0,
484 | "duration_seconds":2,
485 | "rpe":null,
486 | "prs":[
487 |
488 | ],
489 | "personalRecords":[
490 |
491 | ]
492 | },
493 | {
494 | "id":310860067,
495 | "index":2,
496 | "indicator":"normal",
497 | "weight_kg":null,
498 | "reps":null,
499 | "distance_meters":0,
500 | "duration_seconds":2,
501 | "rpe":null,
502 | "prs":[
503 |
504 | ],
505 | "personalRecords":[
506 |
507 | ]
508 | },
509 | {
510 | "id":310860068,
511 | "index":3,
512 | "indicator":"normal",
513 | "weight_kg":null,
514 | "reps":null,
515 | "distance_meters":0,
516 | "duration_seconds":2,
517 | "rpe":null,
518 | "prs":[
519 |
520 | ],
521 | "personalRecords":[
522 |
523 | ]
524 | },
525 | {
526 | "id":310860069,
527 | "index":4,
528 | "indicator":"normal",
529 | "weight_kg":null,
530 | "reps":null,
531 | "distance_meters":0,
532 | "duration_seconds":2,
533 | "rpe":null,
534 | "prs":[
535 |
536 | ],
537 | "personalRecords":[
538 |
539 | ]
540 | },
541 | {
542 | "id":310860070,
543 | "index":5,
544 | "indicator":"normal",
545 | "weight_kg":null,
546 | "reps":null,
547 | "distance_meters":0,
548 | "duration_seconds":2,
549 | "rpe":null,
550 | "prs":[
551 |
552 | ],
553 | "personalRecords":[
554 |
555 | ]
556 | }
557 | ]
558 | },
559 | {
560 | "id":"733d62b9-b97a-4753-a812-1d5147c4f4a0",
561 | "title":"Ab Wheel",
562 | "es_title":"Rueda Abdominal",
563 | "de_title":"Ab Wheel",
564 | "fr_title":"Roue Abdominale",
565 | "it_title":"Ruota Addominali",
566 | "pt_title":"Roda Abdominal ",
567 | "ko_title":null,
568 | "ja_title":null,
569 | "tr_title":"Ab Wheel",
570 | "ru_title":"Колесо для пресса",
571 | "zh_cn_title":"健腹轮",
572 | "zh_tw_title":"健腹輪",
573 | "superset_id":null,
574 | "rest_seconds":120,
575 | "notes":"",
576 | "exercise_template_id":"99D5F10E",
577 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/08571201-Wheel-Rollout_Waist.mp4",
578 | "exercise_type":"reps_only",
579 | "equipment_category":"other",
580 | "media_type":"video",
581 | "custom_exercise_image_url":null,
582 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/08571201-Wheel-Rollout_Waist_thumbnail@3x.jpg",
583 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/08571201-Wheel-Rollout_Waist_thumbnail@3x.jpg",
584 | "muscle_group":"abdominals",
585 | "other_muscles":[
586 |
587 | ],
588 | "priority":0,
589 | "sets":[
590 | {
591 | "id":310860071,
592 | "index":0,
593 | "indicator":"normal",
594 | "weight_kg":null,
595 | "reps":8,
596 | "distance_meters":null,
597 | "duration_seconds":null,
598 | "rpe":null,
599 | "prs":[
600 |
601 | ],
602 | "personalRecords":[
603 |
604 | ]
605 | },
606 | {
607 | "id":310860072,
608 | "index":1,
609 | "indicator":"normal",
610 | "weight_kg":null,
611 | "reps":8,
612 | "distance_meters":null,
613 | "duration_seconds":null,
614 | "rpe":null,
615 | "prs":[
616 |
617 | ],
618 | "personalRecords":[
619 |
620 | ]
621 | },
622 | {
623 | "id":310860073,
624 | "index":2,
625 | "indicator":"normal",
626 | "weight_kg":null,
627 | "reps":8,
628 | "distance_meters":null,
629 | "duration_seconds":null,
630 | "rpe":null,
631 | "prs":[
632 |
633 | ],
634 | "personalRecords":[
635 |
636 | ]
637 | },
638 | {
639 | "id":310860074,
640 | "index":3,
641 | "indicator":"normal",
642 | "weight_kg":null,
643 | "reps":8,
644 | "distance_meters":null,
645 | "duration_seconds":null,
646 | "rpe":null,
647 | "prs":[
648 |
649 | ],
650 | "personalRecords":[
651 |
652 | ]
653 | },
654 | {
655 | "id":310860075,
656 | "index":4,
657 | "indicator":"normal",
658 | "weight_kg":null,
659 | "reps":8,
660 | "distance_meters":null,
661 | "duration_seconds":null,
662 | "rpe":null,
663 | "prs":[
664 |
665 | ],
666 | "personalRecords":[
667 |
668 | ]
669 | }
670 | ]
671 | },
672 | {
673 | "id":"d5ef43f8-730e-494e-afbc-b5e65b237edc",
674 | "title":"Plank",
675 | "es_title":"Plancha",
676 | "de_title":"Plank",
677 | "fr_title":"Planche",
678 | "it_title":"Plank",
679 | "pt_title":"Prancha Abdominal",
680 | "ko_title":null,
681 | "ja_title":null,
682 | "tr_title":"Plank",
683 | "ru_title":"Планка",
684 | "zh_cn_title":"棒式",
685 | "zh_tw_title":"棒式",
686 | "superset_id":null,
687 | "rest_seconds":120,
688 | "notes":"",
689 | "exercise_template_id":"C6C9B8A0",
690 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/04631201-Front-Plank-m_waist.mp4",
691 | "exercise_type":"duration",
692 | "equipment_category":"none",
693 | "media_type":"video",
694 | "custom_exercise_image_url":null,
695 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/04631201-Front-Plank-m_waist_thumbnail@3x.jpg",
696 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/04631201-Front-Plank-m_waist_thumbnail@3x.jpg",
697 | "muscle_group":"abdominals",
698 | "other_muscles":[
699 |
700 | ],
701 | "priority":0,
702 | "sets":[
703 | {
704 | "id":310860076,
705 | "index":0,
706 | "indicator":"normal",
707 | "weight_kg":null,
708 | "reps":null,
709 | "distance_meters":null,
710 | "duration_seconds":2,
711 | "rpe":null,
712 | "prs":[
713 |
714 | ],
715 | "personalRecords":[
716 |
717 | ]
718 | },
719 | {
720 | "id":310860077,
721 | "index":1,
722 | "indicator":"normal",
723 | "weight_kg":null,
724 | "reps":null,
725 | "distance_meters":null,
726 | "duration_seconds":2,
727 | "rpe":null,
728 | "prs":[
729 |
730 | ],
731 | "personalRecords":[
732 |
733 | ]
734 | },
735 | {
736 | "id":310860078,
737 | "index":2,
738 | "indicator":"normal",
739 | "weight_kg":null,
740 | "reps":null,
741 | "distance_meters":null,
742 | "duration_seconds":2,
743 | "rpe":null,
744 | "prs":[
745 |
746 | ],
747 | "personalRecords":[
748 |
749 | ]
750 | },
751 | {
752 | "id":310860079,
753 | "index":3,
754 | "indicator":"normal",
755 | "weight_kg":null,
756 | "reps":null,
757 | "distance_meters":null,
758 | "duration_seconds":2,
759 | "rpe":null,
760 | "prs":[
761 |
762 | ],
763 | "personalRecords":[
764 |
765 | ]
766 | }
767 | ]
768 | },
769 | {
770 | "id":"927cbb1f-def5-41c1-bef9-4840bded0ac0",
771 | "title":"Side Plank",
772 | "es_title":"Plancha Lateral",
773 | "de_title":"Seitlicher Plank",
774 | "fr_title":"Planche Latérale",
775 | "it_title":"Plank Laterale",
776 | "pt_title":"Prancha Lateral",
777 | "ko_title":null,
778 | "ja_title":null,
779 | "tr_title":"Side Plank",
780 | "ru_title":"Боковая планка",
781 | "zh_cn_title":"侧棒式",
782 | "zh_tw_title":"側棒式",
783 | "superset_id":null,
784 | "rest_seconds":120,
785 | "notes":"",
786 | "exercise_template_id":"E3EDA509",
787 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/07151201-Side-Plank-m_Waist.mp4",
788 | "exercise_type":"duration",
789 | "equipment_category":"none",
790 | "media_type":"video",
791 | "custom_exercise_image_url":null,
792 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/07151201-Side-Plank-m_Waist_thumbnail@3x.jpg",
793 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/07151201-Side-Plank-m_Waist_thumbnail@3x.jpg",
794 | "muscle_group":"abdominals",
795 | "other_muscles":[
796 |
797 | ],
798 | "priority":0,
799 | "sets":[
800 | {
801 | "id":310860080,
802 | "index":0,
803 | "indicator":"normal",
804 | "weight_kg":null,
805 | "reps":null,
806 | "distance_meters":null,
807 | "duration_seconds":2,
808 | "rpe":null,
809 | "prs":[
810 |
811 | ],
812 | "personalRecords":[
813 |
814 | ]
815 | },
816 | {
817 | "id":310860081,
818 | "index":1,
819 | "indicator":"normal",
820 | "weight_kg":null,
821 | "reps":null,
822 | "distance_meters":null,
823 | "duration_seconds":2,
824 | "rpe":null,
825 | "prs":[
826 |
827 | ],
828 | "personalRecords":[
829 |
830 | ]
831 | },
832 | {
833 | "id":310860082,
834 | "index":2,
835 | "indicator":"normal",
836 | "weight_kg":null,
837 | "reps":null,
838 | "distance_meters":null,
839 | "duration_seconds":2,
840 | "rpe":null,
841 | "prs":[
842 |
843 | ],
844 | "personalRecords":[
845 |
846 | ]
847 | },
848 | {
849 | "id":310860083,
850 | "index":3,
851 | "indicator":"normal",
852 | "weight_kg":null,
853 | "reps":null,
854 | "distance_meters":null,
855 | "duration_seconds":2,
856 | "rpe":null,
857 | "prs":[
858 |
859 | ],
860 | "personalRecords":[
861 |
862 | ]
863 | }
864 | ]
865 | },
866 | {
867 | "id":"d6feaefe-916d-4b7b-9015-f58ff0551510",
868 | "title":"Sit Up",
869 | "es_title":"Sit Up",
870 | "de_title":"Rumpfbeugen",
871 | "fr_title":"Sit Up",
872 | "it_title":"Sit Up",
873 | "pt_title":"Abdominal Tradicional",
874 | "ko_title":null,
875 | "ja_title":null,
876 | "tr_title":"Mekik",
877 | "ru_title":"Приседания",
878 | "zh_cn_title":"仰卧起坐",
879 | "zh_tw_title":"仰臥起坐",
880 | "superset_id":null,
881 | "rest_seconds":120,
882 | "notes":"",
883 | "exercise_template_id":"022DF610",
884 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/00011201-3-4-Sit-up_Waist.mp4",
885 | "exercise_type":"reps_only",
886 | "equipment_category":"none",
887 | "media_type":"video",
888 | "custom_exercise_image_url":null,
889 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/00011201-3-4-Sit-up_Waist_thumbnail@3x.jpg",
890 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/00011201-3-4-Sit-up_Waist_thumbnail@3x.jpg",
891 | "muscle_group":"abdominals",
892 | "other_muscles":[
893 |
894 | ],
895 | "priority":10,
896 | "sets":[
897 | {
898 | "id":310860084,
899 | "index":0,
900 | "indicator":"normal",
901 | "weight_kg":null,
902 | "reps":20,
903 | "distance_meters":null,
904 | "duration_seconds":null,
905 | "rpe":null,
906 | "prs":[
907 |
908 | ],
909 | "personalRecords":[
910 |
911 | ]
912 | },
913 | {
914 | "id":310860085,
915 | "index":1,
916 | "indicator":"normal",
917 | "weight_kg":null,
918 | "reps":10,
919 | "distance_meters":null,
920 | "duration_seconds":null,
921 | "rpe":null,
922 | "prs":[
923 |
924 | ],
925 | "personalRecords":[
926 |
927 | ]
928 | },
929 | {
930 | "id":310860086,
931 | "index":2,
932 | "indicator":"normal",
933 | "weight_kg":null,
934 | "reps":10,
935 | "distance_meters":null,
936 | "duration_seconds":null,
937 | "rpe":null,
938 | "prs":[
939 |
940 | ],
941 | "personalRecords":[
942 |
943 | ]
944 | },
945 | {
946 | "id":310860087,
947 | "index":3,
948 | "indicator":"normal",
949 | "weight_kg":null,
950 | "reps":10,
951 | "distance_meters":null,
952 | "duration_seconds":null,
953 | "rpe":null,
954 | "prs":[
955 |
956 | ],
957 | "personalRecords":[
958 |
959 | ]
960 | }
961 | ]
962 | },
963 | {
964 | "id":"4a0362a2-f516-42f7-b1d4-a61a14a331f7",
965 | "title":"Overhead Press (Barbell)",
966 | "es_title":"Press de Hombros (Barra)",
967 | "de_title":"Schulterdrücken (Langhantel)",
968 | "fr_title":"Développé Militaire (Barre)",
969 | "it_title":"Lento in Avanti (Bilanciere)",
970 | "pt_title":"Desenvolvimento (Barra)",
971 | "ko_title":null,
972 | "ja_title":null,
973 | "tr_title":"Overhead Press (Bar)",
974 | "ru_title":"Жим над головой (Штанга)",
975 | "zh_cn_title":"肩推 (杠铃)",
976 | "zh_tw_title":"肩推 (槓鈴)",
977 | "superset_id":null,
978 | "rest_seconds":60,
979 | "notes":"",
980 | "exercise_template_id":"7B8D84E8",
981 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/11651201-Barbell-Standing-Military-Press-(without-rack)_Shoulders.mp4",
982 | "exercise_type":"weight_reps",
983 | "equipment_category":"barbell",
984 | "media_type":"video",
985 | "custom_exercise_image_url":null,
986 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/11651201-Barbell-Standing-Military-Press-(without-rack)_Shoulders_thumbnail@3x.jpg",
987 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/11651201-Barbell-Standing-Military-Press-(without-rack)_Shoulders_thumbnail@3x.jpg",
988 | "muscle_group":"shoulders",
989 | "other_muscles":[
990 | "triceps"
991 | ],
992 | "priority":10,
993 | "sets":[
994 | {
995 | "id":310860088,
996 | "index":0,
997 | "indicator":"normal",
998 | "weight_kg":40,
999 | "reps":1,
1000 | "distance_meters":null,
1001 | "duration_seconds":null,
1002 | "rpe":null,
1003 | "prs":[
1004 |
1005 | ],
1006 | "personalRecords":[
1007 |
1008 | ]
1009 | },
1010 | {
1011 | "id":310860089,
1012 | "index":1,
1013 | "indicator":"normal",
1014 | "weight_kg":40,
1015 | "reps":3,
1016 | "distance_meters":null,
1017 | "duration_seconds":null,
1018 | "rpe":null,
1019 | "prs":[
1020 |
1021 | ],
1022 | "personalRecords":[
1023 |
1024 | ]
1025 | },
1026 | {
1027 | "id":310860090,
1028 | "index":2,
1029 | "indicator":"normal",
1030 | "weight_kg":0,
1031 | "reps":1,
1032 | "distance_meters":null,
1033 | "duration_seconds":null,
1034 | "rpe":null,
1035 | "prs":[
1036 |
1037 | ],
1038 | "personalRecords":[
1039 |
1040 | ]
1041 | }
1042 | ]
1043 | }
1044 | ],
1045 | "estimated_volume_kg":160
1046 | },
1047 | {
1048 | "id":"3d08434a-4bf6-4225-a6c9-a27f91548aef",
1049 | "short_id":"1dy6oVgjf9a",
1050 | "index":13414706,
1051 | "name":"3. Chest / Upper Back",
1052 | "description":"",
1053 | "start_time":1678783435,
1054 | "end_time":1678790745,
1055 | "created_at":"2023-03-14T10:46:39.475Z",
1056 | "updated_at":"2023-03-14T10:46:39.475Z",
1057 | "routine_id":"5f02e2a3-ce97-4576-bfc8-4ca9e1ea4868",
1058 | "apple_watch":false,
1059 | "user_id":"93620a45-5bef-4a70-baab-5c1058a88046",
1060 | "username":"bitwiseshift",
1061 | "profile_image":"https://pump-app.s3.eu-west-2.amazonaws.com/profile-images/bitwiseshift-e4a12928-f0f3-4a87-adc5-99c1daae5951.jpg",
1062 | "verified":false,
1063 | "nth_workout":180,
1064 | "like_count":0,
1065 | "is_liked_by_user":false,
1066 | "like_images":[
1067 |
1068 | ],
1069 | "comments":[
1070 |
1071 | ],
1072 | "comment_count":0,
1073 | "media":[
1074 |
1075 | ],
1076 | "image_urls":[
1077 |
1078 | ],
1079 | "exercises":[
1080 | {
1081 | "id":"5c658ffd-828f-4e4c-924f-f3e320fc0a80",
1082 | "title":"Elliptical Trainer",
1083 | "es_title":"Entrenador Elíptico",
1084 | "de_title":"Crosstrainer",
1085 | "fr_title":"Vélo Elliptique",
1086 | "it_title":"Ellittica",
1087 | "pt_title":"Elíptico",
1088 | "ko_title":null,
1089 | "ja_title":null,
1090 | "tr_title":"Eliptik Bisiklet",
1091 | "ru_title":"Эллиптический тренажер",
1092 | "zh_cn_title":"椭圆机",
1093 | "zh_tw_title":"橢圓機",
1094 | "superset_id":null,
1095 | "rest_seconds":120,
1096 | "notes":"",
1097 | "exercise_template_id":"3303376C",
1098 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/21921201-Elliptical-Machine-Walk_Cardio.mp4",
1099 | "exercise_type":"distance_duration",
1100 | "equipment_category":"machine",
1101 | "media_type":"video",
1102 | "custom_exercise_image_url":null,
1103 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/21921201-Elliptical-Machine-Walk_Cardio_thumbnail@3x.jpg",
1104 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/21921201-Elliptical-Machine-Walk_Cardio_thumbnail@3x.jpg",
1105 | "muscle_group":"cardio",
1106 | "other_muscles":[
1107 |
1108 | ],
1109 | "priority":8,
1110 | "sets":[
1111 | {
1112 | "id":309117293,
1113 | "index":0,
1114 | "indicator":"normal",
1115 | "weight_kg":null,
1116 | "reps":null,
1117 | "distance_meters":0,
1118 | "duration_seconds":15,
1119 | "rpe":null,
1120 | "prs":[
1121 |
1122 | ],
1123 | "personalRecords":[
1124 |
1125 | ]
1126 | }
1127 | ]
1128 | },
1129 | {
1130 | "id":"5c8f1ca1-5575-4f7b-b734-82c9e9c9b184",
1131 | "title":"Bench Press (Barbell)",
1132 | "es_title":"Press de Banca (Barra)",
1133 | "de_title":"Bankdrücken (Langhantel)",
1134 | "fr_title":"Développé Couché (Barre)",
1135 | "it_title":"Panca Piana (Bilanciere)",
1136 | "pt_title":"Supino (Barra)",
1137 | "ko_title":null,
1138 | "ja_title":null,
1139 | "tr_title":"Bench Press (Bar)",
1140 | "ru_title":"Жим лежа (Штанга)",
1141 | "zh_cn_title":"卧推 (杠铃)",
1142 | "zh_tw_title":"平板臥推 (槓鈴)",
1143 | "superset_id":null,
1144 | "rest_seconds":120,
1145 | "notes":"",
1146 | "exercise_template_id":"79D0BB3A",
1147 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/00251201-Barbell-Bench-Press_Chest.mp4",
1148 | "exercise_type":"weight_reps",
1149 | "equipment_category":"barbell",
1150 | "media_type":"video",
1151 | "custom_exercise_image_url":null,
1152 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/00251201-Barbell-Bench-Press_Chest_thumbnail@3x.jpg",
1153 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/00251201-Barbell-Bench-Press_Chest_thumbnail@3x.jpg",
1154 | "muscle_group":"chest",
1155 | "other_muscles":[
1156 | "triceps",
1157 | "shoulders"
1158 | ],
1159 | "priority":10,
1160 | "sets":[
1161 | {
1162 | "id":309117294,
1163 | "index":0,
1164 | "indicator":"normal",
1165 | "weight_kg":60,
1166 | "reps":4,
1167 | "distance_meters":null,
1168 | "duration_seconds":null,
1169 | "rpe":null,
1170 | "prs":[
1171 |
1172 | ],
1173 | "personalRecords":[
1174 |
1175 | ]
1176 | },
1177 | {
1178 | "id":309117295,
1179 | "index":1,
1180 | "indicator":"normal",
1181 | "weight_kg":55,
1182 | "reps":8,
1183 | "distance_meters":null,
1184 | "duration_seconds":null,
1185 | "rpe":null,
1186 | "prs":[
1187 |
1188 | ],
1189 | "personalRecords":[
1190 |
1191 | ]
1192 | },
1193 | {
1194 | "id":309117296,
1195 | "index":2,
1196 | "indicator":"normal",
1197 | "weight_kg":55,
1198 | "reps":8,
1199 | "distance_meters":null,
1200 | "duration_seconds":null,
1201 | "rpe":null,
1202 | "prs":[
1203 |
1204 | ],
1205 | "personalRecords":[
1206 |
1207 | ]
1208 | },
1209 | {
1210 | "id":309117297,
1211 | "index":3,
1212 | "indicator":"normal",
1213 | "weight_kg":52.5,
1214 | "reps":8,
1215 | "distance_meters":null,
1216 | "duration_seconds":null,
1217 | "rpe":null,
1218 | "prs":[
1219 |
1220 | ],
1221 | "personalRecords":[
1222 |
1223 | ]
1224 | },
1225 | {
1226 | "id":309117298,
1227 | "index":4,
1228 | "indicator":"normal",
1229 | "weight_kg":50,
1230 | "reps":8,
1231 | "distance_meters":null,
1232 | "duration_seconds":null,
1233 | "rpe":null,
1234 | "prs":[
1235 |
1236 | ],
1237 | "personalRecords":[
1238 |
1239 | ]
1240 | },
1241 | {
1242 | "id":309117299,
1243 | "index":5,
1244 | "indicator":"normal",
1245 | "weight_kg":50,
1246 | "reps":8,
1247 | "distance_meters":null,
1248 | "duration_seconds":null,
1249 | "rpe":null,
1250 | "prs":[
1251 |
1252 | ],
1253 | "personalRecords":[
1254 |
1255 | ]
1256 | },
1257 | {
1258 | "id":309117300,
1259 | "index":6,
1260 | "indicator":"normal",
1261 | "weight_kg":60,
1262 | "reps":4,
1263 | "distance_meters":null,
1264 | "duration_seconds":null,
1265 | "rpe":null,
1266 | "prs":[
1267 |
1268 | ],
1269 | "personalRecords":[
1270 |
1271 | ]
1272 | }
1273 | ]
1274 | },
1275 | {
1276 | "id":"e5e4986f-4bbc-4572-94b7-c6eb42bd76c8",
1277 | "title":"Chest Fly (Dumbbell)",
1278 | "es_title":"Aperturas (Mancuerna)",
1279 | "de_title":"Fliegende (Kurzhantel)",
1280 | "fr_title":"Écarté (Haltère)",
1281 | "it_title":"Croci (Manubrio)",
1282 | "pt_title":"Crucifixo Reto (Halter)",
1283 | "ko_title":null,
1284 | "ja_title":null,
1285 | "tr_title":"Chest Fly (Dambıl)",
1286 | "ru_title":"Разводка (Гантель)",
1287 | "zh_cn_title":"飞鸟夹胸(哑铃)",
1288 | "zh_tw_title":"飛鳥夾胸(啞鈴)",
1289 | "superset_id":null,
1290 | "rest_seconds":120,
1291 | "notes":"",
1292 | "exercise_template_id":"12017185",
1293 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/03081201-Dumbbell-Fly_Chest.mp4",
1294 | "exercise_type":"weight_reps",
1295 | "equipment_category":"dumbbell",
1296 | "media_type":"video",
1297 | "custom_exercise_image_url":null,
1298 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/03081201-Dumbbell-Fly_Chest_thumbnail@3x.jpg",
1299 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/03081201-Dumbbell-Fly_Chest_thumbnail@3x.jpg",
1300 | "muscle_group":"chest",
1301 | "other_muscles":[
1302 |
1303 | ],
1304 | "priority":8,
1305 | "sets":[
1306 | {
1307 | "id":309117301,
1308 | "index":0,
1309 | "indicator":"normal",
1310 | "weight_kg":25,
1311 | "reps":8,
1312 | "distance_meters":null,
1313 | "duration_seconds":null,
1314 | "rpe":null,
1315 | "prs":[
1316 |
1317 | ],
1318 | "personalRecords":[
1319 |
1320 | ]
1321 | },
1322 | {
1323 | "id":309117302,
1324 | "index":1,
1325 | "indicator":"normal",
1326 | "weight_kg":30,
1327 | "reps":8,
1328 | "distance_meters":null,
1329 | "duration_seconds":null,
1330 | "rpe":null,
1331 | "prs":[
1332 |
1333 | ],
1334 | "personalRecords":[
1335 |
1336 | ]
1337 | },
1338 | {
1339 | "id":309117303,
1340 | "index":2,
1341 | "indicator":"normal",
1342 | "weight_kg":35,
1343 | "reps":8,
1344 | "distance_meters":null,
1345 | "duration_seconds":null,
1346 | "rpe":null,
1347 | "prs":[
1348 |
1349 | ],
1350 | "personalRecords":[
1351 |
1352 | ]
1353 | },
1354 | {
1355 | "id":309117304,
1356 | "index":3,
1357 | "indicator":"normal",
1358 | "weight_kg":40,
1359 | "reps":4,
1360 | "distance_meters":null,
1361 | "duration_seconds":null,
1362 | "rpe":null,
1363 | "prs":[
1364 |
1365 | ],
1366 | "personalRecords":[
1367 |
1368 | ]
1369 | },
1370 | {
1371 | "id":309117305,
1372 | "index":4,
1373 | "indicator":"normal",
1374 | "weight_kg":30,
1375 | "reps":8,
1376 | "distance_meters":null,
1377 | "duration_seconds":null,
1378 | "rpe":null,
1379 | "prs":[
1380 |
1381 | ],
1382 | "personalRecords":[
1383 |
1384 | ]
1385 | }
1386 | ]
1387 | },
1388 | {
1389 | "id":"663bd3fd-b839-4c32-8f8e-1db961589abd",
1390 | "title":"T Bar Row",
1391 | "es_title":"Remo en Punta",
1392 | "de_title":"T-Bar Rudern",
1393 | "fr_title":"Rowing Barre T",
1394 | "it_title":"Rematore T Bar",
1395 | "pt_title":"Remada na Barra T",
1396 | "ko_title":null,
1397 | "ja_title":null,
1398 | "tr_title":"T Bar Row",
1399 | "ru_title":"Тяга Т грифа",
1400 | "zh_cn_title":"T杠划船",
1401 | "zh_tw_title":"T槓划船",
1402 | "superset_id":null,
1403 | "rest_seconds":120,
1404 | "notes":"",
1405 | "exercise_template_id":"08A2974E",
1406 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/06061201-Lever-T-bar-Row-(plate-loaded)_Back.mp4",
1407 | "exercise_type":"weight_reps",
1408 | "equipment_category":"barbell",
1409 | "media_type":"video",
1410 | "custom_exercise_image_url":null,
1411 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/06061201-Lever-T-bar-Row-(plate-loaded)_Back_thumbnail@3x.jpg",
1412 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/06061201-Lever-T-bar-Row-(plate-loaded)_Back_thumbnail@3x.jpg",
1413 | "muscle_group":"upper_back",
1414 | "other_muscles":[
1415 |
1416 | ],
1417 | "priority":0,
1418 | "sets":[
1419 | {
1420 | "id":309117306,
1421 | "index":0,
1422 | "indicator":"normal",
1423 | "weight_kg":20,
1424 | "reps":8,
1425 | "distance_meters":null,
1426 | "duration_seconds":null,
1427 | "rpe":null,
1428 | "prs":[
1429 |
1430 | ],
1431 | "personalRecords":[
1432 |
1433 | ]
1434 | },
1435 | {
1436 | "id":309117307,
1437 | "index":1,
1438 | "indicator":"normal",
1439 | "weight_kg":25,
1440 | "reps":8,
1441 | "distance_meters":null,
1442 | "duration_seconds":null,
1443 | "rpe":null,
1444 | "prs":[
1445 |
1446 | ],
1447 | "personalRecords":[
1448 |
1449 | ]
1450 | },
1451 | {
1452 | "id":309117308,
1453 | "index":2,
1454 | "indicator":"normal",
1455 | "weight_kg":32.5,
1456 | "reps":8,
1457 | "distance_meters":null,
1458 | "duration_seconds":null,
1459 | "rpe":null,
1460 | "prs":[
1461 |
1462 | ],
1463 | "personalRecords":[
1464 |
1465 | ]
1466 | },
1467 | {
1468 | "id":309117309,
1469 | "index":3,
1470 | "indicator":"normal",
1471 | "weight_kg":30,
1472 | "reps":4,
1473 | "distance_meters":null,
1474 | "duration_seconds":null,
1475 | "rpe":null,
1476 | "prs":[
1477 |
1478 | ],
1479 | "personalRecords":[
1480 |
1481 | ]
1482 | }
1483 | ]
1484 | },
1485 | {
1486 | "id":"ef9182ad-9834-44cc-bad3-8ec0e1d2742f",
1487 | "title":"Lat Pulldown (Cable)",
1488 | "es_title":"Jalón al Pecho (Cable)",
1489 | "de_title":"Latzug (Kabel)",
1490 | "fr_title":"Tirage Poitrine (Poulie)",
1491 | "it_title":"Lat Pulldown (Cavo)",
1492 | "pt_title":"Puxada Alta na Polia (Máquina)",
1493 | "ko_title":null,
1494 | "ja_title":null,
1495 | "tr_title":"Lat Pulldown (Cable)",
1496 | "ru_title":"Вкртикальная тяга Широчайшими (Блок)",
1497 | "zh_cn_title":"阔背肌下拉 (滑轮机)",
1498 | "zh_tw_title":"闊背肌下拉 (滑輪機)",
1499 | "superset_id":null,
1500 | "rest_seconds":120,
1501 | "notes":"",
1502 | "exercise_template_id":"6A6C31A5",
1503 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/01501201-Cable-Bar-Lateral-Pulldown_Back.mp4",
1504 | "exercise_type":"weight_reps",
1505 | "equipment_category":"machine",
1506 | "media_type":"video",
1507 | "custom_exercise_image_url":null,
1508 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/01501201-Cable-Bar-Lateral-Pulldown_Back_thumbnail@3x.jpg",
1509 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/01501201-Cable-Bar-Lateral-Pulldown_Back_thumbnail@3x.jpg",
1510 | "muscle_group":"lats",
1511 | "other_muscles":[
1512 |
1513 | ],
1514 | "priority":10,
1515 | "sets":[
1516 | {
1517 | "id":309117310,
1518 | "index":0,
1519 | "indicator":"normal",
1520 | "weight_kg":46,
1521 | "reps":8,
1522 | "distance_meters":null,
1523 | "duration_seconds":null,
1524 | "rpe":null,
1525 | "prs":[
1526 |
1527 | ],
1528 | "personalRecords":[
1529 |
1530 | ]
1531 | },
1532 | {
1533 | "id":309117311,
1534 | "index":1,
1535 | "indicator":"normal",
1536 | "weight_kg":59,
1537 | "reps":8,
1538 | "distance_meters":null,
1539 | "duration_seconds":null,
1540 | "rpe":null,
1541 | "prs":[
1542 |
1543 | ],
1544 | "personalRecords":[
1545 |
1546 | ]
1547 | },
1548 | {
1549 | "id":309117312,
1550 | "index":2,
1551 | "indicator":"normal",
1552 | "weight_kg":64,
1553 | "reps":8,
1554 | "distance_meters":null,
1555 | "duration_seconds":null,
1556 | "rpe":null,
1557 | "prs":[
1558 |
1559 | ],
1560 | "personalRecords":[
1561 |
1562 | ]
1563 | },
1564 | {
1565 | "id":309117313,
1566 | "index":3,
1567 | "indicator":"normal",
1568 | "weight_kg":59,
1569 | "reps":6,
1570 | "distance_meters":null,
1571 | "duration_seconds":null,
1572 | "rpe":null,
1573 | "prs":[
1574 |
1575 | ],
1576 | "personalRecords":[
1577 |
1578 | ]
1579 | }
1580 | ]
1581 | },
1582 | {
1583 | "id":"47190c24-1cb2-47f6-9c35-eb7ebe253d51",
1584 | "title":"Seated Cable Row",
1585 | "es_title":"Remo Sentado con Cable",
1586 | "de_title":"Rudern am Kabel sitzend",
1587 | "fr_title":"Rowing Poulie Assis",
1588 | "it_title":"Rematore al Cavo da Seduto",
1589 | "pt_title":"Remada (Corda) Sentado",
1590 | "ko_title":null,
1591 | "ja_title":null,
1592 | "tr_title":"Oturarak Cable Row",
1593 | "ru_title":"Горизонтальная тяга блока",
1594 | "zh_cn_title":"坐式滑轮划船",
1595 | "zh_tw_title":"坐式滑輪划船",
1596 | "superset_id":null,
1597 | "rest_seconds":90,
1598 | "notes":"",
1599 | "exercise_template_id":"F1D60854",
1600 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/01801201-Cable-Low-Seated-Row_Back.mp4",
1601 | "exercise_type":"weight_reps",
1602 | "equipment_category":"machine",
1603 | "media_type":"video",
1604 | "custom_exercise_image_url":null,
1605 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/01801201-Cable-Low-Seated-Row_Back_thumbnail@3x.jpg",
1606 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/01801201-Cable-Low-Seated-Row_Back_thumbnail@3x.jpg",
1607 | "muscle_group":"upper_back",
1608 | "other_muscles":[
1609 |
1610 | ],
1611 | "priority":10,
1612 | "sets":[
1613 | {
1614 | "id":309117314,
1615 | "index":0,
1616 | "indicator":"normal",
1617 | "weight_kg":91,
1618 | "reps":8,
1619 | "distance_meters":null,
1620 | "duration_seconds":null,
1621 | "rpe":null,
1622 | "prs":[
1623 |
1624 | ],
1625 | "personalRecords":[
1626 |
1627 | ]
1628 | },
1629 | {
1630 | "id":309117315,
1631 | "index":1,
1632 | "indicator":"normal",
1633 | "weight_kg":64,
1634 | "reps":8,
1635 | "distance_meters":null,
1636 | "duration_seconds":null,
1637 | "rpe":null,
1638 | "prs":[
1639 |
1640 | ],
1641 | "personalRecords":[
1642 |
1643 | ]
1644 | },
1645 | {
1646 | "id":309117316,
1647 | "index":2,
1648 | "indicator":"normal",
1649 | "weight_kg":64,
1650 | "reps":8,
1651 | "distance_meters":null,
1652 | "duration_seconds":null,
1653 | "rpe":null,
1654 | "prs":[
1655 |
1656 | ],
1657 | "personalRecords":[
1658 |
1659 | ]
1660 | },
1661 | {
1662 | "id":309117317,
1663 | "index":3,
1664 | "indicator":"normal",
1665 | "weight_kg":64,
1666 | "reps":8,
1667 | "distance_meters":null,
1668 | "duration_seconds":null,
1669 | "rpe":null,
1670 | "prs":[
1671 |
1672 | ],
1673 | "personalRecords":[
1674 |
1675 | ]
1676 | },
1677 | {
1678 | "id":309117318,
1679 | "index":4,
1680 | "indicator":"normal",
1681 | "weight_kg":64,
1682 | "reps":8,
1683 | "distance_meters":null,
1684 | "duration_seconds":null,
1685 | "rpe":null,
1686 | "prs":[
1687 |
1688 | ],
1689 | "personalRecords":[
1690 |
1691 | ]
1692 | },
1693 | {
1694 | "id":309117319,
1695 | "index":5,
1696 | "indicator":"normal",
1697 | "weight_kg":59,
1698 | "reps":8,
1699 | "distance_meters":null,
1700 | "duration_seconds":null,
1701 | "rpe":null,
1702 | "prs":[
1703 |
1704 | ],
1705 | "personalRecords":[
1706 |
1707 | ]
1708 | },
1709 | {
1710 | "id":309117320,
1711 | "index":6,
1712 | "indicator":"normal",
1713 | "weight_kg":59,
1714 | "reps":8,
1715 | "distance_meters":null,
1716 | "duration_seconds":null,
1717 | "rpe":null,
1718 | "prs":[
1719 |
1720 | ],
1721 | "personalRecords":[
1722 |
1723 | ]
1724 | },
1725 | {
1726 | "id":309117321,
1727 | "index":7,
1728 | "indicator":"normal",
1729 | "weight_kg":59,
1730 | "reps":8,
1731 | "distance_meters":null,
1732 | "duration_seconds":null,
1733 | "rpe":null,
1734 | "prs":[
1735 |
1736 | ],
1737 | "personalRecords":[
1738 |
1739 | ]
1740 | },
1741 | {
1742 | "id":309117322,
1743 | "index":8,
1744 | "indicator":"normal",
1745 | "weight_kg":59,
1746 | "reps":8,
1747 | "distance_meters":null,
1748 | "duration_seconds":null,
1749 | "rpe":null,
1750 | "prs":[
1751 |
1752 | ],
1753 | "personalRecords":[
1754 |
1755 | ]
1756 | },
1757 | {
1758 | "id":309117323,
1759 | "index":9,
1760 | "indicator":"normal",
1761 | "weight_kg":59,
1762 | "reps":8,
1763 | "distance_meters":null,
1764 | "duration_seconds":null,
1765 | "rpe":null,
1766 | "prs":[
1767 |
1768 | ],
1769 | "personalRecords":[
1770 |
1771 | ]
1772 | },
1773 | {
1774 | "id":309117324,
1775 | "index":10,
1776 | "indicator":"normal",
1777 | "weight_kg":59,
1778 | "reps":8,
1779 | "distance_meters":null,
1780 | "duration_seconds":null,
1781 | "rpe":null,
1782 | "prs":[
1783 |
1784 | ],
1785 | "personalRecords":[
1786 |
1787 | ]
1788 | }
1789 | ]
1790 | },
1791 | {
1792 | "id":"b4d22fcb-feea-4cc5-8d14-f33e145a84f7",
1793 | "title":"Decline Crunch",
1794 | "es_title":"Abdominal Corto en Banco Inclinado",
1795 | "de_title":"Negativer Crunch",
1796 | "fr_title":"Crunch Décliné",
1797 | "it_title":"Crunch Declinato",
1798 | "pt_title":"Abdominal Declinado",
1799 | "ko_title":null,
1800 | "ja_title":null,
1801 | "tr_title":"Eğik Sehpada Yarım Mekik",
1802 | "ru_title":"Скручивание в наклоне",
1803 | "zh_cn_title":"斜板卷腹",
1804 | "zh_tw_title":"斜板捲腹",
1805 | "superset_id":null,
1806 | "rest_seconds":60,
1807 | "notes":"",
1808 | "exercise_template_id":"BC10A922",
1809 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/02771201-Decline-Crunch_Waist.mp4",
1810 | "exercise_type":"reps_only",
1811 | "equipment_category":"none",
1812 | "media_type":"video",
1813 | "custom_exercise_image_url":null,
1814 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/02771201-Decline-Crunch_Waist_thumbnail@3x.jpg",
1815 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/02771201-Decline-Crunch_Waist_thumbnail@3x.jpg",
1816 | "muscle_group":"abdominals",
1817 | "other_muscles":[
1818 |
1819 | ],
1820 | "priority":9,
1821 | "sets":[
1822 | {
1823 | "id":309117325,
1824 | "index":0,
1825 | "indicator":"normal",
1826 | "weight_kg":null,
1827 | "reps":16,
1828 | "distance_meters":null,
1829 | "duration_seconds":null,
1830 | "rpe":null,
1831 | "prs":[
1832 |
1833 | ],
1834 | "personalRecords":[
1835 |
1836 | ]
1837 | },
1838 | {
1839 | "id":309117326,
1840 | "index":1,
1841 | "indicator":"normal",
1842 | "weight_kg":null,
1843 | "reps":8,
1844 | "distance_meters":null,
1845 | "duration_seconds":null,
1846 | "rpe":null,
1847 | "prs":[
1848 |
1849 | ],
1850 | "personalRecords":[
1851 |
1852 | ]
1853 | },
1854 | {
1855 | "id":309117327,
1856 | "index":2,
1857 | "indicator":"normal",
1858 | "weight_kg":null,
1859 | "reps":8,
1860 | "distance_meters":null,
1861 | "duration_seconds":null,
1862 | "rpe":null,
1863 | "prs":[
1864 |
1865 | ],
1866 | "personalRecords":[
1867 |
1868 | ]
1869 | }
1870 | ]
1871 | },
1872 | {
1873 | "id":"507345da-8c4e-4cef-8ea1-9a129928f53b",
1874 | "title":"Lying Leg Raise",
1875 | "es_title":"Levantamiento de Piernas Tumbado",
1876 | "de_title":"Liegendes Beinheben",
1877 | "fr_title":"Relevé de Jambes Allongé",
1878 | "it_title":"Leg Raise Sdraiato",
1879 | "pt_title":"Elevação De Pernas (Deitado)",
1880 | "ko_title":null,
1881 | "ja_title":null,
1882 | "tr_title":"Çakı Hareketi",
1883 | "ru_title":"Подъем ног лежа",
1884 | "zh_cn_title":"躺式抬腿",
1885 | "zh_tw_title":"躺式抬腿",
1886 | "superset_id":null,
1887 | "rest_seconds":120,
1888 | "notes":"",
1889 | "exercise_template_id":"09C9F635",
1890 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/11631201-Lying-Leg-Raise_Waist.mp4",
1891 | "exercise_type":"reps_only",
1892 | "equipment_category":"none",
1893 | "media_type":"video",
1894 | "custom_exercise_image_url":null,
1895 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/11631201-Lying-Leg-Raise_Waist_thumbnail@3x.jpg",
1896 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/11631201-Lying-Leg-Raise_Waist_thumbnail@3x.jpg",
1897 | "muscle_group":"abdominals",
1898 | "other_muscles":[
1899 |
1900 | ],
1901 | "priority":8,
1902 | "sets":[
1903 | {
1904 | "id":309117328,
1905 | "index":0,
1906 | "indicator":"normal",
1907 | "weight_kg":null,
1908 | "reps":8,
1909 | "distance_meters":null,
1910 | "duration_seconds":null,
1911 | "rpe":null,
1912 | "prs":[
1913 |
1914 | ],
1915 | "personalRecords":[
1916 |
1917 | ]
1918 | },
1919 | {
1920 | "id":309117329,
1921 | "index":1,
1922 | "indicator":"normal",
1923 | "weight_kg":null,
1924 | "reps":8,
1925 | "distance_meters":null,
1926 | "duration_seconds":null,
1927 | "rpe":null,
1928 | "prs":[
1929 |
1930 | ],
1931 | "personalRecords":[
1932 |
1933 | ]
1934 | },
1935 | {
1936 | "id":309117330,
1937 | "index":2,
1938 | "indicator":"normal",
1939 | "weight_kg":null,
1940 | "reps":8,
1941 | "distance_meters":null,
1942 | "duration_seconds":null,
1943 | "rpe":null,
1944 | "prs":[
1945 |
1946 | ],
1947 | "personalRecords":[
1948 |
1949 | ]
1950 | },
1951 | {
1952 | "id":309117331,
1953 | "index":3,
1954 | "indicator":"normal",
1955 | "weight_kg":null,
1956 | "reps":8,
1957 | "distance_meters":null,
1958 | "duration_seconds":null,
1959 | "rpe":null,
1960 | "prs":[
1961 |
1962 | ],
1963 | "personalRecords":[
1964 |
1965 | ]
1966 | }
1967 | ]
1968 | },
1969 | {
1970 | "id":"e3e03735-8dd4-4949-b1db-cc18267e3b4c",
1971 | "title":"Hanging Leg Raise",
1972 | "es_title":"Levantamiento de Piernas en Barra",
1973 | "de_title":"Beinheben hängend",
1974 | "fr_title":"Relevé de Jambes Suspendu",
1975 | "it_title":"Leg Raise Appeso",
1976 | "pt_title":"Elevação De Pernas Na Barra Fixa",
1977 | "ko_title":null,
1978 | "ja_title":null,
1979 | "tr_title":"Hanging Leg Raise",
1980 | "ru_title":"Подъем ног в висе",
1981 | "zh_cn_title":"单杠曲腿上举",
1982 | "zh_tw_title":"單槓曲腿上舉",
1983 | "superset_id":null,
1984 | "rest_seconds":120,
1985 | "notes":"",
1986 | "exercise_template_id":"F8356514",
1987 | "url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-assets/17641201-Hanging-Leg-Hip-Raise_Waist.mp4",
1988 | "exercise_type":"reps_only",
1989 | "equipment_category":"none",
1990 | "media_type":"video",
1991 | "custom_exercise_image_url":null,
1992 | "custom_exercise_image_thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/17641201-Hanging-Leg-Hip-Raise_Waist_thumbnail@3x.jpg",
1993 | "thumbnail_url":"https://pump-app.s3.eu-west-2.amazonaws.com/exercise-thumbnails/17641201-Hanging-Leg-Hip-Raise_Waist_thumbnail@3x.jpg",
1994 | "muscle_group":"abdominals",
1995 | "other_muscles":[
1996 |
1997 | ],
1998 | "priority":0,
1999 | "sets":[
2000 | {
2001 | "id":309117332,
2002 | "index":0,
2003 | "indicator":"normal",
2004 | "weight_kg":null,
2005 | "reps":8,
2006 | "distance_meters":null,
2007 | "duration_seconds":null,
2008 | "rpe":null,
2009 | "prs":[
2010 |
2011 | ],
2012 | "personalRecords":[
2013 |
2014 | ]
2015 | },
2016 | {
2017 | "id":309117333,
2018 | "index":1,
2019 | "indicator":"normal",
2020 | "weight_kg":null,
2021 | "reps":7,
2022 | "distance_meters":null,
2023 | "duration_seconds":null,
2024 | "rpe":null,
2025 | "prs":[
2026 |
2027 | ],
2028 | "personalRecords":[
2029 |
2030 | ]
2031 | },
2032 | {
2033 | "id":309117334,
2034 | "index":2,
2035 | "indicator":"normal",
2036 | "weight_kg":null,
2037 | "reps":6,
2038 | "distance_meters":null,
2039 | "duration_seconds":null,
2040 | "rpe":null,
2041 | "prs":[
2042 |
2043 | ],
2044 | "personalRecords":[
2045 |
2046 | ]
2047 | }
2048 | ]
2049 | }
2050 | ],
2051 | "estimated_volume_kg":11754
2052 | }
2053 | ]
2054 | }
2055 | ```
--------------------------------------------------------------------------------