Pace targets lost in Garmin export for API-created running workouts — steps arrive on watch as "No Target" (parsed correctly in workout_doc)

Pace targets on running workout steps are being lost somewhere in the Intervals.icu → Garmin Connect export path. We’ve verified every link we can reach, and the data is correct on the Intervals.icu side — this looks like an export issue, not a syntax issue.

Setup

  • Workouts created via the API: POST /api/v1/athlete/0/events/bulk?upsert=true, category: WORKOUT, type: Run, description in the plain-text workout format, external_id set
  • Athlete settings: garmin_pace_range = 2.5 (default), Garmin Connect linked with “Upload planned workouts” enabled
  • Watch: Garmin Forerunner [model 165] — happy to provide exact model/firmware

Description format used (sample):

- 2.5km 5:57-5:23/km Pace

- 1.5km 9:06-8:14/km Pace

- 2km 6:13-5:37/km Pace

What works (verified via the API):

Reading the event back, workout_doc.steps is parsed perfectly — every step carries a structured pace range:

{"pace":{"start":357,"end":323,"units":"secs/km"},"distance":2500,"duration":848}

21/21 steps have pace: {start, end} on the real workout in question.

What fails:

The workout reaches Garmin Connect (name + description arrive; the Connect app shows the description). On the watch, the steps arrive with correct distances but every step shows “No Target” — no pace target, no alerts during the workout.

What we’ve ruled out:

  • Syntax: both single-value (5:40/km Pace) and range (5:45-5:35/km Pace) formats parse into correct workout_doc pace objects; both arrive on the watch as “No Target”
  • Stale Garmin cache: deleting the events and re-creating them fresh (to force a full re-export rather than an update) changes nothing
  • Connect app display quirk (the [SOLVED] thread #87358): this is on the watch itself, in the step list and during execution, not just the phone UI

Possibly related: #130238 (Syncing Pace & HR targets to Garmin), #130465 (pace range shows as note only on Fenix 7), and a Garmin-forum thread reporting that externally-generated running workouts lose pace targets while HR targets survive (garmin forums, thread 438551).

Is the pace target being dropped when building the FIT/push payload for run workouts, or is Garmin’s import discarding it? Happy to run any diagnostic — we can reproduce this on demand via the API and have a race tomorrow that would love its targets back. :slightly_smiling_face:

Solved — and the cause was on our end, not intervals’. The athlete simply had no Run threshold pace set in their sport settings.

With threshold_pace unset, intervals drops the per-step pace targets from the Garmin export (it falls back to HR), so every step lands as “No Target” on the watch — even though workout_doc.steps carried correct pace ranges on the intervals side the whole time. HR-target workouts were unaffected because LTHR was set, which is why only pace workouts broke.

Fix: set a Run threshold pace — Settings → sport settings, or via API: PUT /api/v1/athlete/0/sport-settings/{runGroupId} with body { “threshold_pace”: <m/s> }. intervals then auto-populates the pace zones, and after a fresh push the pace targets appear on the watch (confirmed on a Garmin Forerunner).

One gotcha for anyone re-testing: existing events need a delete + recreate to re-trigger the Garmin export — an in-place update alone doesn’t.

Big thanks to R2Tom and MedTechCD — the “Did you setup your Pace zones?” pointer in the related threads was exactly it.