Skip to main content

Get Providers

endpoint
string
GET /api/v1/oauth/providers
Retrieve list of available wearable providers with their configuration and metadata.

Query Parameters

enabled_only
boolean
default:"false"
Return only providers that are currently enabled by the administrator
cloud_only
boolean
default:"false"
Return only providers that support cloud OAuth API (excludes SDK-based providers like Apple Health)

Response

Returns an array of provider configuration objects.
provider
string
required
Provider identifier (e.g., garmin, polar, strava)
name
string
required
Human-readable display name (e.g., “Garmin”, “Polar Flow”)
has_cloud_api
boolean
required
Whether provider uses cloud OAuth API (true) or SDK-based authentication (false)
is_enabled
boolean
required
Whether provider is enabled by administrator. Disabled providers cannot be used for new connections.
icon_url
string
required
URL to provider’s icon/logo image

Examples

curl -X GET "https://api.openwearables.com/api/v1/oauth/providers" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response Example

[
  {
    "provider": "garmin",
    "name": "Garmin",
    "has_cloud_api": true,
    "is_enabled": true,
    "icon_url": "https://api.openwearables.com/static/providers/garmin.png"
  },
  {
    "provider": "polar",
    "name": "Polar Flow",
    "has_cloud_api": true,
    "is_enabled": true,
    "icon_url": "https://api.openwearables.com/static/providers/polar.png"
  },
  {
    "provider": "apple",
    "name": "Apple Health",
    "has_cloud_api": false,
    "is_enabled": true,
    "icon_url": "https://api.openwearables.com/static/providers/apple.png"
  },
  {
    "provider": "strava",
    "name": "Strava",
    "has_cloud_api": true,
    "is_enabled": false,
    "icon_url": "https://api.openwearables.com/static/providers/strava.png"
  }
]

Update Provider Status

endpoint
string
PUT /api/v1/oauth/providers/{provider}
Update the enabled status for a single provider. Requires developer authentication.

Path Parameters

provider
string
required
Provider identifier to update (e.g., garmin, polar, strava)

Request Body

is_enabled
boolean
required
Whether to enable or disable the provider

Response

Returns the updated provider configuration.

Examples

curl -X PUT "https://api.openwearables.com/api/v1/oauth/providers/strava" \
  -H "Authorization: Bearer YOUR_DEVELOPER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "is_enabled": true
  }'

Response Example

{
  "provider": "strava",
  "name": "Strava",
  "has_cloud_api": true,
  "is_enabled": true,
  "icon_url": "https://api.openwearables.com/static/providers/strava.png"
}

Error Responses

404 Not Found

Provider does not exist:
{
  "detail": "Provider 'invalid_provider' not found"
}

401 Unauthorized

Missing or invalid developer authentication:
{
  "detail": "Not authenticated"
}

Bulk Update Providers

endpoint
string
PUT /api/v1/oauth/providers
Update enabled status for multiple providers at once. This is the primary endpoint used by the admin UI. Requires developer authentication.

Request Body

providers
object
required
Map of provider identifiers to enabled status. Only providers included in the map will be updated.

Response

Returns array of all updated provider configurations.

Examples

curl -X PUT "https://api.openwearables.com/api/v1/oauth/providers" \
  -H "Authorization: Bearer YOUR_DEVELOPER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "providers": {
      "garmin": true,
      "polar": true,
      "strava": false,
      "oura": true
    }
  }'

Response Example

[
  {
    "provider": "garmin",
    "name": "Garmin",
    "has_cloud_api": true,
    "is_enabled": true,
    "icon_url": "https://api.openwearables.com/static/providers/garmin.png"
  },
  {
    "provider": "polar",
    "name": "Polar Flow",
    "has_cloud_api": true,
    "is_enabled": true,
    "icon_url": "https://api.openwearables.com/static/providers/polar.png"
  },
  {
    "provider": "strava",
    "name": "Strava",
    "has_cloud_api": true,
    "is_enabled": false,
    "icon_url": "https://api.openwearables.com/static/providers/strava.png"
  },
  {
    "provider": "oura",
    "name": "Oura Ring",
    "has_cloud_api": true,
    "is_enabled": true,
    "icon_url": "https://api.openwearables.com/static/providers/oura.png"
  },
  {
    "provider": "whoop",
    "name": "WHOOP",
    "has_cloud_api": true,
    "is_enabled": false,
    "icon_url": "https://api.openwearables.com/static/providers/whoop.png"
  }
]

Error Responses

401 Unauthorized

Missing or invalid developer authentication:
{
  "detail": "Not authenticated"
}

422 Validation Error

Invalid request body:
{
  "detail": [
    {
      "type": "missing",
      "loc": ["body", "providers"],
      "msg": "Field required"
    }
  ]
}

Supported Providers

Current list of supported wearable data providers:
ProviderIdentifierOAuth APISDK-Based
Apple Healthapple
Samsung Healthsamsung
Google Fitgoogle
Garmin Connectgarmin
Polar Flowpolar
Suuntosuunto
WHOOPwhoop
Stravastrava
Oura Ringoura

Provider States

Enabled: Provider can be used for new user connections and existing connections will continue syncing.Disabled: New connections cannot be created, but existing connections remain active and continue syncing. Use this when you need to temporarily restrict new connections without affecting existing users.
OAuth (Cloud API): Provider supports server-to-server OAuth authentication. Users authorize through a web browser, and the API can fetch data from the provider’s cloud service.SDK-Based: Provider requires native mobile SDK integration (e.g., Apple HealthKit, Samsung Health SDK). Data is synced directly from the user’s device.

Use Cases

Display OAuth Providers to Users

Get only enabled providers that support OAuth:
oauth_providers = httpx.get(
    "https://api.openwearables.com/api/v1/oauth/providers",
    params={"enabled_only": True, "cloud_only": True},
    headers={"Authorization": "Bearer YOUR_API_KEY"}
).json()

# Display to user as connection options
for provider in oauth_providers:
    print(f"Connect to {provider['name']}")

Admin Dashboard

Manage all provider settings:
# Get current state
providers = httpx.get(
    "https://api.openwearables.com/api/v1/oauth/providers",
    headers={"Authorization": "Bearer YOUR_DEVELOPER_KEY"}
).json()

# Update multiple providers
updates = {p["provider"]: p["is_enabled"] for p in providers}
updates["strava"] = True  # Enable Strava
updates["whoop"] = False  # Disable WHOOP

httpx.put(
    "https://api.openwearables.com/api/v1/oauth/providers",
    json={"providers": updates},
    headers={"Authorization": "Bearer YOUR_DEVELOPER_KEY"}
)

Notes

  • Provider icons are hosted at /static/providers/{provider}.png
  • Disabling a provider does not disconnect existing users
  • Provider metadata (name, icon, has_cloud_api) is read-only
  • Only is_enabled status can be modified via the API
  • Developer authentication is required for update operations

Build docs developers (and LLMs) love