> 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/unified-api/integration-setup/per-user-oauth-apps.md).

# Per-user OAuth apps

Some providers let each of your end-users connect through their own OAuth app, instead of through a shared app you manage. This is useful when your users are themselves developers — they register their own app with the provider, and they bring its credentials when they connect through Terra.

You enable this per-(provider, dev\_id) from your dashboard: open the connection's settings and turn on **Per-user apps**. Once it's on, every new connection for that provider goes through a Terra-hosted page where the user enters their own `client_id` and `client_secret`. Those credentials are pinned to that one connection and aren't shared.

This page lists what each user needs to do at the provider's developer portal. Share the relevant link with your users.

{% hint style="info" %}
**Existing connections aren't affected.** Turning the toggle on changes the routing only for connections created from that point on. Users already connected through your previous setup keep working.
{% endhint %}

***

### Strava <a href="#strava" id="strava"></a>

Each user registers their own Strava OAuth app and enters its credentials on the Terra-hosted connect page.

1. Sign in to <https://www.strava.com/settings/api>.
2. Create an application. The **Application Name**, **Website**, and **Application Description** can be anything.
3. Set the **Authorization Callback Domain** to:

   ```
   access.tryterra.co
   ```
4. Save the application. Copy the **Client ID** and **Client Secret**.
5. When prompted on the Terra-hosted connect page, paste the **Client ID** and **Client Secret** to complete the connection.

{% hint style="info" %}
**Callback domain only — no path.** Strava's field accepts a domain, not a full URL. Use exactly `access.tryterra.co`.
{% endhint %}

***

### Oura <a href="#oura" id="oura"></a>

Each user registers their own Oura OAuth application and enters its credentials on the Terra-hosted connect page.

1. Sign in to <https://cloud.ouraring.com/oauth/applications>.
2. Create a new application. The **Application Name** and **Application Description** can be anything.
3. Set the **Redirect URI** to:

   ```
   https://access.tryterra.co/api/v3/auth/oura/oauth2
   ```
4. Make sure the application is allowed the scopes Terra requests: `email`, `personal`, `daily`, `heartrate`, `workout`, `tag`, `session`, `spo2Daily`.
5. Save the application. Copy the **Client ID** and **Client Secret**.
6. When prompted on the Terra-hosted connect page, paste the **Client ID** and **Client Secret** to complete the connection.

***

### WHOOP <a href="#whoop" id="whoop"></a>

Each user registers their own WHOOP OAuth application and enters its credentials on the Terra-hosted connect page.

1. Sign in to <https://developer-dashboard.whoop.com/> (a WHOOP account is required).
2. Create a new application.
3. Set the **Redirect URL** to:

   ```
   https://access.tryterra.co/api/v3/auth/whoop/oauth2
   ```
4. Set the **Webhook URL** to:

   ```
   https://api.tryterra.co/v2/hooks/whoop/push
   ```
5. Save the application. Copy the **Client ID** and **Client Secret**.
6. When prompted on the Terra-hosted connect page, paste the **Client ID** and **Client Secret** to complete the connection.

{% hint style="info" %}
**Webhook URL is required.** Without it, real-time updates from WHOOP won't reach Terra and the user's data will only refresh on poll.
{% endhint %}
