garminconnect-js
A zero-dependency TypeScript client for Garmin Connect. This page is its live demo: each panel shows the library call that filled it, with the arguments it sent and what came back.
npm install garminconnect-jsYou're looking at synthetic demo data. Sign in with your Garmin account to run these calls against your own data. Your password goes to Garmin only and is never stored; your session stays in your browser.
Sign in with Garminawait garmin.fullName()→ "Demo athlete" (synthetic)Showing Demo athlete
Sleep score, last night65
Sleep, last night6h 24m
Activities, 90 days99
Active time, 90 days115h 27m
Resting heart rate, latest47 bpm
HRV, last night56 ms
await garmin.getSleepDaily("2026-07-02", "2026-09-29")→ 90 nights (synthetic)Sleep
Show table
| Date | Sleep score |
|---|---|
| Jul 2 | 72 |
| Jul 3 | 71 |
| Jul 4 | 83 |
| Jul 5 | 81 |
| Jul 6 | 86 |
| Jul 7 | 86 |
| Jul 8 | 83 |
| Jul 9 | 81 |
| Jul 10 | 77 |
| Jul 11 | 78 |
| Jul 12 | 83 |
| Jul 13 | 66 |
| Jul 14 | 78 |
| Jul 15 | 71 |
| Jul 16 | 78 |
| Jul 17 | 65 |
| Jul 18 | 72 |
| Jul 19 | 63 |
| Jul 20 | 69 |
| Jul 21 | 83 |
| Jul 22 | 85 |
| Jul 23 | 72 |
| Jul 24 | 82 |
| Jul 25 | 78 |
| Jul 26 | 84 |
| Jul 27 | 78 |
| Jul 28 | 86 |
| Jul 29 | 75 |
| Jul 30 | 72 |
| Jul 31 | 71 |
| Aug 1 | 69 |
| Aug 2 | 69 |
| Aug 3 | 73 |
| Aug 4 | 74 |
| Aug 5 | 70 |
| Aug 6 | 71 |
| Aug 7 | 76 |
| Aug 8 | 74 |
| Aug 9 | 76 |
| Aug 10 | 74 |
| Aug 11 | 88 |
| Aug 12 | 79 |
| Aug 13 | 75 |
| Aug 14 | 73 |
| Aug 15 | 85 |
| Aug 16 | 77 |
| Aug 17 | 78 |
| Aug 18 | 74 |
| Aug 19 | 83 |
| Aug 20 | 80 |
| Aug 21 | 70 |
| Aug 22 | 58 |
| Aug 23 | 57 |
| Aug 24 | 68 |
| Aug 25 | 72 |
| Aug 26 | 71 |
| Aug 27 | 76 |
| Aug 28 | 78 |
| Aug 29 | 72 |
| Aug 30 | 77 |
| Aug 31 | 88 |
| Sep 1 | 79 |
| Sep 2 | 82 |
| Sep 3 | 84 |
| Sep 4 | 73 |
| Sep 5 | 73 |
| Sep 6 | 72 |
| Sep 7 | 77 |
| Sep 8 | 66 |
| Sep 9 | 67 |
| Sep 10 | 65 |
| Sep 11 | 69 |
| Sep 12 | 77 |
| Sep 13 | 82 |
| Sep 14 | 74 |
| Sep 15 | 72 |
| Sep 16 | 81 |
| Sep 17 | 74 |
| Sep 18 | 86 |
| Sep 19 | 81 |
| Sep 20 | 84 |
| Sep 21 | 84 |
| Sep 22 | 74 |
| Sep 23 | 91 |
| Sep 24 | 82 |
| Sep 25 | 78 |
| Sep 26 | 70 |
| Sep 27 | 71 |
| Sep 28 | 77 |
| Sep 29 | 65 |
Show table
| Date | Sleep duration |
|---|---|
| Jul 2 | 6h 24m |
| Jul 3 | 6h 54m |
| Jul 4 | 7h 36m |
| Jul 5 | 7h 18m |
| Jul 6 | 7h 54m |
| Jul 7 | 7h 48m |
| Jul 8 | 7h 54m |
| Jul 9 | 7h 18m |
| Jul 10 | 7h 30m |
| Jul 11 | 7h 18m |
| Jul 12 | 7h 24m |
| Jul 13 | 6h 12m |
| Jul 14 | 7h 06m |
| Jul 15 | 6h 36m |
| Jul 16 | 6h 54m |
| Jul 17 | 6h 18m |
| Jul 18 | 6h 54m |
| Jul 19 | 6h 12m |
| Jul 20 | 6h 42m |
| Jul 21 | 7h 36m |
| Jul 22 | 7h 30m |
| Jul 23 | 6h 54m |
| Jul 24 | 7h 36m |
| Jul 25 | 7h 30m |
| Jul 26 | 8h 06m |
| Jul 27 | 7h 24m |
| Jul 28 | 7h 36m |
| Jul 29 | 7h 18m |
| Jul 30 | 6h 54m |
| Jul 31 | 6h 42m |
| Aug 1 | 6h 30m |
| Aug 2 | 6h 42m |
| Aug 3 | 6h 54m |
| Aug 4 | 6h 48m |
| Aug 5 | 6h 36m |
| Aug 6 | 6h 30m |
| Aug 7 | 7h 12m |
| Aug 8 | 7h 06m |
| Aug 9 | 7h 12m |
| Aug 10 | 7h 00m |
| Aug 11 | 7h 48m |
| Aug 12 | 7h 06m |
| Aug 13 | 7h 06m |
| Aug 14 | 7h 12m |
| Aug 15 | 8h 06m |
| Aug 16 | 7h 30m |
| Aug 17 | 7h 12m |
| Aug 18 | 6h 36m |
| Aug 19 | 7h 18m |
| Aug 20 | 7h 06m |
| Aug 21 | 6h 48m |
| Aug 22 | 5h 48m |
| Aug 23 | 5h 54m |
| Aug 24 | 6h 36m |
| Aug 25 | 6h 48m |
| Aug 26 | 6h 54m |
| Aug 27 | 7h 18m |
| Aug 28 | 6h 54m |
| Aug 29 | 6h 48m |
| Aug 30 | 6h 48m |
| Aug 31 | 7h 42m |
| Sep 1 | 7h 00m |
| Sep 2 | 7h 12m |
| Sep 3 | 7h 36m |
| Sep 4 | 7h 06m |
| Sep 5 | 6h 48m |
| Sep 6 | 6h 30m |
| Sep 7 | 7h 00m |
| Sep 8 | 6h 36m |
| Sep 9 | 6h 00m |
| Sep 10 | 6h 00m |
| Sep 11 | 6h 54m |
| Sep 12 | 6h 54m |
| Sep 13 | 7h 12m |
| Sep 14 | 7h 00m |
| Sep 15 | 6h 36m |
| Sep 16 | 7h 36m |
| Sep 17 | 7h 00m |
| Sep 18 | 7h 54m |
| Sep 19 | 7h 24m |
| Sep 20 | 7h 54m |
| Sep 21 | 7h 48m |
| Sep 22 | 7h 06m |
| Sep 23 | 7h 54m |
| Sep 24 | 7h 18m |
| Sep 25 | 7h 30m |
| Sep 26 | 6h 54m |
| Sep 27 | 6h 36m |
| Sep 28 | 6h 48m |
| Sep 29 | 6h 24m |
await garmin.getActivitiesByDate("2026-07-02", "2026-09-29")→ 99 activities (synthetic)Activities
- Lunch rideRoad biking · Sep 29, 12:1730.57 km1h 05m
- Upper bodyStrength training · Sep 28, 18:5447 min
- Easy runRunning · Sep 27, 07:477.97 km45 min
- Ridge hikeHiking · Sep 26, 10:5910.23 km2h 34m
- Evening walkWalking · Sep 25, 19:423.12 km37 min
- Long trail runTrail running · Sep 25, 08:0512.39 km1h 21m
- Pool swimLap swimming · Sep 24, 07:071.66 km43 min
- Lunch rideRoad biking · Sep 22, 12:3936.83 km1h 23m
- Upper bodyStrength training · Sep 21, 18:2547 min
- Recovery yogaYoga · Sep 20, 21:0330 min
- Easy runRunning · Sep 20, 07:046.80 km41 min
- Ridge hikeHiking · Sep 19, 10:2612.07 km2h 54m
- Evening walkWalking · Sep 18, 19:512.53 km31 min
- Long trail runTrail running · Sep 18, 08:1415.30 km1h 47m
- Pool swimLap swimming · Sep 17, 07:441.75 km42 min
- Evening walkWalking · Sep 16, 19:483.00 km35 min
- Lunch rideRoad biking · Sep 15, 12:5632.12 km1h 14m
- Upper bodyStrength training · Sep 14, 18:4651 min
- Easy runRunning · Sep 13, 07:286.35 km37 min
- Ridge hikeHiking · Sep 12, 10:1712.89 km3h 11m
Showing the latest 20 of 99.
await garmin.getRhrDaily("2026-07-02", "2026-09-29")→ 90 days (synthetic)await garmin.getHrvDataRange("2026-07-02", "2026-09-29")→ 90 nights (synthetic)Heart
Show table
| Date | Resting heart rate |
|---|---|
| Jul 2 | 49 bpm |
| Jul 3 | 51 bpm |
| Jul 4 | 51 bpm |
| Jul 5 | 50 bpm |
| Jul 6 | 52 bpm |
| Jul 7 | 53 bpm |
| Jul 8 | 51 bpm |
| Jul 9 | 52 bpm |
| Jul 10 | 52 bpm |
| Jul 11 | 53 bpm |
| Jul 12 | 53 bpm |
| Jul 13 | 52 bpm |
| Jul 14 | 52 bpm |
| Jul 15 | 50 bpm |
| Jul 16 | 51 bpm |
| Jul 17 | 52 bpm |
| Jul 18 | 49 bpm |
| Jul 19 | 51 bpm |
| Jul 20 | 50 bpm |
| Jul 21 | 50 bpm |
| Jul 22 | 50 bpm |
| Jul 23 | 49 bpm |
| Jul 24 | 50 bpm |
| Jul 25 | 49 bpm |
| Jul 26 | 48 bpm |
| Jul 27 | 49 bpm |
| Jul 28 | 49 bpm |
| Jul 29 | 48 bpm |
| Jul 30 | 48 bpm |
| Jul 31 | 51 bpm |
| Aug 1 | 51 bpm |
| Aug 2 | 51 bpm |
| Aug 3 | 51 bpm |
| Aug 4 | 50 bpm |
| Aug 5 | 52 bpm |
| Aug 6 | 52 bpm |
| Aug 7 | 52 bpm |
| Aug 8 | 51 bpm |
| Aug 9 | 53 bpm |
| Aug 10 | 53 bpm |
| Aug 11 | 51 bpm |
| Aug 12 | 52 bpm |
| Aug 13 | 54 bpm |
| Aug 14 | 53 bpm |
| Aug 15 | 53 bpm |
| Aug 16 | 51 bpm |
| Aug 17 | 50 bpm |
| Aug 18 | 51 bpm |
| Aug 19 | 50 bpm |
| Aug 20 | 49 bpm |
| Aug 21 | 49 bpm |
| Aug 22 | 49 bpm |
| Aug 23 | 49 bpm |
| Aug 24 | 49 bpm |
| Aug 25 | 48 bpm |
| Aug 26 | 50 bpm |
| Aug 27 | 49 bpm |
| Aug 28 | 48 bpm |
| Aug 29 | 49 bpm |
| Aug 30 | 49 bpm |
| Aug 31 | 48 bpm |
| Sep 1 | 48 bpm |
| Sep 2 | 51 bpm |
| Sep 3 | 51 bpm |
| Sep 4 | 50 bpm |
| Sep 5 | 51 bpm |
| Sep 6 | 52 bpm |
| Sep 7 | 53 bpm |
| Sep 8 | 52 bpm |
| Sep 9 | 52 bpm |
| Sep 10 | 53 bpm |
| Sep 11 | 53 bpm |
| Sep 12 | 53 bpm |
| Sep 13 | 52 bpm |
| Sep 14 | 53 bpm |
| Sep 15 | 52 bpm |
| Sep 16 | 53 bpm |
| Sep 17 | 51 bpm |
| Sep 18 | 52 bpm |
| Sep 19 | 50 bpm |
| Sep 20 | 51 bpm |
| Sep 21 | 51 bpm |
| Sep 22 | 50 bpm |
| Sep 23 | 50 bpm |
| Sep 24 | 50 bpm |
| Sep 25 | 47 bpm |
| Sep 26 | 47 bpm |
| Sep 27 | 49 bpm |
| Sep 28 | 50 bpm |
| Sep 29 | 47 bpm |
Show table
| Date | Overnight HRV |
|---|---|
| Jul 2 | 63 ms |
| Jul 3 | 68 ms |
| Jul 4 | 64 ms |
| Jul 5 | 69 ms |
| Jul 6 | 67 ms |
| Jul 7 | 70 ms |
| Jul 8 | 68 ms |
| Jul 9 | 62 ms |
| Jul 10 | 60 ms |
| Jul 11 | 62 ms |
| Jul 12 | 62 ms |
| Jul 13 | 58 ms |
| Jul 14 | 54 ms |
| Jul 15 | 53 ms |
| Jul 16 | 53 ms |
| Jul 17 | 56 ms |
| Jul 18 | 53 ms |
| Jul 19 | 57 ms |
| Jul 20 | 57 ms |
| Jul 21 | 58 ms |
| Jul 22 | 61 ms |
| Jul 23 | 60 ms |
| Jul 24 | 65 ms |
| Jul 25 | 63 ms |
| Jul 26 | 62 ms |
| Jul 27 | 71 ms |
| Jul 28 | 66 ms |
| Jul 29 | 71 ms |
| Jul 30 | 69 ms |
| Jul 31 | 67 ms |
| Aug 1 | 68 ms |
| Aug 2 | 64 ms |
| Aug 3 | 63 ms |
| Aug 4 | 60 ms |
| Aug 5 | 63 ms |
| Aug 6 | 63 ms |
| Aug 7 | 55 ms |
| Aug 8 | 59 ms |
| Aug 9 | 54 ms |
| Aug 10 | 58 ms |
| Aug 11 | 59 ms |
| Aug 12 | 59 ms |
| Aug 13 | 57 ms |
| Aug 14 | 59 ms |
| Aug 15 | 58 ms |
| Aug 16 | 56 ms |
| Aug 17 | 64 ms |
| Aug 18 | 63 ms |
| Aug 19 | 63 ms |
| Aug 20 | 66 ms |
| Aug 21 | 69 ms |
| Aug 22 | 64 ms |
| Aug 23 | 65 ms |
| Aug 24 | 70 ms |
| Aug 25 | 67 ms |
| Aug 26 | 65 ms |
| Aug 27 | 66 ms |
| Aug 28 | 64 ms |
| Aug 29 | 66 ms |
| Aug 30 | 66 ms |
| Aug 31 | 59 ms |
| Sep 1 | 59 ms |
| Sep 2 | 56 ms |
| Sep 3 | 57 ms |
| Sep 4 | 55 ms |
| Sep 5 | 60 ms |
| Sep 6 | 58 ms |
| Sep 7 | 60 ms |
| Sep 8 | 57 ms |
| Sep 9 | 58 ms |
| Sep 10 | 64 ms |
| Sep 11 | 61 ms |
| Sep 12 | 62 ms |
| Sep 13 | 68 ms |
| Sep 14 | 64 ms |
| Sep 15 | 64 ms |
| Sep 16 | 68 ms |
| Sep 17 | 68 ms |
| Sep 18 | 72 ms |
| Sep 19 | 67 ms |
| Sep 20 | 71 ms |
| Sep 21 | 67 ms |
| Sep 22 | 67 ms |
| Sep 23 | 62 ms |
| Sep 24 | 61 ms |
| Sep 25 | 59 ms |
| Sep 26 | 61 ms |
| Sep 27 | 57 ms |
| Sep 28 | 54 ms |
| Sep 29 | 56 ms |
await garmin.getPersonalRecord()→ 6 running records (synthetic)await garmin.getEarnedBadges()→ 10 badges (synthetic)await garmin.getBadgeDetail(9)→ 5 badges in its series (synthetic)Personal records
| 1 km | 3:48 | Track intervalsAug 19 |
|---|---|---|
| 1 mile | 6:12 | Track intervalsAug 19 |
| 5 km | 21:14 | ParkrunSep 17 |
| 10 km | 44:49 | Riverside 10KJun 25 |
| Half marathon | 1:39:02 | City halfApr 2 |
| Longest run | 28.41 km | Long trail runSep 3 |
Latest badges
- Parkrun RegularRecord five runs on a Saturday morning. · ParkrunSep 17
- Weekend Warrior×4Record an activity on both days of a weekend.Sep 10
- Trail BlazerRun 25 kilometers on trails in a single activity. · Long trail runSep 3
- Early Bird×6Start an activity before 6 a.m. · Easy runAug 27
- Century RideRide 100 kilometers in a single activity. · Lunch rideAug 2
- Pool Party×2Swim 2 kilometers in a single activity. · Pool swimJul 17
- Step Streak 30Meet your step goal 30 days in a row.Jun 20
- Summit SeekerClimb 1,000 meters in a single activity. · Ridge hikeMay 12
Showing the latest 8 of 10.
The Half Marathon series
- Milestoneearned
- 5K Runearned
- 10K Runearned
- Half Marathonearned
- Marathonnot earned yet