---
title: Garmin Integration
subtitle: Connect Garmin Connect data to Sahha via the Garmin Health API.
---


## Overview

Connect **Garmin Connect** data to Sahha via the Garmin Health API. You register an app with Garmin, add it to Sahha as an integration, configure webhooks, then connect end users. The connection flow itself is shared across providers — see [Integrations](/docs/connect/integrations) for the concepts and [Connect a user](/docs/connect/integrations#connect-a-user) for the full round-trip.

{% providers view="detail" slug="garmin" /%}

---

## Before you start

{% callout title="Access required" %}
The Garmin Health API requires approval from Garmin. Apply through the [Garmin Developer Program](https://developer.garmin.com/gc-developer-program/overview/) before starting.
{% /callout %}

{% callout type="info" %}
Examples use the **sandbox** environment. Replace `sandbox-api.sahha.ai` with `api.sahha.ai` for production — see [API Environments](/docs/connect/api#environments).
{% /callout %}

---

## 1. Register your Garmin app

This gives Sahha the OAuth credentials it uses to request data on your users' behalf.

1. Sign in to the [Garmin Developer Portal](https://developerportal.garmin.com/).
2. Create a new application.
3. Configure the application's name, description, and logo — these are shown to end users during the connection flow.
4. Add the Sahha OAuth redirect URL:

   ```http
   https://sandbox-api.sahha.ai/api/v1/integration/oauth/garmin/callback
   ```

5. Enable the APIs you want Sahha to ingest — e.g. Health API, Activity API, Women's Health API. (The Training API is **not** supported by Sahha.)
6. Save, then copy your **Client ID** and **Client Secret** for the next step.

---

## 2. Create the integration in Sahha

1. Go to the [Sahha Dashboard](https://app.sahha.ai/dashboard).
2. Navigate to **Integrations → Integrations** in the sidebar.
3. Click **Add integration** and select **Garmin** from the Provider dropdown.
4. Paste in your Garmin **Client ID** and **Client Secret**.
5. Add one or more entries to the **Redirect URL Whitelist** — the URLs in your own app that Sahha may redirect users back to after OAuth.
6. Save the integration.

{% callout title="About the Redirect URL Whitelist" %}
When you start the OAuth flow you may optionally pass a `redirectUrl` — it must match a whitelisted entry. If omitted, Sahha uses the first URL in the whitelist.
{% /callout %}

After saving, the dashboard displays a **webhook URL** for this integration. You'll need it next.

---

## 3. Configure Garmin webhooks

Garmin delivers data to Sahha via push notifications, so you must register Sahha's webhook URL with Garmin.

1. In the [Garmin Developer Portal](https://developerportal.garmin.com/), open the [Endpoint Configuration page](https://apis.garmin.com/tools/endpoints).
2. For every endpoint you want Sahha to receive, paste the webhook URL from your Sahha integration into the endpoint's URL field.
3. Ensure each endpoint is **enabled**.
4. Where a delivery mode is offered, select **Push** — not Pull.
5. Save.

{% callout title="Push, not Pull" %}
Sahha only supports **push** delivery. Any endpoint left in pull mode will not deliver data to Sahha.
{% /callout %}

---

## 4. Connect a user

Start the OAuth flow with the user's profile token. Garmin's slug is `garmin`:

```shell-session title="Start Garmin connection"
curl -X GET "https://sandbox-api.sahha.ai/api/v1/integration/oauth/garmin/authorize?redirectUrl=https://yourapp.com/integrations/callback" \
  -H "Authorization: profile {your-profile-token}"
```

```json title="Response"
{
	"authorizationUrl": "https://connect.garmin.com/oauthConfirm?..."
}
```

Redirect the user to `authorizationUrl` to complete authorization. For the full round-trip, prerequisites, language-specific snippets, and the SDK option, see [Connect a user](/docs/connect/integrations#connect-a-user).

---

## Garmin-specific notes

- **Training API is not supported.** Don't rely on Sahha ingesting Training API data.
- **Historical backfill needs permission.** Sahha backfills 30 days on connect, but only if the user grants Garmin's historical-data permission during authorization. Without it, only data recorded after connection flows in.
- **Webhooks must be push.** See step 3 — pull-mode endpoints deliver nothing.

For data freshness, the connection lifecycle, and disconnecting a user, see [Managing connections](/docs/connect/integrations#managing-connections) on the Integrations page.

---

## Support

Need help? Contact [support@sahha.ai](mailto:support@sahha.ai) or join the [Slack Community](https://join.slack.com/t/sahhacommunity/shared_invite/zt-1w0fmfbvk-qUwQ83tJgXyjT9XSxJvKIw).
