Connect Strava, Garmin, Wahoo and WHOOP: what syncs where
The Moveee team
Free coaching · a real route for every ride
Short version: Strava is the connection that does the work today. Rides come in from it, Indoor rides go back out to it, and if your Garmin or Wahoo unit already uploads to Strava you are covered without connecting anything else. WHOOP syncs recovery, sleep and strain in. Garmin, Wahoo and Hammerhead have connect flows built into the app, but two of the three are waiting on the provider before they light up, and this post says so rather than pretending otherwise.
Everything below lives on one page: Account → Integrations. Each service is a card with a badge on the right, and the badge is honest — a green "Connected" means the token is alive and the last sync time is printed underneath, a grey "Not connected" means you can connect right now, and anything else means we are waiting on the provider, not on you.
What syncs where, in one table
| Service | Into Moveee | Out of Moveee | Status |
|---|---|---|---|
| Strava | Rides, power and heart-rate streams, GPS tracks, profile weight and FTP | Indoor rides, with the workout description | Live |
| WHOOP | Recovery score, HRV, resting and average HR, day strain, sleep, body weight | Nothing (a recovery wearable takes no workouts) | Connectable once WHOOP's API access is granted |
| Hammerhead Karoo | A record that a ride happened (summary only, for now) | Routes and structured workouts | Connectable once Hammerhead's API access is granted |
| Wahoo ELEMNT / RIVAL | Nothing directly — your rides arrive via Strava | Structured workouts, once Wahoo enables the app | Built, waiting on Wahoo |
| Garmin Connect | Designed for full rides with 1 Hz samples | Designed for workouts and courses | Built, waiting on Garmin's developer programme |
| Zwift / MyWhoosh | Nothing | Workouts as .ZWO files | Works by file, not by API |
Strava: the one to connect first
You can sign in with "Continue with Strava" or connect it later from the Integrations page; either way it is a standard OAuth handshake on Strava's site, and Moveee never sees your Strava password. Strava's own documentation describes the scopes an app asks for, and three of them matter here.
- "View data about your activities" (activity:read_all). Without it Strava only hands over rides you have marked public. The Integrations card warns you in orange when this is the case — "Only your public rides are syncing" — and offers a one-click reconnect. This is the most common reason a rider's calendar looks half-empty.
- Upload activities (activity:write). This is what lets Moveee post an Indoor ride back to your Strava feed as a virtual ride, with the workout's description attached. Rides you record elsewhere are never touched.
- Profile details (profile:read_all). Reads weight and FTP from your Strava profile so your Power Profile has something to start from before any rides are analysed.
The first connect is deliberately two-speed. Moveee pulls your most recent rides quickly, opens the plan wizard as soon as those are analysed, and then walks the rest of your history in the background. After that, new rides arrive by webhook: Strava tells Moveee the moment an activity is uploaded, and the ride is imported without you doing anything. There is also a "Sync now" button, which re-walks your whole history and refreshes edits you have made on Strava — renamed rides, commute or race tags — since the automatic sync only ever adds what is new.
One limit is worth knowing. Strava's API budget is shared by the whole app, not per rider, so when it is exhausted an import waits for the next fifteen-minute window and tries again rather than failing. Disconnecting Strava keeps every ride already imported; it only stops new ones.
Garmin and Wahoo: read this before you look for the button
Both cards are on the page and both connect flows exist, but neither works yet, for different reasons.
- Garmin Connect. The integration is built to Garmin's published Activity API and OAuth2 PKCE spec, and is designed to import the full sample stream — per-second power, heart rate, cadence and a dense GPS track — so a Garmin-only rider would get the complete picture without Strava. But access requires approval into Garmin's developer programme, and that programme paused new applications in mid-2026. Until it reopens the card reads "Coming soon", and the honest workaround is the one most riders already use: let Garmin Connect auto-upload to Strava and let Moveee import from there. You lose nothing on the ride itself; Strava's streams are what the Power Profile is built on today.
- Wahoo. Registration on Wahoo's developer portal is self-serve, so the flow is complete and the card will show "Connect" the moment the keys are in place. What it will do is push structured workouts to an ELEMNT or RIVAL. What it will not do is pull rides: Wahoo devices upload to Strava, and that is the path rides take into Moveee. The card says exactly this once connected — workout push "lights up as Wahoo enables Moveee's API access".
Hammerhead Karoo: routes and workouts out, a heartbeat in
The Karoo connection is the most complete of the head-unit integrations. Once connected, Moveee can send a saved route or a structured workout straight to the unit through Hammerhead's API, and the Karoo tells Moveee when a ride has synced. In the current version that inbound message records a summary — name, duration, distance, when — and lights up "last synced" on the card. Turning those summaries into full Moveee rides with power and GPS is built on the same import plumbing as Garmin and lands with it. So for now: routes and workouts go out to the Karoo, and the ride itself still comes in through Strava.
WHOOP: recovery in, and what Moveee does with it
WHOOP is in a different group on the page — recovery and sleep wearables — because it takes no workouts and sends health data in. On connect, Moveee backfills your history and then keeps up by webhook and a recurring poll; the card shows "last synced" and offers a manual "Sync now" that is capped at two a day, because WHOOP keeps revising a day's scores for hours and the automatic sync already re-reads the last few days each time.
What arrives: the recovery score and its colour band, HRV as RMSSD, resting heart rate, average heart rate across the day, day strain, hours asleep and sleep performance, and your current weight, which updates the W/kg figures on your Power Profile. It all renders on the Health tab of Performance, day by day, using WHOOP's own bands — green from 67, amber from 34 to 66, red at 33 and below — as WHOOP's developer documentation defines them.
Now the honest part. As of today the training plan does not read WHOOP. The adaptive engine re-tunes your plan from the rides you actually did and from the check-in answers you give it, not from this morning's recovery score. Consuming readiness in the plan is on the list, and the data is being stored with exactly that in mind, but if you see a red recovery and a hard session on the same day, the app is not going to move it for you yet. That is a deliberate omission rather than a bug; the evidence that HRV-guided prescription beats a fixed plan is real but modest — Kiviniemi and colleagues found a small advantage in runners, and Javaloyes' cycling trial found the HRV-guided group improved peak power and 40-minute time-trial performance where the fixed-plan group did not — and we would rather wire it in carefully than bolt it on. On the measurement side, Bellenger and colleagues found wrist-based optical HRV agrees well with a chest strap at rest, which is the condition WHOOP's overnight numbers are taken in.
Zwift and MyWhoosh: files, not APIs
Neither platform offers a public API for workouts, so the "integration" is a file. Every Moveee workout can be downloaded as a .ZWO. In Chrome or Edge on a desktop, the Zwift card lets you pick your Zwift folder once, after which Moveee writes new workouts directly into Workouts/<your Zwift ID>, with an optional toggle to auto-add every new session. Other browsers get the download and a path to drop it in. MyWhoosh has no workouts folder on disk, so the card walks you through its web Workout Builder instead. Full details are in exporting workouts as .ZWO and .FIT.
The ones that say "coming soon"
TrainingPeaks, Intervals.icu, Ride with GPS, Suunto, iGPSPORT, Oura and Apple Health are all listed on the page with their status, and none is connectable today. TrainingPeaks has the flow built but is not taking new partners; Apple Health has no web API at all, so it needs a native iOS app before anything can sync.
A sensible setup for most riders
- Connect Strava with all three permissions ticked. If you use a Garmin, Wahoo or Karoo, let it upload to Strava as it already does.
- If you own a WHOOP, connect it and check the Health tab for a week before drawing conclusions — it needs a baseline.
- If you ride indoors on Zwift, connect the folder once from Chrome or Edge and forget about it.
- Check the Integrations page after any password change or app revocation. A dead token shows in red with a reconnect link; it will not fail silently.
Once the rides are flowing, the rest of the app takes over: the Indoor-to-Strava path, the calendar's planned-versus-actual matching, and the Fitness and Form chart all run off the same imported rides.
Sources 8
Where this article summarises a study, the study itself is linked — not a write-up of it.
- 1 Strava API reference · Strava Developers · 2026
- 2 Garmin Connect Developer Program overview · Garmin Developers · 2026
- 3 Wahoo Cloud API developer portal · Wahoo Fitness · 2026
- 4 Hammerhead API documentation · Hammerhead · 2026
- 5 WHOOP developer documentation: recovery · WHOOP · 2026
- 6 Javaloyes A, Sarabia JM, Lamberts RP, Moya-Ramon M Training Prescription Guided by Heart-Rate Variability in Cycling · International Journal of Sports Physiology and Performance · 2019
- 7 Kiviniemi AM, Hautala AJ, Kinnunen H, Tulppo MP Endurance training guided individually by daily heart rate variability measurements · European Journal of Applied Physiology · 2007
- 8 Bellenger CR, Miller DJ, Halson SL, Roach GD, Sargent C Wrist-Based Photoplethysmography Assessment of Heart Rate and Heart Rate Variability: Validation of WHOOP · Sensors · 2021
Your own roads, indoors, in a browser tab
Moveee Indoor pairs your smart trainer over Bluetooth and rebuilds a route you have saved as a 3D road — real gradients, ERG for the intervals, and the ride saved with full power data. Nothing to install. Free while it is in alpha.
Start an indoor rideKeep reading
Power Profile explained: how Moveee places you from sprinter to diesel
Where every number on the Power Profile page comes from: the 3–30 minute Critical Power fit, estimated FTP, thresholds and FatMax, the VO2max regression, the Power Index spider, glitch nets, and lab test uploads.
Planned vs actual: reading your Moveee calendar after a week of riding
How to read the week banners, the day cells and the four ride verdicts, how a ride is matched to a session, what the check-in does, and the honest gaps: no missed state, and verdicts only on the ride page.
The check-in emails, and what your answers do (and don't) change
Seven check-in emails, three questions, a 30-day pause when you answer, and a clear line: the survey is read by a person and never edits your plan. The post-ride check-in is the one that does.
What happens after a hard ride: how an adaptive plan eases your next day
The evening re-tune, step by step: the verdict on your ride, the deviation number, the window it edits, what gets eased and by how much, the card with Undo, and what the adaptive plan does not do.
How Moveee builds your training plan: what the wizard asks and why
A walk through the plan wizard, question by question: what each answer changes in the engine, how the weekly load budget is set, where hard days land, and what the wizard does not ask.
From Free to Pro: what changes in your plan the day you upgrade
What Free includes, how the 14-day adaptive trial works, and exactly what switches on when you go Pro: adaptation resumes, the coach unlocks, the caps lift. Nothing is rebuilt.
Blocked dates: telling your plan about the week you can't train
How to block a day on the calendar, what the engine does with its share of the week, why blocking after the fact does not rebuild the plan, and how much fitness a short break really costs.
Upload a lab test and let your zones come from real lactate numbers
How the Power Profile reads LT1, LT2, VO2max, FatMax and the lab's zone table out of a PDF, what it shows, and why it leaves your FTP for you to set.
Route Engine: how Moveee picks the right road for tomorrow's workout
How a planned session becomes a route from your door: the spec, the search for real climbs and flat drags near home, fresh wind-aware loops, fixed scoring weights and templated reasons, plus what it needs and what it cannot do.
Recovery is training: sleep, easy days, and why rest makes you faster
You don't get fitter when you train — you get fitter when you recover from it. Here's how sleep, easy days and rest turn hard work into actual speed.
Fitness, Fatigue and Form: reading your training load without overthinking it
Three numbers explain almost everything about your training — whether you're building, digging a hole, or ready to fly. Here's how Fitness, Fatigue and Form work, in plain English.
How to use your Wahoo KICKR without Zwift (a free browser app)
Your Wahoo KICKR doesn't need Zwift — or any subscription — to give you a proper session. Here's how to use a KICKR (or KICKR Core, Snap and Move) with a free browser app that controls resistance, holds ERG targets and saves to Strava.