> For the complete documentation index, see [llms.txt](https://docs.tryterra.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tryterra.co/planned-workouts-api/exercise-reference.md).

# Exercise Reference

### Overview

For strength training workouts on Garmin, exercise names are matched against Garmin's catalog of 1,600+ exercises. This enables proper categorization and display on the device.

Garmin only accepts exercise names when the workout's `sport` is `strength`, `cardio`, `yoga` or `pilates`. On any other sport the exercise name and weight are dropped, and no coercion warning is returned.

For all other devices where custom names are supported, exercise names:

1. Are title cased
2. Get underscores "\_" converted to spaces " "

### Name Flexibility

Garmin exercise name lookup is **flexible**. All of these work:

| Input                   | Normalized              | Garmin      | Hevy                              |
| ----------------------- | ----------------------- | ----------- | --------------------------------- |
| "BARBELL\_BENCH\_PRESS" | BARBELL\_BENCH\_PRESS   | ✓ Found     | ✓ Bench Press (Barbell)           |
| "barbell\_bench\_press" | BARBELL\_BENCH\_PRESS   | ✓ Found     | ✓ Bench Press (Barbell)           |
| "Barbell Bench Press"   | BARBELL\_BENCH\_PRESS   | ✓ Found     | ✓ Bench Press (Barbell)           |
| "barbell bench press"   | BARBELL\_BENCH\_PRESS   | ✓ Found     | ✓ Bench Press (Barbell)           |
| "Bench Press (Barbell)" | BENCH\_PRESS\_(BARBELL) | ✗ Not found | ✓ Bench Press (Barbell)           |
| "Bench Press"           | BENCH\_PRESS            | ✗ Not found | ✓ Bench Press (Barbell) via alias |
| "My Custom Exercise"    | MY\_CUSTOM\_EXERCISE    | ✗ Not found | ✗ → Custom exercise created       |

**Normalization process:**

1. Replace spaces with underscores
2. Convert to UPPERCASE
3. Look up in exercise catalog

Hevy resolves the name in this order:

1. Normalized name in the exercise catalog, where it carries a Hevy template
2. Exact Hevy display name (e.g. Squat (Barbell)) or short alias (e.g. Bench Press → Bench Press (Barbell))
3. No match: a custom exercise is created

Step 2 is an exact match, so case and punctuation must match Hevy's display name.

### What Happens If Not Found

Garmin:

* ⚠️ Coercion warning returned
* Exercise name and category omitted from Garmin workout
* Weight data preserved
* Step still created

Hevy:

* Custom exercise template created automatically on the user's Hevy account
* Muscle group and equipment inferred from the name where possible
* ⚠️ Coercion warning returned if the custom exercise cannot be created, for example when the account's custom exercise limit is reached
* In that case the exercise is left out of the routine. Unlike Garmin, the step is not created

Suunto, TrainingPeaks, COROS and Zepp show the name as Title Case With Spaces Instead Of Underscores, regardless of input format. Wahoo and Huawei have no per-exercise name field, so the name is dropped. Intervals.icu is read only for planned workouts, so nothing is pushed to it.

### What Comes Back On The List

`GET /v2/plannedWorkouts` returns both the workouts you created through Terra and the ones the athlete created on the provider, each with the full `workout` body.

* Workouts you created through Terra return `strength.exercise_name` exactly as you sent it
* Workouts created on Garmin return `strength.exercise_name` in Title Case, for example `Barbell Bench Press`, not the `BARBELL_BENCH_PRESS` form used below. Normalize it the same way (spaces to underscores, UPPERCASE) to match it against the catalog

### Common Exercises by Category

#### BENCH\_PRESS

```
BARBELL_BENCH_PRESS
DUMBBELL_BENCH_PRESS
INCLINE_BARBELL_BENCH_PRESS
INCLINE_DUMBBELL_BENCH_PRESS
DECLINE_DUMBBELL_BENCH_PRESS
CLOSE_GRIP_BARBELL_BENCH_PRESS
```

#### SQUAT

```
BARBELL_BACK_SQUAT
BARBELL_FRONT_SQUAT
GOBLET_SQUAT
DUMBBELL_SQUAT
SUMO_SQUAT
AIR_SQUAT
```

#### DEADLIFT

```
BARBELL_DEADLIFT
ROMANIAN_DEADLIFT
SUMO_DEADLIFT
SINGLE_LEG_BARBELL_DEADLIFT
DUMBBELL_DEADLIFT
```

#### ROW

```
BENT_OVER_ROW_WITH_BARBELL
BARBELL_ROW
DUMBBELL_ROW
ONE_ARM_BENT_OVER_ROW
CABLE_ROW_STANDING
SEATED_CABLE_ROW
```

#### SHOULDER\_PRESS

```
OVERHEAD_BARBELL_PRESS
BARBELL_SHOULDER_PRESS
DUMBBELL_SHOULDER_PRESS
ARNOLD_PRESS
MILITARY_PRESS
BARBELL_PUSH_PRESS
```

#### CURL

```
BARBELL_BICEPS_CURL
DUMBBELL_BICEPS_CURL
DUMBBELL_HAMMER_CURL
EZ_BAR_PREACHER_CURL
ONE_ARM_CONCENTRATION_CURL
CABLE_BICEPS_CURL
```

#### TRICEPS\_EXTENSION

```
TRICEPS_PRESSDOWN
ROPE_PRESSDOWN
LYING_EZ_BAR_TRICEPS_EXTENSION
OVERHEAD_DUMBBELL_TRICEPS_EXTENSION
CABLE_LYING_TRICEPS_EXTENSION
```

#### PLANK

```
STRAIGHT_ARM_PLANK
SIDE_PLANK
PLANK_WITH_ARM_RAISE
PLANK_WITH_LEG_LIFT
WEIGHTED_PLANK
```

#### LUNGE

```
WALKING_LUNGE
BARBELL_LUNGE
DUMBBELL_LUNGE
BARBELL_REVERSE_LUNGE
DUMBBELL_REVERSE_LUNGE
SIDE_LUNGE
```

#### PULL\_UP

```
PULL_UP
CHIN_UP
WIDE_GRIP_PULL_UP
CLOSE_GRIP_CHIN_UP
BAND_ASSISTED_PULL_UP
WEIGHTED_PULL_UP
```

### Full Reference

For the complete list of 1,600+ exercises organized by category, see the full reference in the next section

### Usage Example

```json
{
  "name": "Push Day",
  "sport": "strength",
  "step_blocks": [
    {
      "completion_condition": { "type": "reps", "value": 4 },
      "steps": [{
        "completion_condition": { "type": "reps", "value": 8 },
        "intensity_type": "active",
        "strength": {
          "exercise_name": "barbell bench press",
          "weight": 80,
          "weight_display_unit": "kg"
        }
      }]
    },
    {
      "completion_condition": { "type": "reps", "value": 3 },
      "steps": [{
        "completion_condition": { "type": "reps", "value": 10 },
        "intensity_type": "active",
        "strength": {
          "exercise_name": "DUMBBELL_SHOULDER_PRESS",
          "weight": 25,
          "weight_display_unit": "kg"
        }
      }]
    }
  ]
}
```

### Tips

1. **Search the full reference** - Use Ctrl+F to find exercises
2. **Try common variations** - If one name fails, try another
3. **Check coercion warnings** - They tell you if lookup failed
4. **Use descriptive fallbacks** - Suunto, TrainingPeaks, COROS and Zepp show your text in Title Case
