Skip to main content
Vendor workout endpoints provide direct access to raw workout data from fitness provider APIs (Suunto, Polar, Garmin). These endpoints return the native response format from each provider, allowing access to provider-specific features and detailed workout data.
These endpoints return raw data from provider APIs in their native format. For normalized workout data across all providers, use the Events endpoints instead.

Get User Workouts from Provider

provider
string
required
Workout data provider. Options: suunto, polar, garmin
user_id
string
required
UUID of the user

Suunto Parameters

since
integer
default:"0"
Unix timestamp to get workouts since. Use 0 to get all workouts. Suunto only.
limit
integer
default:"50"
Maximum number of workouts to return. Maximum: 100. Suunto only.
offset
integer
default:"0"
Offset for pagination. Suunto only.
filter_by_modification_time
boolean
default:"true"
Filter by modification time instead of creation time. Suunto only.

Polar Parameters

samples
boolean
default:"false"
Return sample data (heart rate, speed, cadence time series). Polar only.
zones
boolean
default:"false"
Return heart rate zone data. Polar only.
route
boolean
default:"false"
Return GPS route data. Polar only.

Garmin Parameters

summary_start_time
string
Activity start time as Unix timestamp or ISO 8601 date. Garmin only.
summary_end_time
string
Activity end time as Unix timestamp or ISO 8601 date. Garmin only.
curl -X GET "https://api.openwearables.com/api/v1/suunto/users/123e4567-e89b-12d3-a456-426614174000/workouts?since=1709251200&limit=10&offset=0" \
  -H "X-API-Key: your_api_key"

Response

Returns raw workout data in the provider’s native format. Response structure varies by provider.
Returns an array of workout objects with Suunto-specific fields:
[
  {
    "workoutKey": "64f5a1b2c3d4e5f6a7b8c9d0",
    "activityId": 82,
    "startTime": "2024-03-01T07:00:00.000Z",
    "totalTime": "PT45M30S",
    "totalDistance": 7243.8,
    "avgHeartRate": 152,
    "maxHeartRate": 178,
    "totalAscent": 82.5,
    "energyConsumption": 425.5,
    "extensions": {
      "samples": [
        // Detailed time-series data
      ]
    }
  }
]

Get Workout Detail from Provider

provider
string
required
Workout data provider. Options: suunto, polar, garmin
user_id
string
required
UUID of the user
workout_id
string
required
Provider-specific workout identifier

Polar Parameters

samples
boolean
default:"false"
Return sample data (heart rate, speed, cadence time series). Polar only.
zones
boolean
default:"false"
Return heart rate zone data. Polar only.
route
boolean
default:"false"
Return GPS route data. Polar only.
curl -X GET "https://api.openwearables.com/api/v1/suunto/users/123e4567-e89b-12d3-a456-426614174000/workouts/64f5a1b2c3d4e5f6a7b8c9d0" \
  -H "X-API-Key: your_api_key"

Response

Returns detailed workout data in the provider’s native format, including time-series samples if supported.
Returns detailed workout object with full sample data:
{
  "workoutKey": "64f5a1b2c3d4e5f6a7b8c9d0",
  "activityId": 82,
  "startTime": "2024-03-01T07:00:00.000Z",
  "totalTime": "PT45M30S",
  "totalDistance": 7243.8,
  "avgHeartRate": 152,
  "maxHeartRate": 178,
  "totalAscent": 82.5,
  "energyConsumption": 425.5,
  "extensions": {
    "samples": [
      {
        "timestamp": "2024-03-01T07:00:00.000Z",
        "heartRate": 95,
        "speed": 2.1,
        "altitude": 145.2,
        "distance": 0
      },
      {
        "timestamp": "2024-03-01T07:00:05.000Z",
        "heartRate": 102,
        "speed": 2.5,
        "altitude": 145.8,
        "distance": 12.5
      }
      // ... more samples
    ],
    "route": [
      {
        "latitude": 60.1699,
        "longitude": 24.9384,
        "altitude": 145.2
      }
      // ... more route points
    ]
  }
}

Provider Comparison

When to use vendor endpoints vs. normalized Events endpoints:
  • Use Vendor Workouts when you need provider-specific features or detailed time-series data
  • Use Events when you want consistent data format across all providers
FeatureSuuntoPolarGarmin
Pagination✅ Offset-based❌ No built-in pagination❌ Time-based filtering only
Time-series samples✅ Included in detail✅ Optional parameter❌ Not available via API
GPS routes✅ Included in detail✅ Optional parameter❌ Not available via API
Heart rate zones✅ Calculated from samples✅ Optional parameter✅ Included in summary
Advanced metrics⚠️ Basic⚠️ Moderate✅ Extensive (VO2 max, training effect, etc.)
Filtering options✅ By time and modification⚠️ Limited✅ By time range

Error Responses

status_code
integer
HTTP status code
detail
string
Error message

501 Not Implemented

Returned when the provider does not support workout data:
{
  "detail": "Provider 'fitbit' does not support workouts"
}

401 Unauthorized

Returned when the user doesn’t have an active connection with the provider:
{
  "detail": "User does not have an active connection with provider 'garmin'"
}

404 Not Found

Returned when the workout ID doesn’t exist:
{
  "detail": "Workout '64f5a1b2c3d4e5f6a7b8c9d0' not found"
}

Build docs developers (and LLMs) love