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
Workout data provider. Options: suunto, polar, garmin
Suunto Parameters
Unix timestamp to get workouts since. Use 0 to get all workouts. Suunto only.
Maximum number of workouts to return. Maximum: 100. Suunto only.
Offset for pagination. Suunto only.
filter_by_modification_time
Filter by modification time instead of creation time. Suunto only.
Polar Parameters
Return sample data (heart rate, speed, cadence time series). Polar only.
Return heart rate zone data. Polar only.
Return GPS route data. Polar only.
Garmin Parameters
Activity start time as Unix timestamp or ISO 8601 date. Garmin only.
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
]
}
}
]
Returns an object with exercise array and Polar-specific fields:{
"exercises": [
{
"id": 1234567890,
"upload-time": "2024-03-01T08:00:00.000Z",
"polar-user": "https://www.polaraccesslink.com/v3/users/12345",
"device": "Polar Vantage V2",
"start-time": "2024-03-01T07:00:00.000Z",
"duration": "PT45M30S",
"distance": 7243.8,
"heart-rate": {
"average": 152,
"maximum": 178
},
"calories": 426,
"training-load": 85.2,
"sport": "RUNNING",
"has-route": true,
"club-id": null,
"detailed-sport-info": "ROAD_RUNNING"
}
]
}
Returns an array of activity summaries with Garmin-specific fields:[
{
"summaryId": "9876543210",
"userId": "123456789",
"userAccessToken": "abc123xyz789",
"startTimeInSeconds": 1709280000,
"startTimeOffsetInSeconds": -28800,
"activityType": "RUNNING",
"activityName": "Morning Run",
"durationInSeconds": 2730,
"distanceInMeters": 7243.8,
"averageHeartRateInBeatsPerMinute": 152,
"maxHeartRateInBeatsPerMinute": 178,
"activeKilocalories": 426,
"elevationGainInMeters": 82.5,
"averageSpeedInMetersPerSecond": 2.65,
"maxSpeedInMetersPerSecond": 3.89,
"steps": 5847,
"averageRunCadenceInStepsPerMinute": 172,
"maxRunCadenceInStepsPerMinute": 186
}
]
Get Workout Detail from Provider
Workout data provider. Options: suunto, polar, garmin
Provider-specific workout identifier
Polar Parameters
Return sample data (heart rate, speed, cadence time series). Polar only.
Return heart rate zone data. Polar only.
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
]
}
}
Returns detailed exercise object with optional samples, zones, and route:{
"id": 1234567890,
"upload-time": "2024-03-01T08:00:00.000Z",
"polar-user": "https://www.polaraccesslink.com/v3/users/12345",
"device": "Polar Vantage V2",
"start-time": "2024-03-01T07:00:00.000Z",
"duration": "PT45M30S",
"distance": 7243.8,
"heart-rate": {
"average": 152,
"maximum": 178
},
"calories": 426,
"training-load": 85.2,
"sport": "RUNNING",
"has-route": true,
"samples": {
"heart-rate": [
{"timestamp": "2024-03-01T07:00:00.000Z", "value": 95},
{"timestamp": "2024-03-01T07:00:05.000Z", "value": 102}
// ... more samples
],
"speed": [
{"timestamp": "2024-03-01T07:00:00.000Z", "value": 2.1},
{"timestamp": "2024-03-01T07:00:05.000Z", "value": 2.5}
// ... more samples
]
},
"zones": {
"heart-rate": [
{"zone": 1, "duration": "PT5M"},
{"zone": 2, "duration": "PT15M"},
{"zone": 3, "duration": "PT20M"},
{"zone": 4, "duration": "PT5M30S"}
]
},
"route": [
{"latitude": 60.1699, "longitude": 24.9384, "altitude": 145.2},
{"latitude": 60.1701, "longitude": 24.9389, "altitude": 146.1}
// ... more route points
]
}
Returns detailed activity summary with Garmin-specific metrics:{
"summaryId": "9876543210",
"userId": "123456789",
"userAccessToken": "abc123xyz789",
"startTimeInSeconds": 1709280000,
"startTimeOffsetInSeconds": -28800,
"activityType": "RUNNING",
"activityName": "Morning Run",
"durationInSeconds": 2730,
"distanceInMeters": 7243.8,
"averageHeartRateInBeatsPerMinute": 152,
"maxHeartRateInBeatsPerMinute": 178,
"activeKilocalories": 426,
"elevationGainInMeters": 82.5,
"averageSpeedInMetersPerSecond": 2.65,
"maxSpeedInMetersPerSecond": 3.89,
"steps": 5847,
"averageRunCadenceInStepsPerMinute": 172,
"maxRunCadenceInStepsPerMinute": 186,
"strideLength": 1.24,
"verticalOscillation": 8.5,
"groundContactTime": 245,
"trainingEffect": 3.8,
"anaerobicTrainingEffect": 2.1,
"vo2MaxValue": 52.3
}
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
| Feature | Suunto | Polar | Garmin |
|---|
| 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
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"
}