Polar AccessLink Dynamic API v4
Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
Polar AccessLink Dynamic API documentation
Base URL: https://www.polaraccesslink.com/v4/data
Email: Support
Web: Support
License: Polar Electro AccessLink Limited License Agreement
Introduction
Any registered Polar Flow user can create API client to AccessLink by filling application details at
https://admin.polaraccesslink.com .
AccessLink uses OAuth2 as authentication protocol. Registered partners will require
OAuth2 client credentials to request user authorizations and be able to access their data.
Additionally, each user must accept all mandatory consents before their data can be accessed.
User consents can be changed anytime
at https://account.polar.com .
How to get started?
Create Polar Flow account if you don't have one already
Go to https://admin.polaraccesslink.com and log in
using your Polar Flow credentials
Fill your application/service information and create client
After the client is created, remember to write down OAuth2 client id and secret for later use
Get authorization code for the user using authorization endpoint
Use authorization code to get access token for the user using token endpoint
Start using the API
Support
For support, please contact b2bhelpdesk@polar.com
Rate limiting
Rate limiting for v4 endpoints is enforced per client ID, with both short-term (15 minutes) and long-term (24 hours) limits. If a client exceeds the short-term or long-term thresholds, further requests are blocked until the respective period resets.
15min rate limit: 3000 requests
24h rate limit: 100000 requests
Requests exceeding the limit will return 429 - Too Many Requests
.
(Note that requests violating the short-term limit will still count toward the long-term limit. )
Development resources
swagger.yaml - The Swagger specification can be used to generate client implementations.
See Swagger Codegen .
Polar in GitHub - Contains useful example applications and resources.
Polar SDK - Polar SDK is a set of libraries and tools that help you to
develop applications for Polar devices and services.
Authorization
The basic Polar OAuth2 flow for AccessLink Dynamic API:
End user is re-directed from client app to Polar OAuth2 authorization endpoint in https://auth.polar.com
End user grants partner the right to access data based on requested scopes
End user is redirected back to client app and with authorization code as part of the request
Client uses the authorization code to get refresh and access token from https://auth.polar.com
Authorization endpoint
To get a user authorization code, redirect user to the following address (HTTP GET):
https://auth.polar.com/oauth/authorize?client_id=CLIENT_ID&response_type=code&scope=REQUESTED_SCOPES
Parameters and their definitions
Name
Required
Description
client_id
YES
Unique client id provided by Polar when the client is registered in the admin page.
response_type
YES
Specifies used authorization flow. "code" is the only response type supported and means that authorization code flow is used.
scope
YES
Requested scope or space-delimited list of scopes.
redirect_uri
NO
Redirect URL used by the client. Must be identical to the redirect URL given during AccessLink client registration or any other URL that has been added for the client. Note that you can add multiple URLs for the client by modifying the client in the admin page. If redirect_uri
is not specified in the request the only existing URL or the one flagged as the default URL will be used.
state
NO
An opaque string. This will be given as parameter when making a request to the redirect URL. It can be used to prevent CSRF attacks .
On success, user will be shown the authorization form. After granting authorization, user will be redirected to URL
specified by the optional redirect_uri
.
If specified, value of the redirect_uri
must be identical to the redirect URL given during AccessLink client
registration or any other URL that has been added for the client.
You can modify, add and delete client's redirect URLs in the admin
page: https://admin.polaraccesslink.com/ .
You can also select which URL to use as the default URL when redirect_uri
is not provided in the request.
If specified redirect_uri
is not found from the client then error code is included in the response.
Otherwise, the authorization code will be provided as a query parameter as part of the request when user is redirected to
the specified location.
Examples:
http://www.random.redirect.does.not.ex.ist/products/list?product_id=332211&state=yourState&code=71682f9544255285736fb6d2d8acb6cf
http://www.another.redirect.does.not.ex.ist?code=71682f9544255285736fb6d2d8acb6cf
If an error occurs, user will be redirected to location defined in default redirect_uri with error code included. Example:
http://www.another.redirect.does.not.ex.ist?error=invalid_scope&state=yourState
Token endpoint
To exchange the authorization code to an access / refresh token, send POST request to:
https://auth.polar.com/oauth/token
With the authorization code, an access token can be requested by posting the authorization code to the token endpoint.
The access token is valid for 12 hours. A refresh token must be used to get a new access token.
Authorization : Basic auth with base64 encoded string client_id:client_secret. For example,
if your client id is 12345
and client secret is verySecret
, then you
need to base64 encode string 12345:verySecret
, resulting
MTIzNDU6dmVyeVNlY3JldA==
. Value of the authorization header in
that case should be Basic MTIzNDU6dmVyeVNlY3JldA==
Content-Type : application/x-www-form-urlencoded
Response JSON object
{
"access_token": "<access token value>",
"token_type": "bearer",
"refresh_token": "<refresh token value>",
"expires_in": 43199,
"scope": "REQUESTED_SCOPE",
"jti": "2dede3ca-0b04-4e41-b655-752dcd979713"
}
Request POST data
Name
Required
Description
grant_type
YES
Must be always value "authorization_code"
code
YES
Authorization code received from authorization endpoint
refresh_token
YES
Refresh token value (only for refresh token flow)
redirect_uri
NO
Must be specified if redirect_uri was passed to authorization endpoint (only for authorization code flow)
Scopes
Scope
Description
activity:read
Allows read access to User's daily activity data
calendar:read
Allows read access to User's calendar entries
continuous_samples:read
Allows read access to User's continuous samples
devices:read
Allows read access to devices User has registered
nightly_recharge:read
Allows read access to User's nightly recharge information
ppi_data:read
Allows read access to User's pulse-to-pulse intervals
profile:read
Allows read access to User's profile, including email, picture etc.
routes:read
Allows read access to User's Routes information
skin_contact:read
Allows read access to User's skin contact information
sleep:read
Allows read access to User's sleep information
sports:read
Allows read access to Sports and User's Sport Profiles information
temperature_measurement:read
Allows read access to User's temperature measurement information
tests:read
Allows read access to User's tests
training_sessions:read
Allows read access to User's training sessions
training_targets:read
Allows read access to User's training targets
user_subscription:read
Allows read access to User's subscriptions
Calendar
Endpoints for managing calendar entries.
List calendar entries
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/calendar/list?from= string&to= string \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/calendar/list?from=string&to=string HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/calendar/list?from=string&to=string ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/calendar/list' ,
params: {
'from' => 'string' ,
'to' => 'string'
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/calendar/list?from=string&to=string' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/calendar/list?from=string&to=string" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /calendar/list
List user calendar entries within requested range. Parameters 'from' and 'to' control the range of the data. Maximum date range is 90 days. Use features to select which calendar entry types are to be returned .
Parameters
Parameter
In
Type
Required
Description
from
query
string
true
Inclusive start date for the requested period.
to
query
string
true
Exclusive end date for the requested period.
features
query
array[string]
false
Optional. List of features to include in the response.
Detailed descriptions
from : Inclusive start date for the requested period.
Date in ISO 8601 format.
to : Exclusive end date for the requested period.
Date in ISO 8601 format.
features : Optional. List of features to include in the response.
Available features: notes, feeling, feedback, perceived-recovery, weight, physical-information
Example responses
200 Response
{
"data" : {
"entries" : [
{
"note" : {
"created" : "2025-09-18T21:46:01.869Z" ,
"modified" : "2025-09-18T21:46:01.869Z" ,
"dateTime" : "2025-09-18T21:46:01.869Z" ,
"value" : "Some notes"
},
"feeling" : {
"created" : "2025-09-18T21:46:01.869Z" ,
"modified" : "2025-09-18T21:46:01.869Z" ,
"dateTime" : "2025-09-18T21:46:01.869Z" ,
"value" : 1 ,
"comment" : "Some comment"
},
"feedback" : {
"created" : "2025-09-18T21:46:01.869Z" ,
"modified" : "2025-09-18T21:46:01.869Z" ,
"dateTime" : "2025-09-18T21:46:01.869Z" ,
"value" : "string"
},
"perceivedRecovery" : {
"created" : "2025-09-18T21:46:01.869Z" ,
"modified" : "2025-09-18T21:46:01.869Z" ,
"dateTime" : "2025-09-18T21:46:01.869Z" ,
"muscleSoreness" : "MUSCLE_SORENESS_UNSPECIFIED" ,
"overallFatigue" : "OVERALL_FATIGUE_UNSPECIFIED" ,
"sleepUserRating" : "SLEEP_USER_RATING_UNSPECIFIED"
},
"weight" : {
"created" : "2025-09-18T21:46:01.870Z" ,
"modified" : "2025-09-18T21:46:01.870Z" ,
"dateTime" : "2025-09-18T21:46:01.870Z" ,
"value" : 15
},
"physicalInformation" : {
"created" : "2025-09-18T21:46:01.870Z" ,
"modified" : "2025-09-18T21:46:01.870Z" ,
"dateTime" : "2025-09-18T21:46:01.870Z" ,
"height" : 90 ,
"weight" : 15 ,
"maximumHeartRate" : 100 ,
"restingHeartRate" : 240 ,
"aerobicThreshold" : 240 ,
"anaerobicThreshold" : 240 ,
"vo2Max" : 10 ,
"trainingBackground" : "TRAINING_BACKGROUND_UNSPECIFIED" ,
"weightSource" : "WEIGHT_SOURCE_UNSPECIFIED" ,
"sleepGoal" : "string" ,
"typicalDay" : "TYPICAL_DAY_UNSPECIFIED" ,
"weeklyRtSum" : 0.1 ,
"functionalThresholdPower" : 60
}
}
]
}
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: calendar:read )
Continuous samples
Endpoints for managing continuous samples.
Load continuous samples
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/continuous-samples?from= string&to= string \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/continuous-samples?from=string&to=string HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/continuous-samples?from=string&to=string ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/continuous-samples' ,
params: {
'from' => 'string' ,
'to' => 'string'
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/continuous-samples?from=string&to=string' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/continuous-samples?from=string&to=string" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /continuous-samples
Loads samples for a user by date range. Parameters 'from' and 'to' control the range of the data. Maximum date range for heart rate samples is 30 days. Uses features to specify the sample types.
Parameters
Parameter
In
Type
Required
Description
from
query
string
true
Inclusive start date for the requested period. Date in ISO 8601 format.
to
query
string
true
Exclusive end date for the requested period. Date in ISO 8601 format.
features
query
array[string]
false
List of features to include in the response.
Detailed descriptions
features : List of features to include in the response.
Available features: heart-rate-samples
Example responses
200 Response
{
"continuousSamples" : {
"heartRateSamplesPerDay" : [
{
"date" : "2025-01-01" ,
"deviceRef" : {
"deviceId" : "A1B2C3D4E5"
},
"state" : 123456789 ,
"samples" : [
{
"heartRate" : 80 ,
"offsetMillis" : 300 ,
"triggerType" : "TRIGGER_TIMED_247"
}
]
}
]
}
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: continuous_samples:read )
Daily activity
Endpoints for managing daily activity data.
List user daily activity
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/activity/list \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/activity/list HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/activity/list ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/activity/list' ,
params: {
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/activity/list' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/activity/list" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /activity/list
Lists all days where user has activity data stored.Parameters 'from' and 'to' control the range of the data. When no features are in use, date range can be 90 days. If features are used, only one day at a time can be requested.Without features the response contains only the dates where activity data is available.
Parameters
Parameter
In
Type
Required
Description
from
query
string
false
Inclusive start date for the requested period.
to
query
string
false
Exclusive end date for the requested period.
features
query
array[string]
false
Optional. List of features to include in the response.
Detailed descriptions
from : Inclusive start date for the requested period.
Required. Date in ISO 8601 format.
to : Exclusive end date for the requested period.
Required. Date in ISO 8601 format.
features : Optional. List of features to include in the response.
Available features: samples, activity-target, physical-information
Example responses
200 Response
{
"activities" : {
"activityDays" : [
{
"date" : "2000-01-01" ,
"target" : {
"minDailyMetGoal" : "345.4"
},
"physicalInformation" : {
"birthday" : "1995-05-13" ,
"sex" : "SEX_UNSPECIFIED" ,
"height" : "172.0" ,
"weight" : "79.0" ,
"maximumHeartRate" : "195" ,
"restingHeartRate" : "55" ,
"aerobicThreshold" : "130" ,
"anaerobicThreshold" : "175" ,
"vo2Max" : "55" ,
"trainingBackground" : "TRAINING_BACKGROUND_UNSPECIFIED" ,
"weightSource" : "WEIGHT_SOURCE_UNSPECIFIED" ,
"sleepGoal" : "14400000"
},
"activitiesPerDevice" : [
{
"deviceReference" : {
"deviceId" : "ABC102003"
},
"activitySamples" : [
{
"sportInfos" : [
{
"factor" : "2.0" ,
"time" : "14:41:45"
}
],
"activityInfos" : [
{
"activityClass" : "ACTIVITY_CLASS_SLEEP" ,
"time" : "14:41:45" ,
"factor" : "2.0"
}
],
"inactivityInfos" : [
{
"time" : "14:41:45"
}
],
"stepSamples" : {
"startTime" : "14:41:45" ,
"interval" : "60000" ,
"steps" : [
0
]
},
"metSamples" : {
"startTime" : "14:41:45" ,
"interval" : "60000" ,
"mets" : [
0.1
]
}
}
]
}
]
}
]
}
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: activity:read )
Favorites
Endpoints for favorites data. Favorites are pre-defined training targets or routes that users have saved in their Polar Flow account for easy access and repeated use. Favorites can include specific workouts, training sessions, or routes with set parameters such as duration, distance, intensity, or heart rate targets.
Load user favorites
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/training-target/favorites \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/training-target/favorites HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/training-target/favorites ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/training-target/favorites' ,
params: {
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/training-target/favorites' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/training-target/favorites" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /training-target/favorites
Example responses
200 Response
{
"favoriteTarget" : [
{
"favorite" : {
"id" : "string" ,
"created" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"modified" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"name" : "string" ,
"description" : "string" ,
"organisationId" : "string"
},
"exercise" : [
{
"idx" : 0 ,
"type" : "FREE" ,
"duration" : 1000 ,
"distance" : 1 ,
"kiloCalories" : 1 ,
"sportId" : "string" ,
"routeId" : "string" ,
"segmentId" : "string" ,
"phaseOrRepeat" : [
{
"name" : "string" ,
"changeType" : "MANUAL" ,
"goal" : {
"type" : "MANUAL" ,
"duration" : 1000 ,
"distance" : 1
},
"intensity" : {
"type" : "NONE" ,
"lowerZone" : 1 ,
"upperZone" : 1
},
"repeatCount" : 2 ,
"phaseOrRepeat" : [
{}
]
}
]
}
]
}
]
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: training_targets:read )
Hello World
Returns a greeting message
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/hello \
-H 'Accept: text/plain'
GET https://www.polaraccesslink.com/v4/data/hello HTTP / 1.1
Host : www.polaraccesslink.com
Accept : text/plain
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' text/plain '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/hello ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'text/plain'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/hello' ,
params: {
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'text/plain'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/hello' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/hello" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /hello
Example responses
200 Response
Responses
Status
Meaning
Description
Schema
200
OK
A successful response
string
This operation does not require authentication
Nightly Recharge
Endpoints for nightly recharge data.
/nightly-recharge-results
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/nightly-recharge-results?from= string&to= string \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/nightly-recharge-results?from=string&to=string HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/nightly-recharge-results?from=string&to=string ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/nightly-recharge-results' ,
params: {
'from' => 'string' ,
'to' => 'string'
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/nightly-recharge-results?from=string&to=string' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/nightly-recharge-results?from=string&to=string" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /nightly-recharge-results
Lists all Nightly Recharge results of a user in a given date range.Parameters 'from' and 'to' control the range of the data. When no features are in use, date range can be 28 days. If features are used, only one day at a time can be requested.
Parameters
Parameter
In
Type
Required
Description
from
query
string
true
Date in ISO 8601 format. Inclusive start date for the requested period.
to
query
string
true
Date in ISO 8601 format. Exclusive end date for the requested period.
features
query
array[string]
false
List of features to include in the response.
Detailed descriptions
features : List of features to include in the response.
Available features:
samples
Example responses
200 Response
{
"nightlyRechargeResults" : {
"nightlyRechargeResults" : [
{
"created" : "2025-01-01T10:12:33.435Z" ,
"modified" : "2025-01-01T10:12:33.435Z" ,
"ansStatus" : -15.7068 ,
"recoveryIndicator" : 1 ,
"recoveryIndicatorSubLevel" : 100 ,
"ansRate" : 1 ,
"meanNightlyRecoveryRri" : 800 ,
"meanNightlyRecoveryRmssd" : 800 ,
"meanNightlyRecoveryRespirationInterval" : 800 ,
"meanBaselineRri" : 800 ,
"sdBaselineRri" : 800 ,
"meanBaselineRmssd" : 800 ,
"sdBaselineRmssd" : 800 ,
"meanBaselineRespirationInterval" : 800 ,
"sdBaselineRespirationInterval" : 800 ,
"sleepTip" : "Consider reserving more time for sleep in your schedule. Keep your diet healthy, and take a moment for yourself for relaxing. This might improve the regenerative qualities of your sleep." ,
"vitalityTip" : "Take a nap, if you like. A power nap of no more than 20-30 minutes might do the trick. The best remedy for low energy levels today is reserving some time for rest." ,
"exerciseTip" : "You can train today, even if you might feel you're not 100% up for it." ,
"sleepResultDate" : "2025-01-01" ,
"hrvSamples" : [
{
"startTime" : "2025-09-18T21:46:01.878Z" ,
"sampleInterval" : "300s" ,
"hrvValues" : [
0.1
]
}
],
"breathingRateSamples" : [
{
"startTime" : "2025-09-18T21:46:01.878Z" ,
"sampleInterval" : "300s" ,
"breathingRateValues" : [
0.1
]
}
]
}
]
}
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: nightly_recharge:read )
Profile Pictures
Endpoints for managing user profile pictures.
Load profile picture
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/user/profile-picture?size= small \
-H 'Accept: image/*' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/user/profile-picture?size=small HTTP / 1.1
Host : www.polaraccesslink.com
Accept : image/*
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' image/* ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/user/profile-picture?size=small ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'image/*' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/user/profile-picture' ,
params: {
'size' => 'string'
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'image/*' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/user/profile-picture?size=small' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/user/profile-picture?size=small" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /user/profile-picture
Load profile picture of a user in a given size. The endpoint returns image data (e.g., JPEG, PNG) with the appropriate Content-Type header. Parameter 'size' is used to specify the size of the profile picture.
Parameters
Parameter
In
Type
Required
Description
size
query
string
true
Size of the profile picture.
Enumerated Values
Parameter
Value
size
small
size
medium
size
large
Example responses
200 Response
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: profile:read )
Pulse to pulse interval data
Endpoints for loading pulse to pulse interval (PPI) data.
/ppi-samples
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/ppi-samples?from= string&to= string \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/ppi-samples?from=string&to=string HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/ppi-samples?from=string&to=string ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/ppi-samples' ,
params: {
'from' => 'string' ,
'to' => 'string'
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/ppi-samples?from=string&to=string' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/ppi-samples?from=string&to=string" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /ppi-samples
Lists user's pulse-to-pulse interval samples in given range. Parameters 'from' and 'to' control the range of the data. When no features are in use, date range can be 90 days. If features are used, only one day at a time can be requested. Without features only dates and last modified timestamps are returned for days containing PPI data
Parameters
Parameter
In
Type
Required
Description
from
query
string
true
Date in ISO 8601 format. Inclusive start date for the requested period.
to
query
string
true
Date in ISO 8601 format. Exclusive end date for the requested period.
features
query
array[string]
false
Optional. List of features to include in the response.
Detailed descriptions
features : Optional. List of features to include in the response.
Available features: samples.
Example responses
200 Response
{
"dailyPpiSamples" : [
{
"date" : "2025-08-01" ,
"modified" : "2025-08-01T12:00:00Z" ,
"ppiSamplesPerDevice" : [
{
"recordingDevice" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"ppiSamples" : [
{
"offsetMillis" : 70 ,
"ppInterval" : 1052 ,
"errorEstimateMillis" : 10 ,
"skinContact" : true ,
"movement" : false ,
"offline" : false
}
],
"recordingTriggerTypeChanges" : [
{
"triggerType" : "TRIGGER_TYPE_UNDEFINED" ,
"offsetMillis" : 70
}
]
}
]
}
]
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: ppi_data:read )
Routes
Endpoints for route data. Routes are navigational paths the user saves in Polar Flow Favorites for use on supported devices; they can be imported (GPX/TCX), organized per device, and synced to the device for guidance during training.
RouteService_LoadRoute
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/routes/{ routeId} \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/routes/{routeId} HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/routes/{routeId} ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/routes/{routeId}' ,
params: {
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/routes/{routeId}' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/routes/{routeId}" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /routes/{routeId}
Loads route data using route id. Note that loading 3rd party routes (e.g. Komoot, Strava, ...) is not supported.
Parameters
Parameter
In
Type
Required
Description
routeId
path
string(uint64)
true
Route id - Mandatory.
Detailed descriptions
routeId : Route id - Mandatory.
Route id can be acquired by first fetching a list of Favorite or Calendar targets:
- Calendar Training Targets (GET: /training-target/calendar-targets).
- Favorites (GET: /training-target/favorites).
and then extracting the wanted Route id from the response data.
Example responses
200 Response
{
"userRoute" : {
"id" : "string" ,
"route" : {
"name" : "string" ,
"distanceMeters" : 0.1 ,
"routeSource" : "string" ,
"sourceId" : "string" ,
"sourceVersionIdentifier" : "string" ,
"routePoints" : [
{
"location" : {
"longitude" : 0.1 ,
"latitude" : 0.1 ,
"altitudeMeters" : 0.1
},
"distanceFromStartMeters" : 0.1 ,
"timeOffsetFromStartMillis" : 0 ,
"instructions" : [
{
"turn" : {
"direction" : "NO_DIRECTION" ,
"type" : "REGULAR"
},
"fork" : {
"direction" : "NO_DIRECTION"
},
"continueStraight" : {},
"uTurn" : {},
"roundaboutExit" : {
"currentExitNumber" : 0 ,
"targetExitNumber" : 0 ,
"totalExits" : 0 ,
"orientation" : "UNKNOWN"
}
}
]
}
],
"hasInstructions" : true ,
"sportId" : 0
},
"created" : "2019-08-24T14:15:22Z" ,
"modified" : "2019-08-24T14:15:22Z" ,
"legacyRouteId" : "string"
}
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: routes:read )
Endpoint for Skin Contact data.
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/skin-contacts?from= string&to= string \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/skin-contacts?from=string&to=string HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/skin-contacts?from=string&to=string ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/skin-contacts' ,
params: {
'from' => 'string' ,
'to' => 'string'
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/skin-contacts?from=string&to=string' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/skin-contacts?from=string&to=string" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /skin-contacts
Lists all Skin Contact data of a user in a given date range. Parameters 'from' and 'to' control the range of the data. Range is inclusive for 'from' and exclusive for 'to'. Range is limited to 90 days.
Parameters
Parameter
In
Type
Required
Description
from
query
string
true
Inclusive start date for the requested period. Date in ISO 8601 format.
to
query
string
true
Exclusive end date for the requested period. Date in ISO 8601 format.
Example responses
200 Response
{
"skinContactPeriods" : [
{
"created" : "2025-04-03T00:00:00Z" ,
"modified" : "2025-04-03T12:29:25.266Z" ,
"startTime" : "2025-09-18T21:46:01.883Z" ,
"stopTime" : "2025-09-18T21:46:01.883Z" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"skinContactChanges" : [
{
"recordingTimeDeltaMilliseconds" : 1000 ,
"skinContact" : true
}
]
}
]
}
Responses
Response Schema
Status Code 400
Name
Type
Required
Description
Status Code 403
Name
Type
Required
Description
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: skin_contact:read )
Sleep
Endpoints for sleep data.
/sleep-wake-vectors
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/sleep-wake-vectors?from= string&to= string \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/sleep-wake-vectors?from=string&to=string HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/sleep-wake-vectors?from=string&to=string ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/sleep-wake-vectors' ,
params: {
'from' => 'string' ,
'to' => 'string'
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/sleep-wake-vectors?from=string&to=string' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/sleep-wake-vectors?from=string&to=string" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /sleep-wake-vectors
Lists user's sleep/wake state vectors in the given date range. Range maximum length is 7 days. Data is only available for the last 90 days.
Parameters
Parameter
In
Type
Required
Description
from
query
string
true
Inclusive start date for the requested period. Date in ISO 8601 format.
to
query
string
true
Exclusive end date for the requested period. Date in ISO 8601 format.
Example responses
200 Response
{
"sleepWakeVectors" : [
{
"date" : "2025-01-02" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"sleepWakeStateChanges" : [
{
"startOffset" : 0 ,
"newState" : "SLEEP_WAKE_STATE_SLEEP"
}
]
}
]
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: sleep:read )
/sleeps
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/sleeps?from= string&to= string \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/sleeps?from=string&to=string HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/sleeps?from=string&to=string ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/sleeps' ,
params: {
'from' => 'string' ,
'to' => 'string'
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/sleeps?from=string&to=string' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/sleeps?from=string&to=string" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /sleeps
Lists user's sleep data in a given date range. Parameters 'from' and 'to' control the range of the data. When no features are in use, maximum date range is 30 days. If features are used, only one day at a time can be requested. Without features the response contains only the dates where sleep data is available.
Parameters
Parameter
In
Type
Required
Description
from
query
string
true
Inclusive start date for the requested period. Date in ISO 8601 format.
to
query
string
true
Exclusive end date for the requested period. Date in ISO 8601 format.
features
query
array[string]
false
List of features to include in the response.
Detailed descriptions
features : List of features to include in the response.
Available features:
sleep-result,
original-sleep-result,
sleep-evaluation,
sleep-score.
Example responses
200 Response
{
"nightSleeps" : [
{
"sleepDate" : "2025-01-02" ,
"sleepResult" : {
"hypnogram" : {
"sleepStart" : "2025-01-01T23:12:33.435+02:00" ,
"sleepEnd" : "2025-01-02T08:12:33.435+02:00" ,
"alarmStopTime" : "2025-01-02T08:15:33.435+02:00" ,
"alarmSnoozeTimes" : [
"2025-01-01T08:05:00.435+02:00" ,
"2025-01-01T08:10:00.435+02:00"
],
"sleepStateChanges" : [
{
"offsetFromStart" : "30s" ,
"newState" : "SLEEP_STATE_WAKE"
}
],
"sleepStartOffsetSeconds" : -3600 ,
"sleepEndOffsetSeconds" : -10800 ,
"sleepRating" : "SLEEP_RATING_UNKNOWN" ,
"sleepGoal" : "28800s" ,
"birthday" : "2000-01-01" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"batteryRanOut" : true
},
"sleepCycles" : [
{
"secondsFromSleepStart" : 0 ,
"sleepDepthAtCycleStart" : 2
}
]
},
"originalSleepResult" : {
"hypnogram" : {
"sleepStart" : "2025-01-01T23:12:33.435+02:00" ,
"sleepEnd" : "2025-01-02T08:12:33.435+02:00" ,
"alarmStopTime" : "2025-01-02T08:15:33.435+02:00" ,
"alarmSnoozeTimes" : [
"2025-01-01T08:05:00.435+02:00" ,
"2025-01-01T08:10:00.435+02:00"
],
"sleepStateChanges" : [
{
"offsetFromStart" : "30s" ,
"newState" : "SLEEP_STATE_WAKE"
}
],
"sleepStartOffsetSeconds" : -3600 ,
"sleepEndOffsetSeconds" : -10800 ,
"sleepRating" : "SLEEP_RATING_UNKNOWN" ,
"sleepGoal" : "28800s" ,
"birthday" : "2000-01-01" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"batteryRanOut" : true
},
"sleepCycles" : [
{
"secondsFromSleepStart" : 0 ,
"sleepDepthAtCycleStart" : 2
}
]
},
"sleepScore" : {
"created" : "2025-05-20T03:00:59.064Z" ,
"lastModified" : "2025-05-20T03:00:59.064Z" ,
"sleepScore" : 1 ,
"sleepTimeOwnTargetScore" : 1 ,
"sleepTimeRecommendationScore" : 1 ,
"continuityScore" : 1 ,
"efficiencyScore" : 1 ,
"remScore" : 1 ,
"n3Score" : 1 ,
"longInterruptionsTimeScore" : 1 ,
"groupDurationScore" : 1 ,
"groupSolidityScore" : 1 ,
"groupRefreshScore" : 1 ,
"scoreRate" : 1
},
"sleepEvaluation" : {
"sleepType" : "SLEEP_TYPE_UNKNOWN" ,
"sleepSpan" : "string" ,
"asleepDuration" : "string" ,
"age" : 0.1 ,
"analysis" : {
"efficiencyPercent" : 100 ,
"continuityIndex" : 5 ,
"continuityClass" : 5 ,
"feedback" : "01101"
},
"interruptions" : {
"totalDuration" : "220s" ,
"longDuration" : "180s" ,
"shortDuration" : "40s" ,
"totalCount" : 0 ,
"longCount" : 0 ,
"shortCount" : 0
},
"phaseDurations" : {
"wake" : "60s" ,
"rem" : "70s" ,
"light" : "80s" ,
"deep" : "90s" ,
"unknown" : "100s" ,
"remPercentage" : 100 ,
"deepPercentage" : 100
}
}
}
]
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: sleep:read )
Sports and Sport Profiles
Endpoints for Polar sports and user sport profiles. Sports are a Polar-managed catalogue (you can’t create new sports) that define defaults like speed/pace view, GPS, and supported features. Sport profiles are the user’s configurable per‑sport settings and training views managed in Polar Flow.
Retrieves all Sports available in the Polar ecosystem.
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/sports/list \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/sports/list HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/sports/list ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/sports/list' ,
params: {
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/sports/list' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/sports/list" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /sports/list
Returns the Polar sports catalogue used when creating sport profiles. Use this as a reference for sport_id values in profiles.
Example responses
200 Response
{
"sports" : [
{
"id" : {
"id" : 0
},
"modified" : "2024-03-26T07:07:33Z" ,
"localizedNames" : {
"property1" : {
"longName" : "string"
},
"property2" : {
"longName" : "string"
}
},
"parentSport" : {
"id" : 0
},
"type" : "SINGLE_SPORT" ,
"defaultSpeedView" : "SPEED_VIEW_PACE" ,
"defaultGpsSetting" : "GPS_SETTING_OFF" ,
"defaultAltitudeActive" : true ,
"defaultAutomaticLap" : "AUTOMATIC_LAP_OFF" ,
"defaultTapActive" : true ,
"supportedFeatures" : {
"speedZones" : true ,
"sensorBroadcastingHr" : true
}
}
]
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: sports:read )
Load user's sport profile list catalog.
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/sports/profile-list-catalog \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/sports/profile-list-catalog HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/sports/profile-list-catalog ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/sports/profile-list-catalog' ,
params: {
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/sports/profile-list-catalog' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/sports/profile-list-catalog" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /sports/profile-list-catalog
Loads the user’s sport profile list catalogue including the active list index and the ordered profile UUIDs. This mirrors Flow’s Sport profiles ordering: active list items are transferred to devices on sync (up to device limits, typically 20). Use this to inspect or manage which profiles are active and their order before initiating a sync in Flow.
Example responses
200 Response
{
"catalog" : {
"uuid" : "string" ,
"created" : "2019-08-24T14:15:22Z" ,
"modified" : "2019-08-24T14:15:22Z" ,
"activeSportProfileListIndex" : 0 ,
"lists" : [
{
"index" : 0 ,
"sportProfileUuids" : [
"string"
]
}
]
}
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: sports:read )
List user's Sport profiles.
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/sports/profiles \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/sports/profiles HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/sports/profiles ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/sports/profiles' ,
params: {
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/sports/profiles' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/sports/profiles" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /sports/profiles
Lists the user’s sport profiles from Polar Flow. A sport profile contains per‑sport settings and training views (e.g., speed/pace view, GPS, zones, reminders, product‑specific displays).
Example responses
200 Response
{
"profiles" : [
{
"uuid" : "string" ,
"created" : "2019-08-24T14:15:22Z" ,
"modified" : "2019-08-24T14:15:22Z" ,
"profile" : {
"sportId" : 0 ,
"settings" : {
"sensorBroadcastingHr" : true ,
"hrZoneLockAvailable" : true ,
"speedZoneLockAvailable" : true ,
"powerZoneLockAvailable" : true ,
"volume" : {
"volume" : 0
},
"speedView" : "SPEED_VIEW_PACE" ,
"zoneOptimizerSetting" : "ZONE_OPTIMIZER_SETTING_OFF" ,
"zoneLimits" : {
"heartRateZones" : [
{
"lowerLimit" : 0 ,
"higherLimit" : 0
}
],
"speedZones" : [
{
"lowerLimit" : 0.1 ,
"higherLimit" : 0.1
}
],
"powerZones" : [
{
"lowerLimit" : 0 ,
"higherLimit" : 0
}
],
"heartRateSettingSource" : "HEART_RATE_ZONE_SETTING_SOURCE_DEFAULT" ,
"powerSettingSource" : "POWER_ZONE_SETTING_SOURCE_DEFAULT" ,
"speedSettingSource" : "SPEED_ZONE_SETTING_SOURCE_DEFAULT" ,
"powerZoneCalculationMethod" : "POWER_ZONE_CALCULATION_METHOD_UNKNOWN" ,
"speedZoneCalculationMethod" : "SPEED_ZONE_CALCULATION_METHOD_UNKNOWN"
},
"trainingReminder" : {
"type" : "TRAINING_REMINDER_TYPE_OFF" ,
"text" : "string" ,
"calorie" : 0 ,
"time" : 0 ,
"distance" : 0.1
},
"powerView" : "POWER_VIEW_WATT" ,
"strideSpeedSource" : "STRIDE_SPEED_SOURCE_STRIDE" ,
"swimmingUnits" : "SWIMMING_UNITS_METERS" ,
"muscleLoadSetting" : "MUSCLE_LOAD_SETTING_OFF" ,
"remoteButtonActions" : [
"REMOTE_BUTTON_ACTION_RING_BELL"
]
},
"sportFactor" : 0.1 ,
"aerobicThreshold" : 0 ,
"anaerobicThreshold" : 0 ,
"sprintDetectionSettings" : {
"source" : "SPRINT_DETECTION_SOURCE_OFF" ,
"sprintThresholdAcceleration" : 0.1 ,
"sprintThresholdSpeed" : 0.1
},
"productSettings" : [
{
"product" : {
"modelName" : "string"
},
"vibration" : true ,
"autoScrolling" : true ,
"strideSensorCalibSettings" : {
"runningFactor" : 0.1 ,
"calibType" : "STRIDE_CALIB_TYPE_MANUAL" ,
"runningFactorSource" : "RUNNING_FACTOR_SOURCE_DEFAULT"
},
"swimmingPool" : {
"swimmingPoolType" : "SWIMMING_POOL_UNITS_METERS" ,
"poolLength" : 0.1
},
"altitudeSetting" : "ALTITUDE_SETTING_OFF" ,
"gpsSetting" : "GPS_SETTING_OFF" ,
"autoPause" : {
"trigger" : "AUTO_PAUSE_TRIGGER_OFF" ,
"speedThreshold" : 0.1
},
"autolapSettings" : {
"automaticLap" : "AUTOMATIC_LAP_OFF" ,
"automaticLapDistance" : 0.1 ,
"automaticLapDuration" : 0
},
"heartRateView" : "HEART_RATE_VIEW_BPM" ,
"capellaDisplaySettings" : {
"trainingDisplay" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
],
"lapDisplay" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
]
},
"alcorSiriusDisplaySettings" : {
"display" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
],
"lastShownDisplay" : 0 ,
"addedDefaultDisplays" : 0
},
"tapButtonAction" : "TAP_BUTTON_ACTION_OFF" ,
"sportTapButtonSensitivity" : "SPORT_TAP_BUTTON_SENSITIVITY_OFF" ,
"voiceGuidance" : true
}
],
"subProfileUuids" : [
"string"
]
}
}
]
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: sports:read )
Subscription
Endpoints for user subscriptions related data.
/subscriptions
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/subscriptions \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/subscriptions HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/subscriptions ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/subscriptions' ,
params: {
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/subscriptions' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/subscriptions" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /subscriptions
List all user subscriptions and their related entitlements.
Example responses
200 Response
{
"userSubscriptions" : {
"userSubscriptions" : [
{
"subscriptionPlan" : {
"subscriptionProduct" : {
"subscriptionProductName" : "paidcontent" ,
"entitlements" : [
{
"name" : "atp"
}
]
},
"duration" : "P1M" ,
"store" : "STORE_UNKNOWN"
},
"status" : "STATUS_UNKNOWN" ,
"purchasedAt" : "2025-09-18T21:46:01.890Z" ,
"expiresAt" : "2025-09-18T21:46:01.890Z" ,
"createdAt" : "2025-09-18T21:46:01.890Z" ,
"modifiedAt" : "2025-09-18T21:46:01.890Z" ,
"isFreeTrial" : true ,
"eventLogs" : [
{
"event" : "CREATED" ,
"generatedBy" : "Apple App Store notification" ,
"createdAt" : "2025-09-18T21:46:01.890Z"
}
]
}
]
}
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: user_subscription:read )
Temperature Measurement
Endpoint for Temperature Measurement data. These device recorded measurements may include, for example: skin temperatures.
/temperature-measurements
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/temperature-measurements?from= string&to= string \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/temperature-measurements?from=string&to=string HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/temperature-measurements?from=string&to=string ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/temperature-measurements' ,
params: {
'from' => 'string' ,
'to' => 'string'
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/temperature-measurements?from=string&to=string' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/temperature-measurements?from=string&to=string" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /temperature-measurements
Lists all temperature measurements of a user in a given date range.Parameters 'from' and 'to' control the range of the data. Range is inclusive for 'from' and exclusive for 'to'. Range is limited to 90 days.
Parameters
Parameter
In
Type
Required
Description
from
query
string
true
Inclusive start date for the requested period. Date in ISO 8601 format.
to
query
string
true
Exclusive end date for the requested period. Date in ISO 8601 format.
Example responses
200 Response
{
"temperatureMeasurementPeriod" : [
{
"created" : "2025-04-04T00:00:00Z" ,
"modified" : "2025-04-04T11:00:01.342Z" ,
"startTime" : "2025-09-18T21:46:01.891Z" ,
"stopTime" : "2025-09-18T21:46:01.891Z" ,
"measurementType" : "TM_UNKNOWN" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"sensorLocation" : "SL_UNKNOWN" ,
"temperatureMeasurementSamples" : [
{
"recordingTimeDeltaMilliseconds" : 1000 ,
"temperatureCelsius" : 36.5
}
]
}
]
}
Responses
Response Schema
Status Code 403
Name
Type
Required
Description
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: temperature_measurement:read )
Tests
Endpoints for managing user tests.
List user test results
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/tests/list?from= string&to= string \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/tests/list?from=string&to=string HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/tests/list?from=string&to=string ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/tests/list' ,
params: {
'from' => 'string' ,
'to' => 'string'
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/tests/list?from=string&to=string' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/tests/list?from=string&to=string" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /tests/list
List user test results within requested range. Parameters 'from' and 'to' control the range of the data. When no features are in use, date range can be 90 days. If features are used, only one day at a time can be requested.
Parameters
Parameter
In
Type
Required
Description
from
query
string
true
Inclusive start date for the requested period.
to
query
string
true
Exclusive end date for the requested period.
features
query
array[string]
false
Optional. List of features to include in the response.
Detailed descriptions
from : Inclusive start date for the requested period.
Date in ISO 8601 format.
to : Exclusive end date for the requested period.
Date in ISO 8601 format.
features : Optional. List of features to include in the response.
Available features:
samples
Example responses
200 Response
{
"data" : {
"tests" : [
{
"created" : "2025-09-18T21:46:01.892Z" ,
"modified" : "2025-09-18T21:46:01.892Z" ,
"startTime" : "2025-09-18T21:46:01.892Z" ,
"jumpTestResult" : {
"jumpTestType" : "JUMP_TEST_TYPE_SQUAT" ,
"durationMillis" : 60000 ,
"legMuscleRecovery" : {
"recoveryStatus" : "RECOVERED" ,
"lowLimit" : 0.1 ,
"baseline" : 0.1
},
"jumps" : [
{
"flightTime" : 350 ,
"contactTime" : 250
}
]
},
"orthostaticTestResult" : {
"rrAvgSupine" : 829 ,
"rrMinStandup" : 567 ,
"rrAvgStand" : 675 ,
"rrLtAvgSupine" : 942 ,
"rrLtAvgMinStandup" : 615 ,
"rrLtAvgStand" : 648 ,
"rmssdSupine" : 47 ,
"rmssdLtAvgSupine" : 40 ,
"rmssdStand" : 16 ,
"rmssdLtAvgStand" : 19 ,
"rrSamples" : [
0
],
"lastResetDate" : "2021-01-01"
},
"fitnessTestResult" : {
"ownIndex" : 45 ,
"maximumHeartRate" : 180 ,
"averageHeartRate" : 60 ,
"fitnessClass" : "GOOD" ,
"timezoneOffsetMinutes" : 60 ,
"physicalInformation" : {
"birthday" : "2010-02-21" ,
"sex" : "MALE" ,
"height" : 172 ,
"weight" : 79.4 ,
"maximumHeartRate" : 100 ,
"restingHeartRate" : 55 ,
"aerobicThreshold" : 240 ,
"anaerobicThreshold" : 175 ,
"vo2Max" : 45 ,
"trainingBackground" : "TRAINING_BACKGROUND_REGULAR" ,
"weightSource" : "WEIGHT_SOURCE_DEFAULT" ,
"sleepGoal" : 28800000
}
},
"rrRecording" : {
"maximumHeartRate" : 180 ,
"minimumHeartRate" : 100 ,
"averageHeartRate" : 130 ,
"endTime" : "2025-09-18T21:46:01.892Z" ,
"rrSamples" : [
0
]
},
"ecgTestResult" : {
"testTime" : "2025-09-18T21:46:01.892Z" ,
"stopTime" : "2025-09-18T21:46:01.892Z" ,
"timeZoneOffsetMinutes" : 60 ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"averageHeartRateBpm" : 70 ,
"heartRateVariabilityMs" : 970 ,
"heartRateVariabilityLevel" : "ECG_HRV_LEVEL_USUAL" ,
"rriMs" : 857 ,
"pulseArrivalTimeAtContractionMs" : 100 ,
"pulseArrivalTimeAtRelaxationMs" : 200 ,
"pulseTransitTimeQualityIndex" : 98 ,
"samples" : [
{
"recordingTimeDeltaMs" : 1000 ,
"amplitudeMv" : 0.5
}
],
"qualityMeasurements" : [
{
"recordingTimeDeltaMs" : 1000 ,
"qualityLevel" : "ECG_QUALITY_HIGH"
}
]
},
"spo2TestResult" : {
"testTime" : "2025-04-03T12:29:25.266Z" ,
"stopTime" : "2025-09-18T21:46:01.892Z" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"timeZoneOffsetMinutes" : 60 ,
"testStatus" : "SPO2_TEST_PASSED" ,
"bloodOxygenPercent" : 97 ,
"spo2Class" : "SPO2_CLASS_NORMAL" ,
"spo2ValueDeviationFromBaseline" : "DEVIATION_USUAL" ,
"spo2QualityAveragePercent" : 98 ,
"averageHeartRateBpm" : 70 ,
"heartRateVariabilityMs" : 970 ,
"spo2HrvDeviationFromBaseline" : "DEVIATION_USUAL" ,
"altitudeMeters" : 150
}
}
]
}
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: tests:read )
Training Sessions
Endpoints for managing training sessions.
List user training sessions
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/training-sessions/list \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/training-sessions/list HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/training-sessions/list ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/training-sessions/list' ,
params: {
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/training-sessions/list' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/training-sessions/list" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /training-sessions/list
Lists all Training Sessions of a user in a given date range. Parameters 'from' and 'to' control the range of the data. When no features are in use, date range can be 90 days. If features are used, only one day at a time can be requested.
Parameters
Parameter
In
Type
Required
Description
from
query
string
false
Required. Date in ISO 8601 format. Inclusive start date for the requested period.
to
query
string
false
Required. Date in ISO 8601 format. Exclusive end date for the requested period.
features
query
array[string]
false
Optional. List of features to include in the response.
Detailed descriptions
features : Optional. List of features to include in the response.
Available features:
samples,
test-results,
training-load-report,
laps,
hill-splits,
routes,
statistics,
zones,
pause-times,
strength-training-results,
comments
Example responses
200 Response
{
"trainingSessions" : [
{
"identifier" : {
"id" : "123466345"
},
"created" : "2025-09-18T21:46:01.894Z" ,
"modified" : "2025-09-18T21:46:01.894Z" ,
"startTime" : "2025-09-18T21:46:01.894Z" ,
"stopTime" : "2025-09-18T21:46:01.894Z" ,
"durationMillis" : 3600000 ,
"name" : "Some training" ,
"feeling" : 0.8 ,
"deviceId" : "ABC102003" ,
"note" : "Some notes" ,
"latitude" : 37.7749 ,
"longitude" : -122.4194 ,
"distanceMeters" : 9840 ,
"calories" : 500 ,
"trainingLoad" : 350 ,
"trainingBenefit" : "TRAINING_BENEFIT_RECOVERY_TRAINING" ,
"carboPercentage" : 60 ,
"fatPercentage" : 30 ,
"proteinPercentage" : 10 ,
"recoveryTimeMillis" : 3600000 ,
"hrMax" : 180 ,
"hrAvg" : 160 ,
"timezoneOffsetMinutes" : 180 ,
"nutritionData" : {
"carbohydrateGrams" : 0.1 ,
"proteinGrams" : 0.1 ,
"fatGrams" : 0.1
},
"startTrigger" : "TRAINING_START_MANUAL" ,
"physicalInformation" : {
"modified" : "2025-09-18T21:46:01.894Z" ,
"created" : "2025-09-18T21:46:01.894Z" ,
"birthday" : "2025-01-01" ,
"sex" : "SEX_MALE" ,
"weightKg" : 88.5 ,
"heightCm" : 180 ,
"maximumHeartRate" : 128 ,
"restingHeartRate" : 57 ,
"aerobicThreshold" : 137 ,
"anaerobicThreshold" : 182 ,
"vo2Max" : 55 ,
"trainingBackground" : "TRAINING_BACKGROUND_REGULAR" ,
"typicalDay" : "TYPICAL_DAY_MOSTLY_SITTING" ,
"metThreshold" : 2.125 ,
"weeklyRtSum" : 0.1 ,
"functionalThresholdPower" : 250 ,
"speedCalibrationOffset" : 0 ,
"weightSource" : "WEIGHT_SOURCE_SOURCE_USER" ,
"sleepGoalMinutes" : 450 ,
"maximumAerobicPower" : 300 ,
"maximumAerobicSpeedKmh" : 12.3 ,
"maximumAerobicSpeedSource" : "MAXIMUM_AEROBIC_SPEED_SOURCE_USER"
},
"application" : {
"name" : "Polar Flow"
},
"sport" : {
"id" : "22353647432"
},
"product" : {
"modelName" : "POLAR VANTAGE V"
},
"trainingTarget" : {
"id" : "2353647432"
},
"favoriteTarget" : {
"id" : "2353647432"
},
"exercises" : [
{
"identifier" : {
"id" : "2353647432"
},
"created" : "2025-09-18T21:46:01.894Z" ,
"modified" : "2025-09-18T21:46:01.894Z" ,
"startTime" : "2025-09-18T21:46:01.894Z" ,
"stopTime" : "2025-09-18T21:46:01.894Z" ,
"durationMillis" : 3600000 ,
"distanceMeters" : 9840 ,
"calories" : 500 ,
"fatPercentage" : 30 ,
"recoveryTimeMillis" : 3600000 ,
"trainingLoad" : 350 ,
"carboPercentage" : 60 ,
"proteinPercentage" : 10 ,
"runningIndex" : 55 ,
"latitude" : 37.7749 ,
"longitude" : -122.4194 ,
"ascentMeters" : 500 ,
"descentMeters" : 450 ,
"sprintCounter" : 15 ,
"walkingDurationMillis" : 3600000 ,
"walkingDistanceMeters" : 9840 ,
"speedCalibrationOffset" : 0 ,
"timezoneOffsetMinutes" : 180 ,
"calibrationOffsets" : [
{
"sampleSourceType" : "SAMPLE_SOURCE_TYPE_WRIST_METRICS" ,
"value" : 0.1
}
],
"nutritionData" : {
"carbohydrateGrams" : 0.1 ,
"proteinGrams" : 0.1 ,
"fatGrams" : 0.1
},
"sport" : {
"id" : "22353647432"
},
"strengthTrainingResults" : {
"completedRounds" : [
{
"type" : "COMPLETED_ROUND_TYPE_AMRAP" ,
"startTimeDeltaMillis" : 60000 ,
"endTimeDeltaMillis" : 80000 ,
"workoutPhase" : "WORKOUT_PHASE_WARMUP" ,
"completedSets" : [
{
"type" : "SET_TYPE_WORK" ,
"startTimeDeltaMillis" : 60000 ,
"endTimeDeltaMillis" : 80000 ,
"resistanceType" : "RESISTANCE_BODY_WEIGHT" ,
"movement" : "string" ,
"avgHeartRate" : 120 ,
"maxHeartRate" : 140
}
]
}
]
},
"trainingLoadReport" : {
"cardioLoad" : 123.45 ,
"muscleLoad" : 234.56 ,
"cardioLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"muscleLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"calculationTime" : "2025-09-18T21:46:01.895Z" ,
"sessionRpe" : "RPE_MODERATE" ,
"perceivedLoad" : 0.1 ,
"perceivedLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM"
},
"laps" : {
"laps" : [
{
"splitTimeMillis" : 0 ,
"durationMillis" : 600000 ,
"distanceMeters" : 1500 ,
"startLocationLatitude" : 37.7749 ,
"startLocationLongitude" : -122.4194 ,
"startLocationAltitude" : 15 ,
"startLocationTimeMillis" : 0 ,
"ascentMeters" : 100 ,
"descentMeters" : 80 ,
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"avgSecsPerPool" : 0.1 ,
"poolsSwum" : 10 ,
"strokes" : 81
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
}
}
],
"autoLaps" : [
{
"splitTimeMillis" : 0 ,
"durationMillis" : 600000 ,
"distanceMeters" : 1500 ,
"startLocationLatitude" : 37.7749 ,
"startLocationLongitude" : -122.4194 ,
"startLocationAltitude" : 15 ,
"startLocationTimeMillis" : 0 ,
"ascentMeters" : 100 ,
"descentMeters" : 80 ,
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"avgSecsPerPool" : 0.1 ,
"poolsSwum" : 10 ,
"strokes" : 81
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
}
}
]
},
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"distanceMeters" : 1500 ,
"totalStrokeCount" : 100 ,
"poolsSwum" : 10 ,
"poolUnits" : "POOL_UNIT_METERS" ,
"poolLength" : 25 ,
"swimmingStyles" : [
{
"style" : "SWIMMING_STYLE_FREESTYLE" ,
"distanceMeters" : 500 ,
"strokeCount" : 81 ,
"swimmingTimeTotalMillis" : 0 ,
"poolTimeMinMillis" : 0 ,
"hrAvg" : 120 ,
"hrMax" : 140 ,
"swolfAvg" : 30
}
]
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
},
"zones" : [
{
"type" : "ZONE_TYPE_HEART_RATE" ,
"zones" : [
{
"lowerLimit" : 100 ,
"higherLimit" : 120 ,
"inZone" : 100 ,
"distanceMeters" : 1000 ,
"muscleLoad" : 100
}
]
}
],
"samples" : {
"samples" : [
{
"type" : "HEART_RATE" ,
"intervalMillis" : 1000 ,
"values" : [
88 ,
89 ,
90
]
}
],
"transitionSamples" : [
{
"type" : "HEART_RATE" ,
"intervalMillis" : 1000 ,
"values" : [
88 ,
89 ,
90
]
}
],
"rrSamples" : [
{
"durationMillis" : 800 ,
"offline" : true
}
],
"transitionRrSamples" : [
{
"durationMillis" : 800 ,
"offline" : true
}
],
"swimmingPhases" : {
"startTime" : "2025-09-18T21:46:01.895Z" ,
"phases" : [
{
"startOffsetMillis" : 32423 ,
"durationMillis" : 67500 ,
"style" : "BREASTSTROKE" ,
"strokes" : 31
}
]
}
},
"routes" : {
"route" : {
"startTime" : "2025-09-18T21:46:01.895Z" ,
"wayPoints" : [
{
"longitude" : -122.4194 ,
"latitude" : 37.7749 ,
"altitude" : 15 ,
"elapsedMillis" : 0
}
]
},
"transitionRoute" : {
"startTime" : "2025-09-18T21:46:01.895Z" ,
"wayPoints" : [
{
"longitude" : -122.4194 ,
"latitude" : 37.7749 ,
"altitude" : 15 ,
"elapsedMillis" : 0
}
]
}
},
"pauseTimes" : [
{
"startTime" : "2025-09-18T21:46:01.895Z" ,
"endTime" : "2025-09-18T21:46:01.895Z"
}
]
}
],
"testResults" : {
"cyclingTest" : {
"startTime" : "2025-09-18T21:46:01.895Z" ,
"endTime" : "2025-09-18T21:46:01.895Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.895Z" ,
"endTime" : "2025-09-18T21:46:01.895Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.895Z" ,
"endTime" : "2025-09-18T21:46:01.895Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.895Z" ,
"endTime" : "2025-09-18T21:46:01.895Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"fitnessClass" : "FITNESS_CLASS_GOOD" ,
"functionalThresholdPower" : 250 ,
"previousFunctionalThresholdPower" : 240 ,
"vo2max" : 55
},
"runningTest" : {
"startTime" : "2025-09-18T21:46:01.895Z" ,
"endTime" : "2025-09-18T21:46:01.895Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.895Z" ,
"endTime" : "2025-09-18T21:46:01.895Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.895Z" ,
"endTime" : "2025-09-18T21:46:01.895Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.895Z" ,
"endTime" : "2025-09-18T21:46:01.895Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"category" : "RUNNING_TEST_CATEGORY_MAXIMAL" ,
"maxAerobicSpeedKmh" : 2.8 ,
"maxAerobicPower" : 300 ,
"maxHrBpm" : 182 ,
"vo2max" : 55 ,
"initialSpeedKmh" : 8 ,
"speedIncreaseRate" : 0.5 ,
"qualityRatePercent" : 95
},
"walkingTest" : {
"startTime" : "2025-09-18T21:46:01.896Z" ,
"endTime" : "2025-09-18T21:46:01.896Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.895Z" ,
"endTime" : "2025-09-18T21:46:01.895Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.895Z" ,
"endTime" : "2025-09-18T21:46:01.895Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.895Z" ,
"endTime" : "2025-09-18T21:46:01.895Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"category" : "WALKING_TEST_CATEGORY_TIMED_15_MIN" ,
"fitnessClass" : "VO2MAX_FITNESS_CLASS_GOOD" ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"testDistanceMeters" : 1500 ,
"steps" : 2000 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"testHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"vo2max" : 55 ,
"walkingPercent" : 70 ,
"speedVariationPercent" : 30 ,
"cadenceVariationPercent" : 20 ,
"hrAbove65ProsMaxHr" : 15 ,
"allCriterionQualityPercent" : 90 ,
"steadyWalkingGuidance" : 85 ,
"walkingSpeedGuidance" : 5 ,
"duration" : 900000
}
},
"hillSplits" : {
"startTime" : "2025-09-18T21:46:01.896Z" ,
"endTime" : "2025-09-18T21:46:01.896Z" ,
"totalUphillDistanceMeters" : 1500 ,
"totalDownhillDistanceMeters" : 1000 ,
"totalUphillCount" : 10 ,
"totalDownhillCount" : 9 ,
"hills" : [
{
"type" : "HILL_TYPE_UPHILL" ,
"startTime" : "2025-09-18T21:46:01.896Z" ,
"endTime" : "2025-09-18T21:46:01.896Z" ,
"upHill" : {
"uphillNumber" : 0 ,
"ascentMeters" : 100 ,
"avgInclinePercent" : 5
},
"downHill" : {
"downhillNumber" : 0 ,
"descentMeters" : 80 ,
"avgDeclinePercent" : 4
},
"distanceMeters" : 500 ,
"maxSpeedKmh" : 25 ,
"avgSpeedKmh" : 20 ,
"startAltitudeMeters" : 100 ,
"endAltitudeMeters" : 150 ,
"avgHrBpm" : 80 ,
"maxHrBpm" : 120 ,
"duration" : 900000 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
}
]
},
"trainingLoadReport" : {
"cardioLoad" : 123.45 ,
"muscleLoad" : 234.56 ,
"cardioLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"muscleLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"calculationTime" : "2025-09-18T21:46:01.895Z" ,
"sessionRpe" : "RPE_MODERATE" ,
"perceivedLoad" : 0.1 ,
"perceivedLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM"
},
"comments" : [
{
"identifier" : {
"id" : "string"
},
"created" : "2025-09-18T21:46:01.896Z" ,
"modified" : "2025-09-18T21:46:01.896Z" ,
"note" : "string" ,
"fromOtherUser" : true
}
]
}
]
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: training_sessions:read )
Training targets
Endpoints for training targets data. Training targets are structured workout plans or goals that users can create and follow to guide their exercise sessions. A training target can specify parameters such as exercise type, duration, distance, intensity, heart rate zones, or phases (e.g., warm-up, intervals, cool-down).
Load user training targets for given date range
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/training-target/calendar-targets \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/training-target/calendar-targets HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/training-target/calendar-targets ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/training-target/calendar-targets' ,
params: {
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/training-target/calendar-targets' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/training-target/calendar-targets" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /training-target/calendar-targets
Parameters
Parameter
In
Type
Required
Description
fromDate
query
string
false
Required. Date in ISO 8601 format. Inclusive start date for the requested period.
toDate
query
string
false
Required. Date in ISO 8601 format. Exclusive end date for the requested period.
Example responses
200 Response
{
"trainingTarget" : [
{
"session" : {
"id" : "string" ,
"created" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"modified" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"name" : "string" ,
"sportId" : "string" ,
"description" : "string" ,
"startTime" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"done" : true ,
"favoriteId" : "string" ,
"programId" : "string" ,
"eventId" : "string" ,
"onDemandTypeId" : 0 ,
"programUuid" : "string" ,
"programTargetUuid" : "string" ,
"programSourceType" : "string" ,
"guidance" : [
{
"dataSerializationType" : 0 ,
"data" : "string"
}
],
"version" : 0 ,
"nonUserEditable" : true
},
"exercise" : [
{
"idx" : 0 ,
"type" : "FREE" ,
"duration" : 1000 ,
"distance" : 1 ,
"kiloCalories" : 1 ,
"sportId" : "string" ,
"routeId" : "string" ,
"segmentId" : "string" ,
"phaseOrRepeat" : [
{
"name" : "string" ,
"changeType" : "MANUAL" ,
"goal" : {
"type" : "MANUAL" ,
"duration" : 1000 ,
"distance" : 1
},
"intensity" : {
"type" : "NONE" ,
"lowerZone" : 1 ,
"upperZone" : 1
},
"repeatCount" : 2 ,
"phaseOrRepeat" : [
{}
]
}
]
}
]
}
]
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: training_targets:read )
User Devices
Endpoints for managing user devices.
List user devices
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/user-devices \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/user-devices HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/user-devices ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/user-devices' ,
params: {
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/user-devices' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/user-devices" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /user-devices
Load all user device data.
Example responses
200 Response
{
"devicesData" : [
{
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"firmwareVersion" : "1.2.3" ,
"hardwareIdentifier" : "00123456.01" ,
"salesRegion" : "GLOBAL" ,
"productVariant" : {
"productDescription" : "Polar Vantage V" ,
"productColor" : "Black"
}
}
],
"userDevicesData" : {
"activeDevices" : [
{
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"registered" : "2025-01-01T10:12:33Z" ,
"deviceSettings" : [
{
"name" : "language" ,
"value" : "en"
}
]
}
],
"archivedDevices" : [
{
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"deregistered" : "2025-01-01T10:12:33Z"
}
],
"deviceRegistrationEvents" : [
{
"eventTimestamp" : "2025-01-01T10:12:33.435Z" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"eventType" : "EVENT_TYPE_UNSPECIFIED"
}
]
}
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: devices:read )
User account
Endpoints for managing user account data.
Load user account data
Code samples
# You can also use wget
curl -X GET https://www.polaraccesslink.com/v4/data/user/account-data \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET https://www.polaraccesslink.com/v4/data/user/account-data HTTP / 1.1
Host : www.polaraccesslink.com
Accept : application/json
const fetch = require ( ' node-fetch ' );
const headers = {
' Accept ' : ' application/json ' , ' Authorization ' : ' Bearer {access-token} '
};
fetch ( ' https://www.polaraccesslink.com/v4/data/user/account-data ' ,
{
method : ' GET ' ,
headers : headers
})
. then ( function ( res ) {
return res . json ();
}). then ( function ( body ) {
console . log ( body );
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json' ,
'Authorization' => 'Bearer {access-token}'
}
result = RestClient . get 'https://www.polaraccesslink.com/v4/data/user/account-data' ,
params: {
}, headers: headers
p JSON . parse ( result )
import requests
headers = {
'Accept' : 'application/json' , 'Authorization' : 'Bearer {access-token}'
};
r = requests . get ( 'https://www.polaraccesslink.com/v4/data/user/account-data' , headers = headers
)
if r . status_code >= 200 and r . status_code < 400 :
print ( r . json ())
else :
print ( r )
URL obj = new URL ( "https://www.polaraccesslink.com/v4/data/user/account-data" );
HttpURLConnection con = ( HttpURLConnection ) obj . openConnection ();
con . setRequestMethod ( "GET" );
int responseCode = con . getResponseCode ();
BufferedReader in = new BufferedReader (
new InputStreamReader ( con . getInputStream ()));
String inputLine ;
StringBuffer response = new StringBuffer ();
while (( inputLine = in . readLine ()) != null ) {
response . append ( inputLine );
}
in . close ();
System . out . println ( response . toString ());
GET /user/account-data
Returns all user's account data.
Example responses
200 Response
{
"accountData" : {
"basicInfo" : {
"firstName" : "John" ,
"lastName" : "Doe" ,
"email" : "john.doe@example.com" ,
"nickname" : "Johnny" ,
"created" : "2023-10-01T12:00:00Z" ,
"modified" : "2023-10-01T12:00:00Z"
},
"profileInformation" : {
"motto" : "No pain, no gain" ,
"favoriteSports" : [
{
"id" : "22353647432"
}
]
},
"localizationSettings" : {
"firstDayOfWeek" : "FIRST_DAY_OF_WEEK_MONDAY" ,
"measurementUnit" : "MEASUREMENT_UNIT_METRIC" ,
"dateFormat" : "DATE_FORMAT_DAY_MONTH_YEAR" ,
"dateSeparator" : "DATE_SEPARATOR_SLASH" ,
"timeFormat" : "TIME_FORMAT_TWENTY_FOUR_HOUR" ,
"timeSeparator" : "TIME_SEPARATOR_COLON" ,
"timezoneOffsetMinutes" : 180 ,
"language" : "en" ,
"flowLanguage" : "en"
},
"generalSettings" : [
{
"name" : "setting_key_name" ,
"value" : "setting value"
}
],
"physicalInformation" : {
"sex" : "SEX_MALE" ,
"birthday" : "2000-01-01" ,
"height" : "180.0" ,
"weight" : "70.0" ,
"weightSource" : "WEIGHT_SOURCE_MEASURED" ,
"trainingBackground" : "TRAINING_BACKGROUND_REGULAR" ,
"vo2Max" : "50" ,
"maximumHeartRate" : "180" ,
"restingHeartRate" : "60" ,
"aerobicThreshold" : "140" ,
"anaerobicThreshold" : "160" ,
"sleepGoal" : "28800000" ,
"typicalDay" : "TYPICAL_DAY_MOSTLY_SITTING" ,
"metThreshold" : "0.875" ,
"weeklyRecoveryTimeSum" : "28.35" ,
"functionalThresholdPower" : "200" ,
"speedCalibrationOffset" : "2.5" ,
"maximumAerobicPower" : "200" ,
"maximumAerobicSpeed" : "3.0" ,
"created" : "2023-10-01T12:00:00Z" ,
"modified" : "2023-10-01T12:00:00Z" ,
"weightLastModified" : "2023-10-01T12:00:00Z" ,
"trainingBackgroundLastModified" : "2023-10-01T12:00:00Z" ,
"vo2MaxLastModified" : "2023-10-01T12:00:00Z" ,
"sleepGoalLastModified" : "2023-10-01T12:00:00Z" ,
"weeklyRecoveryTimeSumLastModified" : "2023-10-01T12:00:00Z" ,
"functionalThresholdPowerLastModified" : "2023-10-01T12:00:00Z" ,
"maximumAerobicPowerLastModified" : "2023-10-01T12:00:00Z" ,
"maximumAerobicSpeedLastModified" : "2023-10-01T12:00:00Z"
},
"contactInformation" : {
"phoneNumber" : "+358123456789" ,
"address" : {
"street1" : "123 Main St" ,
"street2" : "Apt 4B" ,
"street3" : "Suite 100" ,
"countryCode" : "US" ,
"stateCode" : "NY" ,
"city" : "New York" ,
"zipCode" : "10001"
}
},
"consents" : [
{
"type" : "GDPR" ,
"version" : "2023-10-01" ,
"accepted" : "true" ,
"metadata" : [
{
"description" : "GDPR consent metadata description" ,
"content" : "GDPR consent metadata content"
}
],
"approvedDataTypes" : [
"string"
],
"unapprovedDataTypes" : [
"string"
]
}
],
"userTestPreferences" : {
"orthostaticResetDate" : "2023-10-01T12:00:00Z" ,
"created" : "2023-10-01T12:00:00Z" ,
"modified" : "2023-10-01T12:00:00Z"
},
"consentHistoryStates" : [
{
"type" : "string" ,
"version" : "string" ,
"created" : "2019-08-24T14:15:22Z" ,
"state" : "ACCEPTED" ,
"consentMetadata" : [
{
"description" : "GDPR consent metadata description" ,
"content" : "GDPR consent metadata content"
}
]
}
]
}
}
Responses
To perform this operation, you must be authenticated by means of one of the following methods:
OAuth2 ( Scopes: profile:read )
Schemas
SubscriptionPlanStore
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
STORE_UNKNOWN
anonymous
GOOGLE_PLAY_STORE
anonymous
POLAR_BETA
anonymous
APPLE_APP_STORE
domainssubscriptionErrorResponse
{
"errorMessage" : "string"
}
Properties
Name
Type
Required
Description
errorMessage
string
false
subscriptionEntitlement
Entitlement represents a feature or service that a user can access through their subscription.
Properties
Name
Type
Required
Description
name
string
true
subscriptionEventLogEntity
{
"event" : "CREATED" ,
"generatedBy" : "Apple App Store notification" ,
"createdAt" : "2025-09-18T21:46:01.906Z"
}
EventLogEntity represents an event log related to a user subscription.
Properties
Name
Type
Required
Description
event
string
true
generatedBy
string
true
Identifier of the component that generated the event.
createdAt
string(date-time)
true
Time when the event was created in ISO 8601 format.
subscriptionListSubscriptionsResponse
{
"userSubscriptions" : {
"userSubscriptions" : [
{
"subscriptionPlan" : {
"subscriptionProduct" : {
"subscriptionProductName" : "paidcontent" ,
"entitlements" : [
{
"name" : "atp"
}
]
},
"duration" : "P1M" ,
"store" : "STORE_UNKNOWN"
},
"status" : "STATUS_UNKNOWN" ,
"purchasedAt" : "2025-09-18T21:46:01.906Z" ,
"expiresAt" : "2025-09-18T21:46:01.906Z" ,
"createdAt" : "2025-09-18T21:46:01.906Z" ,
"modifiedAt" : "2025-09-18T21:46:01.906Z" ,
"isFreeTrial" : true ,
"eventLogs" : [
{
"event" : "CREATED" ,
"generatedBy" : "Apple App Store notification" ,
"createdAt" : "2025-09-18T21:46:01.906Z"
}
]
}
]
}
}
Properties
subscriptionSubscriptionPlan
{
"subscriptionProduct" : {
"subscriptionProductName" : "paidcontent" ,
"entitlements" : [
{
"name" : "atp"
}
]
},
"duration" : "P1M" ,
"store" : "STORE_UNKNOWN"
}
SubscriptionPlan represents a store specific subscription plan.
Properties
Name
Type
Required
Description
subscriptionProduct
subscriptionSubscriptionProduct
false
SubscriptionProduct represents a subscription product that a user can purchase.
duration
string
true
Duration of the subscription in ISO 8601 format.
store
SubscriptionPlanStore
false
Store where the subscription was purchased.
subscriptionSubscriptionProduct
{
"subscriptionProductName" : "paidcontent" ,
"entitlements" : [
{
"name" : "atp"
}
]
}
SubscriptionProduct represents a subscription product that a user can purchase.
Properties
Name
Type
Required
Description
subscriptionProductName
string
true
Name of the subscription product.
entitlements
[subscriptionEntitlement ]
false
Entitlements gained through this subscription product.
subscriptionUserSubscription
{
"subscriptionPlan" : {
"subscriptionProduct" : {
"subscriptionProductName" : "paidcontent" ,
"entitlements" : [
{
"name" : "atp"
}
]
},
"duration" : "P1M" ,
"store" : "STORE_UNKNOWN"
},
"status" : "STATUS_UNKNOWN" ,
"purchasedAt" : "2025-09-18T21:46:01.908Z" ,
"expiresAt" : "2025-09-18T21:46:01.908Z" ,
"createdAt" : "2025-09-18T21:46:01.908Z" ,
"modifiedAt" : "2025-09-18T21:46:01.908Z" ,
"isFreeTrial" : true ,
"eventLogs" : [
{
"event" : "CREATED" ,
"generatedBy" : "Apple App Store notification" ,
"createdAt" : "2025-09-18T21:46:01.908Z"
}
]
}
User subscription
Properties
Name
Type
Required
Description
subscriptionPlan
subscriptionSubscriptionPlan
false
SubscriptionPlan represents a store specific subscription plan.
status
subscriptionUserSubscriptionStatus
false
purchasedAt
string(date-time)
true
Time when the user subscription was purchased in ISO 8601 format.
expiresAt
string(date-time)
true
Time when the user subscription expires in ISO 8601 format.
createdAt
string(date-time)
true
Time when the user subscription entry was created in ISO 8601 format.
modifiedAt
string(date-time)
true
Time when the user subscription entry was last modified in ISO 8601 format.
isFreeTrial
boolean
false
Indicates if the user subscription is currently in free trial.
eventLogs
[subscriptionEventLogEntity ]
false
Event logs related to the user subscription.
subscriptionUserSubscriptionStatus
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
STATUS_UNKNOWN
anonymous
ACTIVE
anonymous
CANCELLED
anonymous
PAUSED
anonymous
IN_GRACE_PERIOD
anonymous
IN_BILLING_RETRY
anonymous
EXPIRED
subscriptionUserSubscriptions
{
"userSubscriptions" : [
{
"subscriptionPlan" : {
"subscriptionProduct" : {
"subscriptionProductName" : "paidcontent" ,
"entitlements" : [
{
"name" : "atp"
}
]
},
"duration" : "P1M" ,
"store" : "STORE_UNKNOWN"
},
"status" : "STATUS_UNKNOWN" ,
"purchasedAt" : "2025-09-18T21:46:01.909Z" ,
"expiresAt" : "2025-09-18T21:46:01.909Z" ,
"createdAt" : "2025-09-18T21:46:01.909Z" ,
"modifiedAt" : "2025-09-18T21:46:01.909Z" ,
"isFreeTrial" : true ,
"eventLogs" : [
{
"event" : "CREATED" ,
"generatedBy" : "Apple App Store notification" ,
"createdAt" : "2025-09-18T21:46:01.909Z"
}
]
}
]
}
User subscriptions
Properties
ExerciseTargetExerciseType
- FREE: Free target. This type of target has no guidance or goal.
VOLUME: Target that tracks a volume metric.
One of distance, duration, calories must be set for this type of target.
PHASED: Phased target. A target with a series of phases and repeats.
STEADY_RACE_PACE: Steady race pace target. Tracks race pace, which is a function of distance and duration.
Both duration and distance must be set for this type of target.
ROUTE: Target based on a training route.
SEGMENT: Target based on a Strava segment.
STRENGTH: Strength training target.*
Properties
Name
Type
Required
Description
anonymous
string
false
FREE: Free target. This type of target has no guidance or goal. VOLUME: Target that tracks a volume metric. One of distance, duration, calories must be set for this type of target. PHASED: Phased target. A target with a series of phases and repeats. STEADY_RACE_PACE: Steady race pace target. Tracks race pace, which is a function of distance and duration. Both duration and distance must be set for this type of target. ROUTE: Target based on a training route. SEGMENT: Target based on a Strava segment. STRENGTH: Strength training target.
Enumerated Values
Property
Value
anonymous
FREE
anonymous
VOLUME
anonymous
PHASED
anonymous
STEADY_RACE_PACE
anonymous
ROUTE
anonymous
SEGMENT
anonymous
STRENGTH
PhaseGoalGoalType
- MANUAL: Phase lasts until user manually changes the phase.
DURATION: Phase lasts for a set duration of time.
DISTANCE: Phase lasts for a set distance.*
Properties
Name
Type
Required
Description
anonymous
string
false
MANUAL: Phase lasts until user manually changes the phase. DURATION: Phase lasts for a set duration of time. DISTANCE: Phase lasts for a set distance.
Enumerated Values
Property
Value
anonymous
MANUAL
anonymous
DURATION
anonymous
DISTANCE
PhaseIntensityIntensityType
- NONE: Nothing is tracked.
HEART_RATE_ZONES: Heart rate data is tracked.
POWER_ZONES: Power data is tracked.
SPEED_ZONES: Speed data is tracked.*
Properties
Name
Type
Required
Description
anonymous
string
false
NONE: Nothing is tracked. HEART_RATE_ZONES: Heart rate data is tracked. POWER_ZONES: Power data is tracked. SPEED_ZONES: Speed data is tracked.
Enumerated Values
Property
Value
anonymous
NONE
anonymous
HEART_RATE_ZONES
anonymous
POWER_ZONES
anonymous
SPEED_ZONES
PhaseOrRepeatChangeType
*Type of behaviour wrist unit should follow during phase change.
MANUAL: User manually changes the exercise phase.
AUTOMATIC: Wrist unit automatically changes the exercise phase.*
Properties
Name
Type
Required
Description
anonymous
string
false
Type of behaviour wrist unit should follow during phase change. MANUAL: User manually changes the exercise phase. AUTOMATIC: Wrist unit automatically changes the exercise phase.
Enumerated Values
Property
Value
anonymous
MANUAL
anonymous
AUTOMATIC
domainstrainingtargetErrorResponse
{
"errorMessage" : "string"
}
Properties
Name
Type
Required
Description
errorMessage
string
false
trainingtargetDateTime
{
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
}
Date time in UTC
Properties
Name
Type
Required
Description
year
integer(int64)
false
month
integer(int64)
false
day
integer(int64)
false
hour
integer(int64)
false
min
integer(int64)
false
sec
integer(int64)
false
trainingtargetExerciseTarget
{
"idx" : 0 ,
"type" : "FREE" ,
"duration" : 1000 ,
"distance" : 1 ,
"kiloCalories" : 1 ,
"sportId" : "string" ,
"routeId" : "string" ,
"segmentId" : "string" ,
"phaseOrRepeat" : [
{
"name" : "string" ,
"changeType" : "MANUAL" ,
"goal" : {
"type" : "MANUAL" ,
"duration" : 1000 ,
"distance" : 1
},
"intensity" : {
"type" : "NONE" ,
"lowerZone" : 1 ,
"upperZone" : 1
},
"repeatCount" : 2 ,
"phaseOrRepeat" : [
{}
]
}
]
}
Target representing a single exercise.
Properties
Name
Type
Required
Description
idx
integer(int64)
true
Required. Each exercise target of a session target or a favorite has a unique index number. Determines exercise target order during training session.
type
ExerciseTargetExerciseType
false
Required. Type of target.
duration
integer(int64)
false
Goal duration. Required for STEADY_RACE_PACE type targets. See details under ExerciseType. Milliseconds between 1000 (0:00:01) and 359999000 (99:59:59).
distance
number(float)
false
Goal distance. Required for STEADY_RACE_PACE type targets. See details under ExerciseType. Meters between 1 and 9 999 000 (9 999 km).
kiloCalories
integer(int64)
false
Optional. Goal calories. Relevant for VOLUME type target. See details under ExerciseType. Kilocalories between 1 and 65535 kcal.
sportId
string(uint64)
false
Optional. Database id of the exercise target sport.
routeId
string(uint64)
false
A reference to the route in route-service. Required for ROUTE type targets.
segmentId
string(uint64)
false
Database id of the Strava segment this target is based on. Required for SEGMENT type targets.
phaseOrRepeat
[trainingtargetPhaseOrRepeat ]
false
List of phases and repeats for this target. Required for PHASED target types. PHASED type target must have 1 to 20 unique phases, ignoring repeats. Repeat structure can be max 2 levels deep. Maximum total number of phases is 200 when taking repeats into account.
trainingtargetFavoriteTarget
{
"favorite" : {
"id" : "string" ,
"created" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"modified" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"name" : "string" ,
"description" : "string" ,
"organisationId" : "string"
},
"exercise" : [
{
"idx" : 0 ,
"type" : "FREE" ,
"duration" : 1000 ,
"distance" : 1 ,
"kiloCalories" : 1 ,
"sportId" : "string" ,
"routeId" : "string" ,
"segmentId" : "string" ,
"phaseOrRepeat" : [
{
"name" : "string" ,
"changeType" : "MANUAL" ,
"goal" : {
"type" : "MANUAL" ,
"duration" : 1000 ,
"distance" : 1
},
"intensity" : {
"type" : "NONE" ,
"lowerZone" : 1 ,
"upperZone" : 1
},
"repeatCount" : 2 ,
"phaseOrRepeat" : [
{}
]
}
]
}
]
}
**
Favorite target.
Training targets can be generated by using favorites as templates.
Favorites can include routes and Strava segments in addition to standard target types.
See "ExerciseType" for all possible target types.*
Properties
Name
Type
Required
Description
favorite
trainingtargetFavoriteTrainingSessionTarget
true
Target representing a user favorite target. Required in requests, and will be filled in responses.
exercise
[trainingtargetExerciseTarget ]
false
Target representing a single exercise. Required in requests, and will be filled in responses. In theory one favorite session can have multiple exercise targets, but in practice only one exercise target is expected.
trainingtargetFavoriteTrainingSessionTarget
{
"id" : "string" ,
"created" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"modified" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"name" : "string" ,
"description" : "string" ,
"organisationId" : "string"
}
Favorite target.
Properties
Name
Type
Required
Description
id
string(uint64)
false
Database ID. Required for update requests. Will be filled in responses.
created
trainingtargetDateTime
false
Database time of creation. Optional for requests. Will be filled in responses.
modified
trainingtargetDateTime
false
Database time of last modification. Optional for requests. Will be filled in responses.
name
string
true
description
string
false
Optional. Description of favorite.
organisationId
string(uint64)
false
Database id of organisation this favorite belongs to. Required if favorite belongs to an organisation.
trainingtargetLoadFavoritesResponse
{
"favoriteTarget" : [
{
"favorite" : {
"id" : "string" ,
"created" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"modified" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"name" : "string" ,
"description" : "string" ,
"organisationId" : "string"
},
"exercise" : [
{
"idx" : 0 ,
"type" : "FREE" ,
"duration" : 1000 ,
"distance" : 1 ,
"kiloCalories" : 1 ,
"sportId" : "string" ,
"routeId" : "string" ,
"segmentId" : "string" ,
"phaseOrRepeat" : [
{
"name" : "string" ,
"changeType" : "MANUAL" ,
"goal" : {
"type" : "MANUAL" ,
"duration" : 1000 ,
"distance" : 1
},
"intensity" : {
"type" : "NONE" ,
"lowerZone" : 1 ,
"upperZone" : 1
},
"repeatCount" : 2 ,
"phaseOrRepeat" : [
{}
]
}
]
}
]
}
]
}
Properties
Name
Type
Required
Description
favoriteTarget
[trainingtargetFavoriteTarget ]
false
[* Favorite target. Training targets can be generated by using favorites as templates. Favorites can include routes and Strava segments in addition to standard target types. See "ExerciseType" for all possible target types.]
trainingtargetLoadTargetsResponse
{
"trainingTarget" : [
{
"session" : {
"id" : "string" ,
"created" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"modified" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"name" : "string" ,
"sportId" : "string" ,
"description" : "string" ,
"startTime" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"done" : true ,
"favoriteId" : "string" ,
"programId" : "string" ,
"eventId" : "string" ,
"onDemandTypeId" : 0 ,
"programUuid" : "string" ,
"programTargetUuid" : "string" ,
"programSourceType" : "string" ,
"guidance" : [
{
"dataSerializationType" : 0 ,
"data" : "string"
}
],
"version" : 0 ,
"nonUserEditable" : true
},
"exercise" : [
{
"idx" : 0 ,
"type" : "FREE" ,
"duration" : 1000 ,
"distance" : 1 ,
"kiloCalories" : 1 ,
"sportId" : "string" ,
"routeId" : "string" ,
"segmentId" : "string" ,
"phaseOrRepeat" : [
{
"name" : "string" ,
"changeType" : "MANUAL" ,
"goal" : {
"type" : "MANUAL" ,
"duration" : 1000 ,
"distance" : 1
},
"intensity" : {
"type" : "NONE" ,
"lowerZone" : 1 ,
"upperZone" : 1
},
"repeatCount" : 2 ,
"phaseOrRepeat" : [
{}
]
}
]
}
]
}
]
}
Properties
Name
Type
Required
Description
trainingTarget
[trainingtargetTrainingTarget ]
false
[* Training target. A target in user's calendar that will be used by wrist unit to suggest and guide exercises. See "ExerciseType" for all possible target types.]
trainingtargetPhaseGoal
{
"type" : "MANUAL" ,
"duration" : 1000 ,
"distance" : 1
}
Phase goal. Determines when the phase will be complete.
Properties
Name
Type
Required
Description
type
PhaseGoalGoalType
false
Required. Type of phase goal.
duration
integer(int64)
false
Required for DURATION goal type. Goal duration of phase. Milliseconds between 1000 (0:00:01) and 359999000 (99:59:59).
distance
number(float)
false
Required for DISTANCE goal type. Goal distance of phase. Meters between 1 and 9 999 000 (9 999 km).
trainingtargetPhaseIntensity
{
"type" : "NONE" ,
"lowerZone" : 1 ,
"upperZone" : 1
}
Type of metric that will be tracked during the phase
Properties
Name
Type
Required
Description
type
PhaseIntensityIntensityType
false
Required. Type of phase intensity.
lowerZone
integer(int64)
false
Lower zone bound for data tracking. Required for intensity types other than NONE. If tracked, goal of the phase is to stay at or above this zone limit, value from 1 to 5.
upperZone
integer(int64)
false
Upper zone bound for data tracking. Required for intensity types other than NONE. If tracked, goal of the phase is to stay at or below this zone limit, value from 1 to 5.
trainingtargetPhaseOrRepeat
{
"name" : "string" ,
"changeType" : "MANUAL" ,
"goal" : {
"type" : "MANUAL" ,
"duration" : 1000 ,
"distance" : 1
},
"intensity" : {
"type" : "NONE" ,
"lowerZone" : 1 ,
"upperZone" : 1
},
"repeatCount" : 2 ,
"phaseOrRepeat" : [
{
"name" : "string" ,
"changeType" : "MANUAL" ,
"goal" : {
"type" : "MANUAL" ,
"duration" : 1000 ,
"distance" : 1
},
"intensity" : {
"type" : "NONE" ,
"lowerZone" : 1 ,
"upperZone" : 1
},
"repeatCount" : 2 ,
"phaseOrRepeat" : []
}
]
}
Phase or repeat that is part of a exercise target.
Phases do not have repeats
Repeats can have phases, or more repeats
Properties
Name
Type
Required
Description
name
string
true
Phases will have these fields Required. Name of phase.
changeType
PhaseOrRepeatChangeType
false
Required. Phase change type. Type of behaviour wrist unit should follow during phase change.
goal
trainingtargetPhaseGoal
true
Required. Phase goal. Determines when the phase will be complete.
intensity
trainingtargetPhaseIntensity
false
repeatCount
integer(int64)
false
Repeats will have these fields How many times the child phases will be repeated, valid between 2 and 99 for repeats, unset for phases.
phaseOrRepeat
[trainingtargetPhaseOrRepeat ]
false
Required for repeats. Child phases.
trainingtargetTrainingSessionTarget
{
"id" : "string" ,
"created" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"modified" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"name" : "string" ,
"sportId" : "string" ,
"description" : "string" ,
"startTime" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"done" : true ,
"favoriteId" : "string" ,
"programId" : "string" ,
"eventId" : "string" ,
"onDemandTypeId" : 0 ,
"programUuid" : "string" ,
"programTargetUuid" : "string" ,
"programSourceType" : "string" ,
"guidance" : [
{
"dataSerializationType" : 0 ,
"data" : "string"
}
],
"version" : 0 ,
"nonUserEditable" : true
}
Target representing a full training session.
Properties
Name
Type
Required
Description
id
string(uint64)
false
Database ID. Required for update requests. Will be filled in responses.
created
trainingtargetDateTime
false
Database time of creation. Optional for requests. Will be filled in responses.
modified
trainingtargetDateTime
false
Database time of last modification. Optional for requests. Will be filled in responses.
name
string
true
Required. Name of the target. Max length is 45 characters.
sportId
string(uint64)
false
Sport of the target. All available sports can be loaded from the /v4/data/sports/list endpoint.
description
string
false
Optional. Description of the target. Max length is 500 characters.
startTime
trainingtargetDateTime
true
Required. Target start time.
done
boolean
false
Optional. Tells if the target is done or not. If true, it's expected that a training session exists that was executed based on the target and the session has the id of the target as a link.
favoriteId
string(uint64)
false
Database id of the favorite this target was based on. Required if target is based on a favorite.
programId
string(uint64)
false
Database id of program this target is part of. Required if target is part of an ETP program.
eventId
string(uint64)
false
Database id of an event training program event this target is for. Required for event targets. For example is user has ETP with goal of running a marathon, this is the event for the marathon.
onDemandTypeId
integer(int64)
false
On-demand type id. Not a DB id. Required for FitSpark targets.
programUuid
string
false
UUID of training program this target is part of. Required if target is part of a (non-ETP) training program.
programTargetUuid
string
false
UUID of specific training program target this target is based on. Required if target is part of a (non-ETP) training program.
programSourceType
string
false
Type of program this target belongs to. Required if target belongs to any program. ETP (Event Training Program) or ATP (Adaptive Training Program) for example.
guidance
[trainingtargetTrainingSessionTargetGuidances ]
false
Optional. Guidances related to training target. How to do movements, possibly links to relevant videos etc.
version
integer(int64)
false
The version of target. Used for optimistic locking. Required for update requests. The set value is ignored and overwritten when saving a new target. Will be filled in responses.
nonUserEditable
boolean
false
Whether the target is not editable by the user. An unset value is interpreted as false.
trainingtargetTrainingSessionTargetGuidances
{
"dataSerializationType" : 0 ,
"data" : "string"
}
Guidance related to training target
Properties
Name
Type
Required
Description
dataSerializationType
integer(int64)
true
Required. Type of serialization. Required so that clients know how to deserialize the data.
data
string
true
Required. Serialized data containing the guidance.
trainingtargetTrainingTarget
{
"session" : {
"id" : "string" ,
"created" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"modified" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"name" : "string" ,
"sportId" : "string" ,
"description" : "string" ,
"startTime" : {
"year" : 0 ,
"month" : 0 ,
"day" : 0 ,
"hour" : 0 ,
"min" : 0 ,
"sec" : 0
},
"done" : true ,
"favoriteId" : "string" ,
"programId" : "string" ,
"eventId" : "string" ,
"onDemandTypeId" : 0 ,
"programUuid" : "string" ,
"programTargetUuid" : "string" ,
"programSourceType" : "string" ,
"guidance" : [
{
"dataSerializationType" : 0 ,
"data" : "string"
}
],
"version" : 0 ,
"nonUserEditable" : true
},
"exercise" : [
{
"idx" : 0 ,
"type" : "FREE" ,
"duration" : 1000 ,
"distance" : 1 ,
"kiloCalories" : 1 ,
"sportId" : "string" ,
"routeId" : "string" ,
"segmentId" : "string" ,
"phaseOrRepeat" : [
{
"name" : "string" ,
"changeType" : "MANUAL" ,
"goal" : {
"type" : "MANUAL" ,
"duration" : 1000 ,
"distance" : 1
},
"intensity" : {
"type" : "NONE" ,
"lowerZone" : 1 ,
"upperZone" : 1
},
"repeatCount" : 2 ,
"phaseOrRepeat" : [
{}
]
}
]
}
]
}
**
Training target.
A target in user's calendar that will be used by wrist unit to suggest and guide exercises.
See "ExerciseType" for all possible target types.*
Properties
Name
Type
Required
Description
session
trainingtargetTrainingSessionTarget
true
Target representing a full training session. Required in requests, and will be filled in responses.
exercise
[trainingtargetExerciseTarget ]
false
Target representing a single exercise. Required in requests, and will be filled in responses. In theory one session can have multiple exercise targets, but in practice only one exercise target is expected.
CalibrationOffsetSampleSourceType
"SAMPLE_SOURCE_TYPE_WRIST_METRICS"
SampleSourceType
Properties
Name
Type
Required
Description
SampleSourceType
string
false
Enumerated Values
Property
Value
SampleSourceType
SAMPLE_SOURCE_TYPE_UNSPECIFIED
SampleSourceType
SAMPLE_SOURCE_TYPE_WRIST_METRICS
SampleSourceType
SAMPLE_SOURCE_TYPE_CHEST_METRICS
SampleSourceType
SAMPLE_SOURCE_TYPE_UPPER_BACK_METRICS
SampleSourceType
SAMPLE_SOURCE_TYPE_COMBINED_CHEST_METRICS_AND_GPS
SampleSourceType
SAMPLE_SOURCE_TYPE_COMBINED_UPPER_BACK_METRICS_AND_GPS
SampleSourceType
SAMPLE_SOURCE_TYPE_UNDEFINED
SampleSourceType
SAMPLE_SOURCE_TYPE_OFFLINE
SampleSourceType
SAMPLE_SOURCE_TYPE_HEART_RATE
SampleSourceType
SAMPLE_SOURCE_TYPE_HEART_RATE_BLE
SampleSourceType
SAMPLE_SOURCE_TYPE_HEART_RATE_5_KHZ
SampleSourceType
SAMPLE_SOURCE_TYPE_HEART_RATE_OPTICAL
SampleSourceType
SAMPLE_SOURCE_TYPE_GPS
SampleSourceType
SAMPLE_SOURCE_TYPE_STRIDE
SampleSourceType
SAMPLE_SOURCE_TYPE_BIKE_PEDAL
SampleSourceType
SAMPLE_SOURCE_TYPE_BIKE_WHEEL
SampleSourceType
SAMPLE_SOURCE_TYPE_BIKE_CRANK
CompletedRoundCompletedRoundType
"COMPLETED_ROUND_TYPE_AMRAP"
CompletedRoundType
Properties
Name
Type
Required
Description
CompletedRoundType
string
false
The completed round type.
Enumerated Values
Property
Value
CompletedRoundType
COMPLETED_ROUND_TYPE_UNSPECIFIED
CompletedRoundType
COMPLETED_ROUND_TYPE_AMRAP
CompletedRoundType
COMPLETED_ROUND_TYPE_EMOM
CompletedRoundType
COMPLETED_ROUND_TYPE_NORMAL
CompletedRoundWorkoutPhase
WorkoutPhase
Properties
Name
Type
Required
Description
WorkoutPhase
string
false
Enumerated Values
Property
Value
WorkoutPhase
WORKOUT_PHASE_UNSPECIFIED
WorkoutPhase
WORKOUT_PHASE_WARMUP
WorkoutPhase
WORKOUT_PHASE_WORK
WorkoutPhase
WORKOUT_PHASE_COOLDOWN
CompletedSetCompletedSetType
CompletedSetType
Properties
Name
Type
Required
Description
CompletedSetType
string
false
Enumerated Values
Property
Value
CompletedSetType
SET_TYPE_UNSPECIFIED
CompletedSetType
SET_TYPE_WORK
CompletedSetType
SET_TYPE_RECOVERY
CompletedSetType
SET_TYPE_HR_RECOVERY
CompletedSetResistanceType
ResistanceType
Properties
Name
Type
Required
Description
ResistanceType
string
false
Enumerated Values
Property
Value
ResistanceType
RESISTANCE_UNSPECIFIED
ResistanceType
RESISTANCE_BODY_WEIGHT
HillHillType
HillType
Properties
Name
Type
Required
Description
HillType
string
false
Enumerated Values
Property
Value
HillType
HILL_TYPE_UNKNOWN
HillType
HILL_TYPE_UPHILL
HillType
HILL_TYPE_DOWNHILL
IntervalValuesSampleType
SampleType
Properties
Name
Type
Required
Description
SampleType
string
false
Enumerated Values
Property
Value
SampleType
UNKNOWN_INTERVAL
SampleType
ALTITUDE
SampleType
SPEED
SampleType
DISTANCE
SampleType
TEMPERATURE
SampleType
FORWARD_ACCELERATION
SampleType
LEFT_RIGHT_BALANCE
SampleType
HEART_RATE
SampleType
CADENCE
SampleType
STRIDE_LENGTH
SampleType
MOVING_TYPE
SampleType
LEFT_CRANK_CURRENT_POWER
SampleType
LEFT_CRANK_CUMULATIVE_REVOLUTIONS
SampleType
LEFT_CRANK_CUMULATIVE_TIMESTAMP_MILLIS
SampleType
LEFT_CRANK_FORCE_MAGNITUDE_MIN
SampleType
LEFT_CRANK_FORCE_MAGNITUDE_MAX
SampleType
LEFT_CRANK_FORCE_MAGNITUDE_MIN_ANGLE
SampleType
LEFT_CRANK_FORCE_MAGNITUDE_MAX_ANGLE
SampleType
LEFT_CRANK_BOTTOM_DEAD_SPOT_ANGLE
SampleType
LEFT_CRANK_TOP_DEAD_SPOT_ANGLE
SampleType
RIGHT_CRANK_CURRENT_POWER
SampleType
RIGHT_CRANK_CUMULATIVE_REVOLUTIONS
SampleType
RIGHT_CRANK_CUMULATIVE_TIMESTAMP_MILLIS
SampleType
RIGHT_CRANK_FORCE_MAGNITUDE_MIN
SampleType
RIGHT_CRANK_FORCE_MAGNITUDE_MAX
SampleType
RIGHT_CRANK_FORCE_MAGNITUDE_MIN_ANGLE
SampleType
RIGHT_CRANK_FORCE_MAGNITUDE_MAX_ANGLE
SampleType
RIGHT_CRANK_BOTTOM_DEAD_SPOT_ANGLE
SampleType
RIGHT_CRANK_TOP_DEAD_SPOT_ANGLE
SampleType
BODY_TEMPERATURE
"MAXIMUM_AEROBIC_SPEED_SOURCE_USER"
MaximumAerobicSpeedSource
Properties
Name
Type
Required
Description
MaximumAerobicSpeedSource
string
false
The maximum aerobic speed source of the user.
Enumerated Values
Property
Value
MaximumAerobicSpeedSource
MAXIMUM_AEROBIC_SPEED_SOURCE_UNSPECIFIED
MaximumAerobicSpeedSource
MAXIMUM_AEROBIC_SPEED_SOURCE_ESTIMATE
MaximumAerobicSpeedSource
MAXIMUM_AEROBIC_SPEED_SOURCE_USER
RunningTestRunningTestCategory
"RUNNING_TEST_CATEGORY_MAXIMAL"
RunningTestCategory
Properties
Name
Type
Required
Description
RunningTestCategory
string
false
The running test category.
Enumerated Values
Property
Value
RunningTestCategory
RUNNING_TEST_CATEGORY_UNKNOWN
RunningTestCategory
RUNNING_TEST_CATEGORY_MAXIMAL
RunningTestCategory
RUNNING_TEST_CATEGORY_SUBMAXIMAL
RunningTestCategory
RUNNING_TEST_CATEGORY_FAILED
StatisticsStatisticsType
StatisticsType
Properties
Name
Type
Required
Description
StatisticsType
string
false
Enumerated Values
Property
Value
StatisticsType
STATISTICS_TYPE_UNSPECIFIED
StatisticsType
STATISTICS_TYPE_CADENCE
StatisticsType
STATISTICS_TYPE_HEART_RATE
StatisticsType
STATISTICS_TYPE_INCLINE
StatisticsType
STATISTICS_TYPE_POWER
StatisticsType
STATISTICS_TYPE_SPEED
StatisticsType
STATISTICS_TYPE_STRIDE_LENGTH
StatisticsType
STATISTICS_TYPE_ALTITUDE
StatisticsType
STATISTICS_TYPE_LEFT_RIGHT_BALANCE
StatisticsType
STATISTICS_TYPE_BODY_TEMPERATURE
SwimmingStatisticsPoolUnit
PoolUnit
Properties
Name
Type
Required
Description
PoolUnit
string
false
Enumerated Values
Property
Value
PoolUnit
POOL_UNIT_UNSPECIFIED
PoolUnit
POOL_UNIT_METERS
PoolUnit
POOL_UNIT_YARDS
TrainingLoadReportLoadInterpretation
"LOAD_INTERPRETATION_MEDIUM"
LoadInterpretation
Properties
Name
Type
Required
Description
LoadInterpretation
string
false
Enumerated Values
Property
Value
LoadInterpretation
LOAD_INTERPRETATION_UNKNOWN
LoadInterpretation
LOAD_INTERPRETATION_VERY_LOW
LoadInterpretation
LOAD_INTERPRETATION_LOW
LoadInterpretation
LOAD_INTERPRETATION_MEDIUM
LoadInterpretation
LOAD_INTERPRETATION_HIGH
LoadInterpretation
LOAD_INTERPRETATION_VERY_HIGH
LoadInterpretation
LOAD_INTERPRETATION_NOT_AVAILABLE
TrainingLoadReportSessionRPE
SessionRPE
Properties
Name
Type
Required
Description
SessionRPE
string
false
The session RPE (rate of perceived exertion).
Enumerated Values
Property
Value
SessionRPE
RPE_UNKNOWN
SessionRPE
RPE_NONE
SessionRPE
RPE_EASY
SessionRPE
RPE_LIGHT
SessionRPE
RPE_FAIRLY_BRISK
SessionRPE
RPE_BRISK
SessionRPE
RPE_MODERATE
SessionRPE
RPE_FAIRLY_HARD
SessionRPE
RPE_HARD
SessionRPE
RPE_EXHAUSTING
SessionRPE
RPE_EXTREME
TrainingSessionTrainingBenefit
"TRAINING_BENEFIT_RECOVERY_TRAINING"
TrainingBenefit
Properties
Name
Type
Required
Description
TrainingBenefit
string
false
Enumerated Values
Property
Value
TrainingBenefit
TRAINING_BENEFIT_UNSPECIFIED
TrainingBenefit
TRAINING_BENEFIT_NONE
TrainingBenefit
TRAINING_BENEFIT_RECOVERY_TRAINING
TrainingBenefit
TRAINING_BENEFIT_BASIC_TRAINING
TrainingBenefit
TRAINING_BENEFIT_BASIC_TRAINING_LONG
TrainingBenefit
TRAINING_BENEFIT_BASIC_AND_STEADY_STATE_TRAINING
TrainingBenefit
TRAINING_BENEFIT_BASIC_AND_STEADY_STATE_TRAINING_LONG
TrainingBenefit
TRAINING_BENEFIT_STEADY_STATE_TRAINING
TrainingBenefit
TRAINING_BENEFIT_STEADY_STATE_AND_BASIC_TRAINING
TrainingBenefit
TRAINING_BENEFIT_STEADY_STATE_AND_BASIC_TRAINING_LONG
TrainingBenefit
TRAINING_BENEFIT_STEADY_STATE_TRAINING_PLUS
TrainingBenefit
TRAINING_BENEFIT_STEADY_STATE_AND_TEMPO_TRAINING
TrainingBenefit
TRAINING_BENEFIT_TEMPO_AND_STEADY_STATE_TRAINING
TrainingBenefit
TRAINING_BENEFIT_TEMPO_TRAINING
TrainingBenefit
TRAINING_BENEFIT_TEMPO_TRAINING_PLUS
TrainingBenefit
TRAINING_BENEFIT_TEMPO_AND_MAXIMUM_TRAINING
TrainingBenefit
TRAINING_BENEFIT_MAXIMUM_TRAINING
TrainingBenefit
TRAINING_BENEFIT_MAXIMUM_AND_TEMPO_TRAINING
TrainingBenefit
TRAINING_BENEFIT_MAXIMUM_TRAINING_PLUS
TrainingSessionTrainingStartTrigger
TrainingStartTrigger
Properties
Name
Type
Required
Description
TrainingStartTrigger
string
false
The training start trigger.
Enumerated Values
Property
Value
TrainingStartTrigger
TRAINING_START_TRIGGER_UNSPECIFIED
TrainingStartTrigger
TRAINING_START_MANUAL
TrainingStartTrigger
TRAINING_START_AUTOMATIC_TRAINING_DETECTION
WalkingTestVO2maxFitnessClass
"VO2MAX_FITNESS_CLASS_GOOD"
VO2maxFitnessClass
Properties
Name
Type
Required
Description
VO2maxFitnessClass
string
false
The VO2max fitness class.
Enumerated Values
Property
Value
VO2maxFitnessClass
VO2MAX_FITNESS_CLASS_UNRECOGNIZED
VO2maxFitnessClass
VO2MAX_FITNESS_CLASS_VERY_LOW
VO2maxFitnessClass
VO2MAX_FITNESS_CLASS_LOW
VO2maxFitnessClass
VO2MAX_FITNESS_CLASS_FAIR
VO2maxFitnessClass
VO2MAX_FITNESS_CLASS_MODERATE
VO2maxFitnessClass
VO2MAX_FITNESS_CLASS_GOOD
VO2maxFitnessClass
VO2MAX_FITNESS_CLASS_VERY_GOOD
VO2maxFitnessClass
VO2MAX_FITNESS_CLASS_ELITE
WalkingTestWalkingTestCategory
"WALKING_TEST_CATEGORY_TIMED_15_MIN"
WalkingTestCategory
Properties
Name
Type
Required
Description
WalkingTestCategory
string
false
The walking test category.
Enumerated Values
Property
Value
WalkingTestCategory
WALKING_TEST_CATEGORY_UNKNOWN
WalkingTestCategory
WALKING_TEST_CATEGORY_FAILED
WalkingTestCategory
WALKING_TEST_CATEGORY_TIMED_15_MIN
ZonesZoneType
ZoneType
Properties
Name
Type
Required
Description
ZoneType
string
false
Enumerated Values
Property
Value
ZoneType
ZONE_TYPE_UNSPECIFIED
ZoneType
ZONE_TYPE_HEART_RATE
ZoneType
ZONE_TYPE_POWER
ZoneType
ZONE_TYPE_SPEED
ZoneType
ZONE_TYPE_FIT_FAT
domainstrainingsessionErrorResponse
{
"errorMessage" : "string"
}
Properties
Name
Type
Required
Description
errorMessage
string
false
domainstrainingsessionListResponse
{
"trainingSessions" : [
{
"identifier" : {
"id" : "123466345"
},
"created" : "2025-09-18T21:46:01.919Z" ,
"modified" : "2025-09-18T21:46:01.919Z" ,
"startTime" : "2025-09-18T21:46:01.919Z" ,
"stopTime" : "2025-09-18T21:46:01.919Z" ,
"durationMillis" : 3600000 ,
"name" : "Some training" ,
"feeling" : 0.8 ,
"deviceId" : "ABC102003" ,
"note" : "Some notes" ,
"latitude" : 37.7749 ,
"longitude" : -122.4194 ,
"distanceMeters" : 9840 ,
"calories" : 500 ,
"trainingLoad" : 350 ,
"trainingBenefit" : "TRAINING_BENEFIT_RECOVERY_TRAINING" ,
"carboPercentage" : 60 ,
"fatPercentage" : 30 ,
"proteinPercentage" : 10 ,
"recoveryTimeMillis" : 3600000 ,
"hrMax" : 180 ,
"hrAvg" : 160 ,
"timezoneOffsetMinutes" : 180 ,
"nutritionData" : {
"carbohydrateGrams" : 0.1 ,
"proteinGrams" : 0.1 ,
"fatGrams" : 0.1
},
"startTrigger" : "TRAINING_START_MANUAL" ,
"physicalInformation" : {
"modified" : "2025-09-18T21:46:01.919Z" ,
"created" : "2025-09-18T21:46:01.919Z" ,
"birthday" : "2025-01-01" ,
"sex" : "SEX_MALE" ,
"weightKg" : 88.5 ,
"heightCm" : 180 ,
"maximumHeartRate" : 128 ,
"restingHeartRate" : 57 ,
"aerobicThreshold" : 137 ,
"anaerobicThreshold" : 182 ,
"vo2Max" : 55 ,
"trainingBackground" : "TRAINING_BACKGROUND_REGULAR" ,
"typicalDay" : "TYPICAL_DAY_MOSTLY_SITTING" ,
"metThreshold" : 2.125 ,
"weeklyRtSum" : 0.1 ,
"functionalThresholdPower" : 250 ,
"speedCalibrationOffset" : 0 ,
"weightSource" : "WEIGHT_SOURCE_SOURCE_USER" ,
"sleepGoalMinutes" : 450 ,
"maximumAerobicPower" : 300 ,
"maximumAerobicSpeedKmh" : 12.3 ,
"maximumAerobicSpeedSource" : "MAXIMUM_AEROBIC_SPEED_SOURCE_USER"
},
"application" : {
"name" : "Polar Flow"
},
"sport" : {
"id" : "22353647432"
},
"product" : {
"modelName" : "POLAR VANTAGE V"
},
"trainingTarget" : {
"id" : "2353647432"
},
"favoriteTarget" : {
"id" : "2353647432"
},
"exercises" : [
{
"identifier" : {
"id" : "2353647432"
},
"created" : "2025-09-18T21:46:01.920Z" ,
"modified" : "2025-09-18T21:46:01.920Z" ,
"startTime" : "2025-09-18T21:46:01.920Z" ,
"stopTime" : "2025-09-18T21:46:01.920Z" ,
"durationMillis" : 3600000 ,
"distanceMeters" : 9840 ,
"calories" : 500 ,
"fatPercentage" : 30 ,
"recoveryTimeMillis" : 3600000 ,
"trainingLoad" : 350 ,
"carboPercentage" : 60 ,
"proteinPercentage" : 10 ,
"runningIndex" : 55 ,
"latitude" : 37.7749 ,
"longitude" : -122.4194 ,
"ascentMeters" : 500 ,
"descentMeters" : 450 ,
"sprintCounter" : 15 ,
"walkingDurationMillis" : 3600000 ,
"walkingDistanceMeters" : 9840 ,
"speedCalibrationOffset" : 0 ,
"timezoneOffsetMinutes" : 180 ,
"calibrationOffsets" : [
{
"sampleSourceType" : "SAMPLE_SOURCE_TYPE_WRIST_METRICS" ,
"value" : 0.1
}
],
"nutritionData" : {
"carbohydrateGrams" : 0.1 ,
"proteinGrams" : 0.1 ,
"fatGrams" : 0.1
},
"sport" : {
"id" : "22353647432"
},
"strengthTrainingResults" : {
"completedRounds" : [
{
"type" : "COMPLETED_ROUND_TYPE_AMRAP" ,
"startTimeDeltaMillis" : 60000 ,
"endTimeDeltaMillis" : 80000 ,
"workoutPhase" : "WORKOUT_PHASE_WARMUP" ,
"completedSets" : [
{
"type" : "SET_TYPE_WORK" ,
"startTimeDeltaMillis" : 60000 ,
"endTimeDeltaMillis" : 80000 ,
"resistanceType" : "RESISTANCE_BODY_WEIGHT" ,
"movement" : "string" ,
"avgHeartRate" : 120 ,
"maxHeartRate" : 140
}
]
}
]
},
"trainingLoadReport" : {
"cardioLoad" : 123.45 ,
"muscleLoad" : 234.56 ,
"cardioLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"muscleLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"calculationTime" : "2025-09-18T21:46:01.920Z" ,
"sessionRpe" : "RPE_MODERATE" ,
"perceivedLoad" : 0.1 ,
"perceivedLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM"
},
"laps" : {
"laps" : [
{
"splitTimeMillis" : 0 ,
"durationMillis" : 600000 ,
"distanceMeters" : 1500 ,
"startLocationLatitude" : 37.7749 ,
"startLocationLongitude" : -122.4194 ,
"startLocationAltitude" : 15 ,
"startLocationTimeMillis" : 0 ,
"ascentMeters" : 100 ,
"descentMeters" : 80 ,
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"avgSecsPerPool" : 0.1 ,
"poolsSwum" : 10 ,
"strokes" : 81
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
}
}
],
"autoLaps" : [
{
"splitTimeMillis" : 0 ,
"durationMillis" : 600000 ,
"distanceMeters" : 1500 ,
"startLocationLatitude" : 37.7749 ,
"startLocationLongitude" : -122.4194 ,
"startLocationAltitude" : 15 ,
"startLocationTimeMillis" : 0 ,
"ascentMeters" : 100 ,
"descentMeters" : 80 ,
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"avgSecsPerPool" : 0.1 ,
"poolsSwum" : 10 ,
"strokes" : 81
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
}
}
]
},
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"distanceMeters" : 1500 ,
"totalStrokeCount" : 100 ,
"poolsSwum" : 10 ,
"poolUnits" : "POOL_UNIT_METERS" ,
"poolLength" : 25 ,
"swimmingStyles" : [
{
"style" : "SWIMMING_STYLE_FREESTYLE" ,
"distanceMeters" : 500 ,
"strokeCount" : 81 ,
"swimmingTimeTotalMillis" : 0 ,
"poolTimeMinMillis" : 0 ,
"hrAvg" : 120 ,
"hrMax" : 140 ,
"swolfAvg" : 30
}
]
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
},
"zones" : [
{
"type" : "ZONE_TYPE_HEART_RATE" ,
"zones" : [
{
"lowerLimit" : 100 ,
"higherLimit" : 120 ,
"inZone" : 100 ,
"distanceMeters" : 1000 ,
"muscleLoad" : 100
}
]
}
],
"samples" : {
"samples" : [
{
"type" : "HEART_RATE" ,
"intervalMillis" : 1000 ,
"values" : [
88 ,
89 ,
90
]
}
],
"transitionSamples" : [
{
"type" : "HEART_RATE" ,
"intervalMillis" : 1000 ,
"values" : [
88 ,
89 ,
90
]
}
],
"rrSamples" : [
{
"durationMillis" : 800 ,
"offline" : true
}
],
"transitionRrSamples" : [
{
"durationMillis" : 800 ,
"offline" : true
}
],
"swimmingPhases" : {
"startTime" : "2025-09-18T21:46:01.921Z" ,
"phases" : [
{
"startOffsetMillis" : 32423 ,
"durationMillis" : 67500 ,
"style" : "BREASTSTROKE" ,
"strokes" : 31
}
]
}
},
"routes" : {
"route" : {
"startTime" : "2025-09-18T21:46:01.921Z" ,
"wayPoints" : [
{
"longitude" : -122.4194 ,
"latitude" : 37.7749 ,
"altitude" : 15 ,
"elapsedMillis" : 0
}
]
},
"transitionRoute" : {
"startTime" : "2025-09-18T21:46:01.921Z" ,
"wayPoints" : [
{
"longitude" : -122.4194 ,
"latitude" : 37.7749 ,
"altitude" : 15 ,
"elapsedMillis" : 0
}
]
}
},
"pauseTimes" : [
{
"startTime" : "2025-09-18T21:46:01.921Z" ,
"endTime" : "2025-09-18T21:46:01.921Z"
}
]
}
],
"testResults" : {
"cyclingTest" : {
"startTime" : "2025-09-18T21:46:01.921Z" ,
"endTime" : "2025-09-18T21:46:01.921Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.921Z" ,
"endTime" : "2025-09-18T21:46:01.921Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.921Z" ,
"endTime" : "2025-09-18T21:46:01.921Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.921Z" ,
"endTime" : "2025-09-18T21:46:01.921Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"fitnessClass" : "FITNESS_CLASS_GOOD" ,
"functionalThresholdPower" : 250 ,
"previousFunctionalThresholdPower" : 240 ,
"vo2max" : 55
},
"runningTest" : {
"startTime" : "2025-09-18T21:46:01.921Z" ,
"endTime" : "2025-09-18T21:46:01.921Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.921Z" ,
"endTime" : "2025-09-18T21:46:01.921Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.921Z" ,
"endTime" : "2025-09-18T21:46:01.921Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.921Z" ,
"endTime" : "2025-09-18T21:46:01.921Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"category" : "RUNNING_TEST_CATEGORY_MAXIMAL" ,
"maxAerobicSpeedKmh" : 2.8 ,
"maxAerobicPower" : 300 ,
"maxHrBpm" : 182 ,
"vo2max" : 55 ,
"initialSpeedKmh" : 8 ,
"speedIncreaseRate" : 0.5 ,
"qualityRatePercent" : 95
},
"walkingTest" : {
"startTime" : "2025-09-18T21:46:01.922Z" ,
"endTime" : "2025-09-18T21:46:01.922Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.921Z" ,
"endTime" : "2025-09-18T21:46:01.921Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.921Z" ,
"endTime" : "2025-09-18T21:46:01.921Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.921Z" ,
"endTime" : "2025-09-18T21:46:01.921Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"category" : "WALKING_TEST_CATEGORY_TIMED_15_MIN" ,
"fitnessClass" : "VO2MAX_FITNESS_CLASS_GOOD" ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"testDistanceMeters" : 1500 ,
"steps" : 2000 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"testHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"vo2max" : 55 ,
"walkingPercent" : 70 ,
"speedVariationPercent" : 30 ,
"cadenceVariationPercent" : 20 ,
"hrAbove65ProsMaxHr" : 15 ,
"allCriterionQualityPercent" : 90 ,
"steadyWalkingGuidance" : 85 ,
"walkingSpeedGuidance" : 5 ,
"duration" : 900000
}
},
"hillSplits" : {
"startTime" : "2025-09-18T21:46:01.922Z" ,
"endTime" : "2025-09-18T21:46:01.922Z" ,
"totalUphillDistanceMeters" : 1500 ,
"totalDownhillDistanceMeters" : 1000 ,
"totalUphillCount" : 10 ,
"totalDownhillCount" : 9 ,
"hills" : [
{
"type" : "HILL_TYPE_UPHILL" ,
"startTime" : "2025-09-18T21:46:01.922Z" ,
"endTime" : "2025-09-18T21:46:01.922Z" ,
"upHill" : {
"uphillNumber" : 0 ,
"ascentMeters" : 100 ,
"avgInclinePercent" : 5
},
"downHill" : {
"downhillNumber" : 0 ,
"descentMeters" : 80 ,
"avgDeclinePercent" : 4
},
"distanceMeters" : 500 ,
"maxSpeedKmh" : 25 ,
"avgSpeedKmh" : 20 ,
"startAltitudeMeters" : 100 ,
"endAltitudeMeters" : 150 ,
"avgHrBpm" : 80 ,
"maxHrBpm" : 120 ,
"duration" : 900000 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
}
]
},
"trainingLoadReport" : {
"cardioLoad" : 123.45 ,
"muscleLoad" : 234.56 ,
"cardioLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"muscleLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"calculationTime" : "2025-09-18T21:46:01.920Z" ,
"sessionRpe" : "RPE_MODERATE" ,
"perceivedLoad" : 0.1 ,
"perceivedLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM"
},
"comments" : [
{
"identifier" : {
"id" : "string"
},
"created" : "2025-09-18T21:46:01.923Z" ,
"modified" : "2025-09-18T21:46:01.923Z" ,
"note" : "string" ,
"fromOtherUser" : true
}
]
}
]
}
Properties
domainstrainingsessionLocation
{
"longitude" : -122.4194 ,
"latitude" : 37.7749 ,
"altitude" : 15 ,
"elapsedMillis" : 0
}
Location
Properties
Name
Type
Required
Description
longitude
number(double)
true
latitude
number(double)
true
altitude
number(double)
true
Altitude above sea level, in meters.
elapsedMillis
integer(int64)
true
Elapsed time in milliseconds since the route's start time.
domainstrainingsessionPhysicalInformation
{
"modified" : "2025-09-18T21:46:01.927Z" ,
"created" : "2025-09-18T21:46:01.927Z" ,
"birthday" : "2025-01-01" ,
"sex" : "SEX_MALE" ,
"weightKg" : 88.5 ,
"heightCm" : 180 ,
"maximumHeartRate" : 128 ,
"restingHeartRate" : 57 ,
"aerobicThreshold" : 137 ,
"anaerobicThreshold" : 182 ,
"vo2Max" : 55 ,
"trainingBackground" : "TRAINING_BACKGROUND_REGULAR" ,
"typicalDay" : "TYPICAL_DAY_MOSTLY_SITTING" ,
"metThreshold" : 2.125 ,
"weeklyRtSum" : 0.1 ,
"functionalThresholdPower" : 250 ,
"speedCalibrationOffset" : 0 ,
"weightSource" : "WEIGHT_SOURCE_SOURCE_USER" ,
"sleepGoalMinutes" : 450 ,
"maximumAerobicPower" : 300 ,
"maximumAerobicSpeedKmh" : 12.3 ,
"maximumAerobicSpeedSource" : "MAXIMUM_AEROBIC_SPEED_SOURCE_USER"
}
PhysicalInformation
Properties
Name
Type
Required
Description
modified
string
true
Datetime in ISO 8601 format. UTC time.
created
string
true
Datetime in ISO 8601 format. UTC time.
birthday
string
true
sex
domainstrainingsessionPhysicalInformationSex
false
weightKg
number(float)
false
heightCm
integer(int64)
false
maximumHeartRate
integer(int64)
false
Maximum heart rate in beats per minute (bpm).
restingHeartRate
integer(int64)
false
Resting heart rate in beats per minute (bpm).
aerobicThreshold
integer(int64)
false
Aerobic threshold in beats per minute (bpm).
anaerobicThreshold
integer(int64)
false
Anaerobic threshold in beats per minute (bpm).
vo2Max
integer(int64)
false
trainingBackground
domainstrainingsessionPhysicalInformationTrainingBackground
false
The training background of the user.
typicalDay
domainstrainingsessionPhysicalInformationTypicalDay
false
The typical day of the user.
metThreshold
number(double)
false
Metabolic equivalent of task (MET) in METs. 0.0 means not set. Otherwise range [0.875 - 31.875] in steps of 0.125.
weeklyRtSum
number(double)
false
functionalThresholdPower
integer(int64)
false
Functional threshold power (FTP) in watts.
speedCalibrationOffset
number(float)
false
weightSource
domainstrainingsessionPhysicalInformationWeightSource
false
The weight source of the user.
sleepGoalMinutes
integer(int64)
false
maximumAerobicPower
integer(int64)
false
Maximum aerobic power in watts.
maximumAerobicSpeedKmh
number(float)
false
Maximum aerobic speed in km/h.
maximumAerobicSpeedSource
PhysicalInformationMaximumAerobicSpeedSource
false
The maximum aerobic speed source of the user.
domainstrainingsessionPhysicalInformationSex
Sex
Properties
Name
Type
Required
Description
Sex
string
false
Enumerated Values
Property
Value
Sex
SEX_UNSPECIFIED
Sex
SEX_MALE
Sex
SEX_FEMALE
domainstrainingsessionPhysicalInformationTrainingBackground
"TRAINING_BACKGROUND_REGULAR"
TrainingBackground
Properties
Name
Type
Required
Description
TrainingBackground
string
false
The training background of the user.
Enumerated Values
Property
Value
TrainingBackground
TRAINING_BACKGROUND_UNSPECIFIED
TrainingBackground
TRAINING_BACKGROUND_OCCASIONAL
TrainingBackground
TRAINING_BACKGROUND_REGULAR
TrainingBackground
TRAINING_BACKGROUND_FREQUENT
TrainingBackground
TRAINING_BACKGROUND_HEAVY
TrainingBackground
TRAINING_BACKGROUND_SEMI_PRO
TrainingBackground
TRAINING_BACKGROUND_PRO
domainstrainingsessionPhysicalInformationTypicalDay
"TYPICAL_DAY_MOSTLY_SITTING"
TypicalDay
Properties
Name
Type
Required
Description
TypicalDay
string
false
The typical day of the user.
Enumerated Values
Property
Value
TypicalDay
TYPICAL_DAY_UNSPECIFIED
TypicalDay
TYPICAL_DAY_MOSTLY_SITTING
TypicalDay
TYPICAL_DAY_TYPICAL_DAY_MOSTLY_STANDING
TypicalDay
TYPICAL_DAY_MOSTLY_MOVING
domainstrainingsessionPhysicalInformationWeightSource
"WEIGHT_SOURCE_SOURCE_USER"
WeightSource
Properties
Name
Type
Required
Description
WeightSource
string
false
The weight source of the user.
Enumerated Values
Property
Value
WeightSource
WEIGHT_SOURCE_UNSPECIFIED
WeightSource
WEIGHT_SOURCE_SOURCE_DEFAULT
WeightSource
WEIGHT_SOURCE_SOURCE_ESTIMATE
WeightSource
WEIGHT_SOURCE_SOURCE_USER
WeightSource
WEIGHT_SOURCE_SOURCE_MEASURED
WeightSource
WEIGHT_SOURCE_SOURCE_KEEP
domainstrainingsessionRoute
{
"startTime" : "2025-09-18T21:46:01.928Z" ,
"wayPoints" : [
{
"longitude" : -122.4194 ,
"latitude" : 37.7749 ,
"altitude" : 15 ,
"elapsedMillis" : 0
}
]
}
Route
Properties
Name
Type
Required
Description
startTime
string
true
Datetime in ISO 8601 format. In user local time.
wayPoints
[domainstrainingsessionLocation ]
false
domainstrainingsessionSportReference
SportReference
Properties
Name
Type
Required
Description
id
string
true
domainstrainingsessionZones
{
"type" : "ZONE_TYPE_HEART_RATE" ,
"zones" : [
{
"lowerLimit" : 100 ,
"higherLimit" : 120 ,
"inZone" : 100 ,
"distanceMeters" : 1000 ,
"muscleLoad" : 100
}
]
}
Zones
Properties
trainingsessionApplicationReference
ApplicationReference
Properties
Name
Type
Required
Description
name
string
true
trainingsessionCalibrationOffset
{
"sampleSourceType" : "SAMPLE_SOURCE_TYPE_WRIST_METRICS" ,
"value" : 0.1
}
CalibrationOffset
Properties
Name
Type
Required
Description
sampleSourceType
CalibrationOffsetSampleSourceType
true
value
number(double)
true
Value unit and range depends on the sample source type.
trainingsessionCompletedRound
{
"type" : "COMPLETED_ROUND_TYPE_AMRAP" ,
"startTimeDeltaMillis" : 60000 ,
"endTimeDeltaMillis" : 80000 ,
"workoutPhase" : "WORKOUT_PHASE_WARMUP" ,
"completedSets" : [
{
"type" : "SET_TYPE_WORK" ,
"startTimeDeltaMillis" : 60000 ,
"endTimeDeltaMillis" : 80000 ,
"resistanceType" : "RESISTANCE_BODY_WEIGHT" ,
"movement" : "string" ,
"avgHeartRate" : 120 ,
"maxHeartRate" : 140
}
]
}
CompletedRound
Properties
trainingsessionCompletedSet
{
"type" : "SET_TYPE_WORK" ,
"startTimeDeltaMillis" : 60000 ,
"endTimeDeltaMillis" : 80000 ,
"resistanceType" : "RESISTANCE_BODY_WEIGHT" ,
"movement" : "string" ,
"avgHeartRate" : 120 ,
"maxHeartRate" : 140
}
CompletedSet
Properties
Name
Type
Required
Description
type
CompletedSetCompletedSetType
true
startTimeDeltaMillis
integer(int64)
true
Elapsed time in milliseconds since the start of exercise.
endTimeDeltaMillis
integer(int64)
true
Elapsed time in milliseconds since the start of exercise.
resistanceType
CompletedSetResistanceType
false
Resistance type required when set type is WORK, otherwise it is optional.
movement
string
false
avgHeartRate
integer(int64)
false
Average heart rate in beats per minute (bpm).
maxHeartRate
integer(int64)
false
Maximum heart rate in beats per minute (bpm).
trainingsessionCyclingTest
{
"startTime" : "2025-09-18T21:46:01.929Z" ,
"endTime" : "2025-09-18T21:46:01.929Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.929Z" ,
"endTime" : "2025-09-18T21:46:01.929Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.929Z" ,
"endTime" : "2025-09-18T21:46:01.929Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.929Z" ,
"endTime" : "2025-09-18T21:46:01.929Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"fitnessClass" : "FITNESS_CLASS_GOOD" ,
"functionalThresholdPower" : 250 ,
"previousFunctionalThresholdPower" : 240 ,
"vo2max" : 55
}
CyclingTest
Properties
Name
Type
Required
Description
startTime
string
true
Datetime in ISO 8601 format. In user local time.
endTime
string
true
Datetime in ISO 8601 format. In user local time.
warmup
trainingsessionTestPhase
true
performance
trainingsessionTestPhase
true
cooldown
trainingsessionTestPhase
true
fitnessClass
trainingsessionCyclingTestFitnessClass
true
functionalThresholdPower
integer(int64)
true
Functional threshold power (FTP) in watts.
previousFunctionalThresholdPower
integer(int64)
false
Previous functional threshold power (FTP) in watts.
vo2max
integer(int64)
true
trainingsessionCyclingTestFitnessClass
FitnessClass
Properties
Name
Type
Required
Description
FitnessClass
string
false
Enumerated Values
Property
Value
FitnessClass
FITNESS_CLASS_UNRECOGNIZED
FitnessClass
FITNESS_CLASS_UNTRAINED
FitnessClass
FITNESS_CLASS_FAIR
FitnessClass
FITNESS_CLASS_MODERATE
FitnessClass
FITNESS_CLASS_GOOD
FitnessClass
FITNESS_CLASS_VERY_GOOD
FitnessClass
FITNESS_CLASS_EXCELLENT
FitnessClass
FITNESS_CLASS_EXCEPTIONAL
FitnessClass
FITNESS_CLASS_WORLD_CLAS
trainingsessionDownHill
{
"downhillNumber" : 0 ,
"descentMeters" : 80 ,
"avgDeclinePercent" : 4
}
DownHill
Properties
Name
Type
Required
Description
downhillNumber
integer(int64)
true
descentMeters
number(float)
true
avgDeclinePercent
number(float)
true
Average decline in percentage.
trainingsessionExercise
{
"identifier" : {
"id" : "2353647432"
},
"created" : "2025-09-18T21:46:01.930Z" ,
"modified" : "2025-09-18T21:46:01.930Z" ,
"startTime" : "2025-09-18T21:46:01.930Z" ,
"stopTime" : "2025-09-18T21:46:01.930Z" ,
"durationMillis" : 3600000 ,
"distanceMeters" : 9840 ,
"calories" : 500 ,
"fatPercentage" : 30 ,
"recoveryTimeMillis" : 3600000 ,
"trainingLoad" : 350 ,
"carboPercentage" : 60 ,
"proteinPercentage" : 10 ,
"runningIndex" : 55 ,
"latitude" : 37.7749 ,
"longitude" : -122.4194 ,
"ascentMeters" : 500 ,
"descentMeters" : 450 ,
"sprintCounter" : 15 ,
"walkingDurationMillis" : 3600000 ,
"walkingDistanceMeters" : 9840 ,
"speedCalibrationOffset" : 0 ,
"timezoneOffsetMinutes" : 180 ,
"calibrationOffsets" : [
{
"sampleSourceType" : "SAMPLE_SOURCE_TYPE_WRIST_METRICS" ,
"value" : 0.1
}
],
"nutritionData" : {
"carbohydrateGrams" : 0.1 ,
"proteinGrams" : 0.1 ,
"fatGrams" : 0.1
},
"sport" : {
"id" : "22353647432"
},
"strengthTrainingResults" : {
"completedRounds" : [
{
"type" : "COMPLETED_ROUND_TYPE_AMRAP" ,
"startTimeDeltaMillis" : 60000 ,
"endTimeDeltaMillis" : 80000 ,
"workoutPhase" : "WORKOUT_PHASE_WARMUP" ,
"completedSets" : [
{
"type" : "SET_TYPE_WORK" ,
"startTimeDeltaMillis" : 60000 ,
"endTimeDeltaMillis" : 80000 ,
"resistanceType" : "RESISTANCE_BODY_WEIGHT" ,
"movement" : "string" ,
"avgHeartRate" : 120 ,
"maxHeartRate" : 140
}
]
}
]
},
"trainingLoadReport" : {
"cardioLoad" : 123.45 ,
"muscleLoad" : 234.56 ,
"cardioLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"muscleLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"calculationTime" : "2025-09-18T21:46:01.930Z" ,
"sessionRpe" : "RPE_MODERATE" ,
"perceivedLoad" : 0.1 ,
"perceivedLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM"
},
"laps" : {
"laps" : [
{
"splitTimeMillis" : 0 ,
"durationMillis" : 600000 ,
"distanceMeters" : 1500 ,
"startLocationLatitude" : 37.7749 ,
"startLocationLongitude" : -122.4194 ,
"startLocationAltitude" : 15 ,
"startLocationTimeMillis" : 0 ,
"ascentMeters" : 100 ,
"descentMeters" : 80 ,
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"avgSecsPerPool" : 0.1 ,
"poolsSwum" : 10 ,
"strokes" : 81
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
}
}
],
"autoLaps" : [
{
"splitTimeMillis" : 0 ,
"durationMillis" : 600000 ,
"distanceMeters" : 1500 ,
"startLocationLatitude" : 37.7749 ,
"startLocationLongitude" : -122.4194 ,
"startLocationAltitude" : 15 ,
"startLocationTimeMillis" : 0 ,
"ascentMeters" : 100 ,
"descentMeters" : 80 ,
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"avgSecsPerPool" : 0.1 ,
"poolsSwum" : 10 ,
"strokes" : 81
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
}
}
]
},
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"distanceMeters" : 1500 ,
"totalStrokeCount" : 100 ,
"poolsSwum" : 10 ,
"poolUnits" : "POOL_UNIT_METERS" ,
"poolLength" : 25 ,
"swimmingStyles" : [
{
"style" : "SWIMMING_STYLE_FREESTYLE" ,
"distanceMeters" : 500 ,
"strokeCount" : 81 ,
"swimmingTimeTotalMillis" : 0 ,
"poolTimeMinMillis" : 0 ,
"hrAvg" : 120 ,
"hrMax" : 140 ,
"swolfAvg" : 30
}
]
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
},
"zones" : [
{
"type" : "ZONE_TYPE_HEART_RATE" ,
"zones" : [
{
"lowerLimit" : 100 ,
"higherLimit" : 120 ,
"inZone" : 100 ,
"distanceMeters" : 1000 ,
"muscleLoad" : 100
}
]
}
],
"samples" : {
"samples" : [
{
"type" : "HEART_RATE" ,
"intervalMillis" : 1000 ,
"values" : [
88 ,
89 ,
90
]
}
],
"transitionSamples" : [
{
"type" : "HEART_RATE" ,
"intervalMillis" : 1000 ,
"values" : [
88 ,
89 ,
90
]
}
],
"rrSamples" : [
{
"durationMillis" : 800 ,
"offline" : true
}
],
"transitionRrSamples" : [
{
"durationMillis" : 800 ,
"offline" : true
}
],
"swimmingPhases" : {
"startTime" : "2025-09-18T21:46:01.931Z" ,
"phases" : [
{
"startOffsetMillis" : 32423 ,
"durationMillis" : 67500 ,
"style" : "BREASTSTROKE" ,
"strokes" : 31
}
]
}
},
"routes" : {
"route" : {
"startTime" : "2025-09-18T21:46:01.931Z" ,
"wayPoints" : [
{
"longitude" : -122.4194 ,
"latitude" : 37.7749 ,
"altitude" : 15 ,
"elapsedMillis" : 0
}
]
},
"transitionRoute" : {
"startTime" : "2025-09-18T21:46:01.931Z" ,
"wayPoints" : [
{
"longitude" : -122.4194 ,
"latitude" : 37.7749 ,
"altitude" : 15 ,
"elapsedMillis" : 0
}
]
}
},
"pauseTimes" : [
{
"startTime" : "2025-09-18T21:46:01.931Z" ,
"endTime" : "2025-09-18T21:46:01.931Z"
}
]
}
Properties
Name
Type
Required
Description
identifier
trainingsessionExerciseReference
false
created
string
true
Datetime in ISO 8601 format. UTC time.
modified
string
true
Datetime in ISO 8601 format. UTC time.
startTime
string
true
Datetime in ISO 8601 format. In user local time.
stopTime
string
true
Datetime in ISO 8601 format. In user local time.
durationMillis
integer(int64)
false
Milliseconds. Maximum value 99 hours 59 mins 59 secs and 999 milliseconds.
distanceMeters
number(double)
false
Meters. Maximum value 9999 km.
calories
integer(int64)
false
Calories, measured in kilocalories (kcal).
fatPercentage
integer(int64)
false
Percentage of fat burned from total energy consumption in the exercise session.
recoveryTimeMillis
string(uint64)
false
Milliseconds. Maximum value 45 days.
trainingLoad
integer(int64)
false
carboPercentage
integer(int64)
false
Percentage of carbohydrates burned from total energy consumption in the exercise session.
proteinPercentage
integer(int64)
false
Percentage of protein burned from total energy consumption in the exercise session.
runningIndex
integer(int64)
false
latitude
number(double)
false
longitude
number(double)
false
ascentMeters
number(float)
false
descentMeters
number(float)
false
sprintCounter
integer(int32)
false
walkingDurationMillis
integer(int64)
false
Walking duration in milliseconds. Maximum 99 hours 59 mins 59 secs and 999 milliseconds.
walkingDistanceMeters
number(double)
false
Walking distance in meters. Maximum value 9999 km.
speedCalibrationOffset
number(double)
false
timezoneOffsetMinutes
integer(int32)
false
Timezone offset in minutes.
calibrationOffsets
[trainingsessionCalibrationOffset ]
false
nutritionData
trainingsessionNutritionData
false
sport
domainstrainingsessionSportReference
false
strengthTrainingResults
trainingsessionStrengthTrainingResults
false
trainingLoadReport
trainingsessionTrainingLoadReport
false
laps
trainingsessionLaps
false
statistics
trainingsessionExerciseStatistics
false
zones
[domainstrainingsessionZones ]
false
samples
trainingsessionSamples
false
routes
trainingsessionRoutes
false
pauseTimes
[trainingsessionPauseTime ]
false
trainingsessionExerciseReference
ExerciseReference
Properties
Name
Type
Required
Description
id
string
true
trainingsessionExerciseStatistics
{
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"distanceMeters" : 1500 ,
"totalStrokeCount" : 100 ,
"poolsSwum" : 10 ,
"poolUnits" : "POOL_UNIT_METERS" ,
"poolLength" : 25 ,
"swimmingStyles" : [
{
"style" : "SWIMMING_STYLE_FREESTYLE" ,
"distanceMeters" : 500 ,
"strokeCount" : 81 ,
"swimmingTimeTotalMillis" : 0 ,
"poolTimeMinMillis" : 0 ,
"hrAvg" : 120 ,
"hrMax" : 140 ,
"swolfAvg" : 30
}
]
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
}
ExerciseStatistics
Properties
trainingsessionFavoriteTargetReference
FavoriteTargetReference
Properties
Name
Type
Required
Description
id
string
true
trainingsessionHill
{
"type" : "HILL_TYPE_UPHILL" ,
"startTime" : "2025-09-18T21:46:01.934Z" ,
"endTime" : "2025-09-18T21:46:01.934Z" ,
"upHill" : {
"uphillNumber" : 0 ,
"ascentMeters" : 100 ,
"avgInclinePercent" : 5
},
"downHill" : {
"downhillNumber" : 0 ,
"descentMeters" : 80 ,
"avgDeclinePercent" : 4
},
"distanceMeters" : 500 ,
"maxSpeedKmh" : 25 ,
"avgSpeedKmh" : 20 ,
"startAltitudeMeters" : 100 ,
"endAltitudeMeters" : 150 ,
"avgHrBpm" : 80 ,
"maxHrBpm" : 120 ,
"duration" : 900000 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
}
Hill
Properties
Name
Type
Required
Description
type
HillHillType
true
startTime
string
true
Datetime in ISO 8601 format. In user local time.
endTime
string
true
Datetime in ISO 8601 format. In user local time.
upHill
trainingsessionUpHill
false
Relevant only for uphill type.
downHill
trainingsessionDownHill
false
Relevant only for downhill type.
distanceMeters
integer(int64)
true
maxSpeedKmh
number(float)
true
avgSpeedKmh
number(float)
true
startAltitudeMeters
number(float)
true
Start altitude in meters.
endAltitudeMeters
number(float)
true
avgHrBpm
integer(int64)
true
Average heart rate in beats per minute (bpm).
maxHrBpm
integer(int64)
true
Maximum heart rate in beats per minute (bpm).
duration
integer(int64)
true
avgCadence
integer(int64)
true
Average cadence in rounds per minute (rpm).
maxCadence
integer(int64)
true
Maximum cadence in rounds per minute (rpm).
avgPower
integer(int64)
true
maxPower
integer(int64)
true
trainingsessionHillSplits
{
"startTime" : "2025-09-18T21:46:01.935Z" ,
"endTime" : "2025-09-18T21:46:01.935Z" ,
"totalUphillDistanceMeters" : 1500 ,
"totalDownhillDistanceMeters" : 1000 ,
"totalUphillCount" : 10 ,
"totalDownhillCount" : 9 ,
"hills" : [
{
"type" : "HILL_TYPE_UPHILL" ,
"startTime" : "2025-09-18T21:46:01.935Z" ,
"endTime" : "2025-09-18T21:46:01.935Z" ,
"upHill" : {
"uphillNumber" : 0 ,
"ascentMeters" : 100 ,
"avgInclinePercent" : 5
},
"downHill" : {
"downhillNumber" : 0 ,
"descentMeters" : 80 ,
"avgDeclinePercent" : 4
},
"distanceMeters" : 500 ,
"maxSpeedKmh" : 25 ,
"avgSpeedKmh" : 20 ,
"startAltitudeMeters" : 100 ,
"endAltitudeMeters" : 150 ,
"avgHrBpm" : 80 ,
"maxHrBpm" : 120 ,
"duration" : 900000 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
}
]
}
HillSplits
Properties
Name
Type
Required
Description
startTime
string
true
Datetime in ISO 8601 format. In user local time.
endTime
string
true
Datetime in ISO 8601 format. In user local time.
totalUphillDistanceMeters
integer(int64)
true
Total uphill distance in meters.
totalDownhillDistanceMeters
integer(int64)
true
Total downhill distance in meters.
totalUphillCount
integer(int64)
true
totalDownhillCount
integer(int64)
true
hills
[trainingsessionHill ]
false
trainingsessionIntervalValues
{
"type" : "HEART_RATE" ,
"intervalMillis" : 1000 ,
"values" : [
88 ,
89 ,
90
]
}
IntervalValues
Properties
Name
Type
Required
Description
type
IntervalValuesSampleType
true
intervalMillis
integer(int64)
true
Values interval in milliseconds.
values
[number]
false
Values for the sample type. Range depends on the sample type.
trainingsessionLap
{
"splitTimeMillis" : 0 ,
"durationMillis" : 600000 ,
"distanceMeters" : 1500 ,
"startLocationLatitude" : 37.7749 ,
"startLocationLongitude" : -122.4194 ,
"startLocationAltitude" : 15 ,
"startLocationTimeMillis" : 0 ,
"ascentMeters" : 100 ,
"descentMeters" : 80 ,
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"avgSecsPerPool" : 0.1 ,
"poolsSwum" : 10 ,
"strokes" : 81
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
}
}
Lap
Properties
Name
Type
Required
Description
splitTimeMillis
integer(int64)
true
Elapsed time from start of exercise start time as milliseconds.
durationMillis
integer(int64)
true
Duration in milliseconds.
distanceMeters
number(double)
false
startLocationLatitude
number(double)
false
startLocationLongitude
number(double)
false
startLocationAltitude
number(double)
false
startLocationTimeMillis
integer(int64)
false
Elapsed time from start of exercise start time as milliseconds.
ascentMeters
number(double)
false
descentMeters
number(double)
false
statistics
trainingsessionLapStatistics
false
trainingsessionLapStatistics
{
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"avgSecsPerPool" : 0.1 ,
"poolsSwum" : 10 ,
"strokes" : 81
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
}
LapStatistics
Properties
trainingsessionLapSwimStatistics
{
"avgSecsPerPool" : 0.1 ,
"poolsSwum" : 10 ,
"strokes" : 81
}
LapSwimStatistics
Properties
Name
Type
Required
Description
avgSecsPerPool
number(float)
false
Average duration taken from pool end to end in seconds.
poolsSwum
integer(int64)
false
strokes
integer(int64)
false
Total number of strokes swum.
trainingsessionLaps
{
"laps" : [
{
"splitTimeMillis" : 0 ,
"durationMillis" : 600000 ,
"distanceMeters" : 1500 ,
"startLocationLatitude" : 37.7749 ,
"startLocationLongitude" : -122.4194 ,
"startLocationAltitude" : 15 ,
"startLocationTimeMillis" : 0 ,
"ascentMeters" : 100 ,
"descentMeters" : 80 ,
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"avgSecsPerPool" : 0.1 ,
"poolsSwum" : 10 ,
"strokes" : 81
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
}
}
],
"autoLaps" : [
{
"splitTimeMillis" : 0 ,
"durationMillis" : 600000 ,
"distanceMeters" : 1500 ,
"startLocationLatitude" : 37.7749 ,
"startLocationLongitude" : -122.4194 ,
"startLocationAltitude" : 15 ,
"startLocationTimeMillis" : 0 ,
"ascentMeters" : 100 ,
"descentMeters" : 80 ,
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"avgSecsPerPool" : 0.1 ,
"poolsSwum" : 10 ,
"strokes" : 81
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
}
}
]
}
Laps
Properties
trainingsessionNutritionData
{
"carbohydrateGrams" : 0.1 ,
"proteinGrams" : 0.1 ,
"fatGrams" : 0.1
}
NutritionData
Properties
Name
Type
Required
Description
carbohydrateGrams
number(float)
false
proteinGrams
number(float)
false
fatGrams
number(float)
false
trainingsessionPauseTime
{
"startTime" : "2025-09-18T21:46:01.943Z" ,
"endTime" : "2025-09-18T21:46:01.943Z"
}
PauseTime
Properties
Name
Type
Required
Description
startTime
string
true
Datetime in ISO 8601 format. In user local time.
endTime
string
true
Datetime in ISO 8601 format. In user local time.
trainingsessionProductReference
{
"modelName" : "POLAR VANTAGE V"
}
ProductReference
Properties
Name
Type
Required
Description
modelName
string
true
trainingsessionRRSample
{
"durationMillis" : 800 ,
"offline" : true
}
RRSample
Properties
Name
Type
Required
Description
durationMillis
integer(int64)
true
Duration in milliseconds.
offline
boolean
true
'True' in case the sample is marked offline.
trainingsessionRoutes
{
"route" : {
"startTime" : "2025-09-18T21:46:01.944Z" ,
"wayPoints" : [
{
"longitude" : -122.4194 ,
"latitude" : 37.7749 ,
"altitude" : 15 ,
"elapsedMillis" : 0
}
]
},
"transitionRoute" : {
"startTime" : "2025-09-18T21:46:01.944Z" ,
"wayPoints" : [
{
"longitude" : -122.4194 ,
"latitude" : 37.7749 ,
"altitude" : 15 ,
"elapsedMillis" : 0
}
]
}
}
Routes
Properties
trainingsessionRunningTest
{
"startTime" : "2025-09-18T21:46:01.944Z" ,
"endTime" : "2025-09-18T21:46:01.944Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.944Z" ,
"endTime" : "2025-09-18T21:46:01.944Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.944Z" ,
"endTime" : "2025-09-18T21:46:01.944Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.944Z" ,
"endTime" : "2025-09-18T21:46:01.944Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"category" : "RUNNING_TEST_CATEGORY_MAXIMAL" ,
"maxAerobicSpeedKmh" : 2.8 ,
"maxAerobicPower" : 300 ,
"maxHrBpm" : 182 ,
"vo2max" : 55 ,
"initialSpeedKmh" : 8 ,
"speedIncreaseRate" : 0.5 ,
"qualityRatePercent" : 95
}
RunningTest
Properties
Name
Type
Required
Description
startTime
string
true
Datetime in ISO 8601 format. In user local time.
endTime
string
true
Datetime in ISO 8601 format. In user local time.
warmup
trainingsessionTestPhase
true
performance
trainingsessionTestPhase
true
cooldown
trainingsessionTestPhase
true
category
RunningTestRunningTestCategory
true
The running test category.
maxAerobicSpeedKmh
number(float)
true
Maximum aerobic speed in km/h.
maxAerobicPower
integer(int64)
true
Maximum aerobic power in watts.
maxHrBpm
integer(int64)
true
Maximum heart rate in beats per minute (bpm).
vo2max
integer(int64)
true
initialSpeedKmh
integer(int64)
true
speedIncreaseRate
number(float)
true
qualityRatePercent
integer(int64)
true
Quality rate in percentage.
trainingsessionSamples
{
"samples" : [
{
"type" : "HEART_RATE" ,
"intervalMillis" : 1000 ,
"values" : [
88 ,
89 ,
90
]
}
],
"transitionSamples" : [
{
"type" : "HEART_RATE" ,
"intervalMillis" : 1000 ,
"values" : [
88 ,
89 ,
90
]
}
],
"rrSamples" : [
{
"durationMillis" : 800 ,
"offline" : true
}
],
"transitionRrSamples" : [
{
"durationMillis" : 800 ,
"offline" : true
}
],
"swimmingPhases" : {
"startTime" : "2025-09-18T21:46:01.945Z" ,
"phases" : [
{
"startOffsetMillis" : 32423 ,
"durationMillis" : 67500 ,
"style" : "BREASTSTROKE" ,
"strokes" : 31
}
]
}
}
Samples
Properties
trainingsessionStatistics
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
Statistics
Properties
Name
Type
Required
Description
type
StatisticsStatisticsType
true
min
number(double)
false
Unit and range depends on the statistics type.
avg
number(double)
false
Unit and range depends on the statistics type.
max
number(double)
false
Unit and range depends on the statistics type.
trainingsessionStrengthTrainingResults
{
"completedRounds" : [
{
"type" : "COMPLETED_ROUND_TYPE_AMRAP" ,
"startTimeDeltaMillis" : 60000 ,
"endTimeDeltaMillis" : 80000 ,
"workoutPhase" : "WORKOUT_PHASE_WARMUP" ,
"completedSets" : [
{
"type" : "SET_TYPE_WORK" ,
"startTimeDeltaMillis" : 60000 ,
"endTimeDeltaMillis" : 80000 ,
"resistanceType" : "RESISTANCE_BODY_WEIGHT" ,
"movement" : "string" ,
"avgHeartRate" : 120 ,
"maxHeartRate" : 140
}
]
}
]
}
StrengthTrainingResults
Properties
trainingsessionSwimmingPhase
{
"startOffsetMillis" : 32423 ,
"durationMillis" : 67500 ,
"style" : "BREASTSTROKE" ,
"strokes" : 31
}
SwimmingPhase
Properties
Name
Type
Required
Description
startOffsetMillis
integer(int64)
true
Elapsed time from start of swimming phases start time as milliseconds.
durationMillis
integer(int64)
true
Duration of swimming phase in milliseconds.
style
trainingsessionSwimmingPhaseSwimmingStyle
true
strokes
integer(int64)
false
trainingsessionSwimmingPhaseSwimmingStyle
SwimmingStyle
Properties
Name
Type
Required
Description
SwimmingStyle
string
false
Enumerated Values
Property
Value
SwimmingStyle
OTHER
SwimmingStyle
TURN
SwimmingStyle
OTHER_SWIMMING
SwimmingStyle
FREESTYLE
SwimmingStyle
BREASTSTROKE
SwimmingStyle
BACKSTROKE
SwimmingStyle
BUTTERFLY
SwimmingStyle
DRILL
trainingsessionSwimmingPhases
{
"startTime" : "2025-09-18T21:46:01.946Z" ,
"phases" : [
{
"startOffsetMillis" : 32423 ,
"durationMillis" : 67500 ,
"style" : "BREASTSTROKE" ,
"strokes" : 31
}
]
}
SwimmingPhases
Properties
Name
Type
Required
Description
startTime
string
true
Datetime in ISO 8601 format. In user local time zone.
phases
[trainingsessionSwimmingPhase ]
false
trainingsessionSwimmingStatistics
{
"distanceMeters" : 1500 ,
"totalStrokeCount" : 100 ,
"poolsSwum" : 10 ,
"poolUnits" : "POOL_UNIT_METERS" ,
"poolLength" : 25 ,
"swimmingStyles" : [
{
"style" : "SWIMMING_STYLE_FREESTYLE" ,
"distanceMeters" : 500 ,
"strokeCount" : 81 ,
"swimmingTimeTotalMillis" : 0 ,
"poolTimeMinMillis" : 0 ,
"hrAvg" : 120 ,
"hrMax" : 140 ,
"swolfAvg" : 30
}
]
}
SwimmingStatistics
Properties
trainingsessionSwimmingStyleStatistics
{
"style" : "SWIMMING_STYLE_FREESTYLE" ,
"distanceMeters" : 500 ,
"strokeCount" : 81 ,
"swimmingTimeTotalMillis" : 0 ,
"poolTimeMinMillis" : 0 ,
"hrAvg" : 120 ,
"hrMax" : 140 ,
"swolfAvg" : 30
}
SwimmingStyleStatistics
Properties
Name
Type
Required
Description
style
trainingsessionSwimmingStyleStatisticsSwimmingStyle
true
distanceMeters
number(float)
true
strokeCount
integer(int64)
false
swimmingTimeTotalMillis
integer(int64)
false
Swimming time in milliseconds.
poolTimeMinMillis
integer(int64)
false
Pool time in milliseconds.
hrAvg
integer(int64)
false
Average heart rate in beats per minute (bpm).
hrMax
integer(int64)
false
Maximum heart rate in beats per minute (bpm).
swolfAvg
number(float)
false
Time (in seconds) and the number of strokes it takes to swim a pool length.
trainingsessionSwimmingStyleStatisticsSwimmingStyle
"SWIMMING_STYLE_FREESTYLE"
SwimmingStyle
Properties
Name
Type
Required
Description
SwimmingStyle
string
false
Enumerated Values
Property
Value
SwimmingStyle
SWIMMING_STYLE_UNSPECIFIED
SwimmingStyle
SWIMMING_STYLE_OTHER
SwimmingStyle
SWIMMING_STYLE_TURN
SwimmingStyle
SWIMMING_STYLE_OTHER_SWIMMING
SwimmingStyle
SWIMMING_STYLE_FREESTYLE
SwimmingStyle
SWIMMING_STYLE_BREASTSTROKE
SwimmingStyle
SWIMMING_STYLE_BACKSTROKE
SwimmingStyle
SWIMMING_STYLE_BUTTERFLY
trainingsessionTestPhase
{
"startTime" : "2025-09-18T21:46:01.947Z" ,
"endTime" : "2025-09-18T21:46:01.947Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
}
TestPhase
Properties
Name
Type
Required
Description
startTime
string
true
Datetime in ISO 8601 format. In user local time.
endTime
string
true
Datetime in ISO 8601 format. In user local time.
durationMillis
integer(int64)
true
Duration in milliseconds.
avgHrBpm
integer(int64)
true
Average heart rate in beats per minute (bpm).
maxHrBpm
integer(int64)
true
Maximum heart rate in beats per minute (bpm).
avgSpeedKmh
number(float)
true
maxSpeedKmh
number(float)
true
avgCadence
integer(int64)
true
Average cadence in rounds per minute (rpm).
maxCadence
integer(int64)
true
Maximum cadence in rounds per minute (rpm).
avgPower
integer(int64)
true
maxPower
integer(int64)
true
trainingsessionTestResults
{
"cyclingTest" : {
"startTime" : "2025-09-18T21:46:01.948Z" ,
"endTime" : "2025-09-18T21:46:01.948Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.948Z" ,
"endTime" : "2025-09-18T21:46:01.948Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.948Z" ,
"endTime" : "2025-09-18T21:46:01.948Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.948Z" ,
"endTime" : "2025-09-18T21:46:01.948Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"fitnessClass" : "FITNESS_CLASS_GOOD" ,
"functionalThresholdPower" : 250 ,
"previousFunctionalThresholdPower" : 240 ,
"vo2max" : 55
},
"runningTest" : {
"startTime" : "2025-09-18T21:46:01.948Z" ,
"endTime" : "2025-09-18T21:46:01.948Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.948Z" ,
"endTime" : "2025-09-18T21:46:01.948Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.948Z" ,
"endTime" : "2025-09-18T21:46:01.948Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.948Z" ,
"endTime" : "2025-09-18T21:46:01.948Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"category" : "RUNNING_TEST_CATEGORY_MAXIMAL" ,
"maxAerobicSpeedKmh" : 2.8 ,
"maxAerobicPower" : 300 ,
"maxHrBpm" : 182 ,
"vo2max" : 55 ,
"initialSpeedKmh" : 8 ,
"speedIncreaseRate" : 0.5 ,
"qualityRatePercent" : 95
},
"walkingTest" : {
"startTime" : "2025-09-18T21:46:01.948Z" ,
"endTime" : "2025-09-18T21:46:01.948Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.948Z" ,
"endTime" : "2025-09-18T21:46:01.948Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.948Z" ,
"endTime" : "2025-09-18T21:46:01.948Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.948Z" ,
"endTime" : "2025-09-18T21:46:01.948Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"category" : "WALKING_TEST_CATEGORY_TIMED_15_MIN" ,
"fitnessClass" : "VO2MAX_FITNESS_CLASS_GOOD" ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"testDistanceMeters" : 1500 ,
"steps" : 2000 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"testHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"vo2max" : 55 ,
"walkingPercent" : 70 ,
"speedVariationPercent" : 30 ,
"cadenceVariationPercent" : 20 ,
"hrAbove65ProsMaxHr" : 15 ,
"allCriterionQualityPercent" : 90 ,
"steadyWalkingGuidance" : 85 ,
"walkingSpeedGuidance" : 5 ,
"duration" : 900000
}
}
TestResults where only one of the test data type can be set at a time
Properties
trainingsessionTrainingLoadReport
{
"cardioLoad" : 123.45 ,
"muscleLoad" : 234.56 ,
"cardioLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"muscleLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"calculationTime" : "2025-09-18T21:46:01.950Z" ,
"sessionRpe" : "RPE_MODERATE" ,
"perceivedLoad" : 0.1 ,
"perceivedLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM"
}
TrainingLoadReport
Properties
trainingsessionTrainingPeaksStatistics
{
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
TrainingPeaksStatistics
Properties
Name
Type
Required
Description
intensityFactor
number(double)
false
normalizedPower
integer(int32)
false
Normalized power in watts.
trainingStressScore
number(double)
false
trainingsessionTrainingSession
{
"identifier" : {
"id" : "123466345"
},
"created" : "2025-09-18T21:46:01.950Z" ,
"modified" : "2025-09-18T21:46:01.950Z" ,
"startTime" : "2025-09-18T21:46:01.950Z" ,
"stopTime" : "2025-09-18T21:46:01.950Z" ,
"durationMillis" : 3600000 ,
"name" : "Some training" ,
"feeling" : 0.8 ,
"deviceId" : "ABC102003" ,
"note" : "Some notes" ,
"latitude" : 37.7749 ,
"longitude" : -122.4194 ,
"distanceMeters" : 9840 ,
"calories" : 500 ,
"trainingLoad" : 350 ,
"trainingBenefit" : "TRAINING_BENEFIT_RECOVERY_TRAINING" ,
"carboPercentage" : 60 ,
"fatPercentage" : 30 ,
"proteinPercentage" : 10 ,
"recoveryTimeMillis" : 3600000 ,
"hrMax" : 180 ,
"hrAvg" : 160 ,
"timezoneOffsetMinutes" : 180 ,
"nutritionData" : {
"carbohydrateGrams" : 0.1 ,
"proteinGrams" : 0.1 ,
"fatGrams" : 0.1
},
"startTrigger" : "TRAINING_START_MANUAL" ,
"physicalInformation" : {
"modified" : "2025-09-18T21:46:01.950Z" ,
"created" : "2025-09-18T21:46:01.950Z" ,
"birthday" : "2025-01-01" ,
"sex" : "SEX_MALE" ,
"weightKg" : 88.5 ,
"heightCm" : 180 ,
"maximumHeartRate" : 128 ,
"restingHeartRate" : 57 ,
"aerobicThreshold" : 137 ,
"anaerobicThreshold" : 182 ,
"vo2Max" : 55 ,
"trainingBackground" : "TRAINING_BACKGROUND_REGULAR" ,
"typicalDay" : "TYPICAL_DAY_MOSTLY_SITTING" ,
"metThreshold" : 2.125 ,
"weeklyRtSum" : 0.1 ,
"functionalThresholdPower" : 250 ,
"speedCalibrationOffset" : 0 ,
"weightSource" : "WEIGHT_SOURCE_SOURCE_USER" ,
"sleepGoalMinutes" : 450 ,
"maximumAerobicPower" : 300 ,
"maximumAerobicSpeedKmh" : 12.3 ,
"maximumAerobicSpeedSource" : "MAXIMUM_AEROBIC_SPEED_SOURCE_USER"
},
"application" : {
"name" : "Polar Flow"
},
"sport" : {
"id" : "22353647432"
},
"product" : {
"modelName" : "POLAR VANTAGE V"
},
"trainingTarget" : {
"id" : "2353647432"
},
"favoriteTarget" : {
"id" : "2353647432"
},
"exercises" : [
{
"identifier" : {
"id" : "2353647432"
},
"created" : "2025-09-18T21:46:01.951Z" ,
"modified" : "2025-09-18T21:46:01.951Z" ,
"startTime" : "2025-09-18T21:46:01.951Z" ,
"stopTime" : "2025-09-18T21:46:01.951Z" ,
"durationMillis" : 3600000 ,
"distanceMeters" : 9840 ,
"calories" : 500 ,
"fatPercentage" : 30 ,
"recoveryTimeMillis" : 3600000 ,
"trainingLoad" : 350 ,
"carboPercentage" : 60 ,
"proteinPercentage" : 10 ,
"runningIndex" : 55 ,
"latitude" : 37.7749 ,
"longitude" : -122.4194 ,
"ascentMeters" : 500 ,
"descentMeters" : 450 ,
"sprintCounter" : 15 ,
"walkingDurationMillis" : 3600000 ,
"walkingDistanceMeters" : 9840 ,
"speedCalibrationOffset" : 0 ,
"timezoneOffsetMinutes" : 180 ,
"calibrationOffsets" : [
{
"sampleSourceType" : "SAMPLE_SOURCE_TYPE_WRIST_METRICS" ,
"value" : 0.1
}
],
"nutritionData" : {
"carbohydrateGrams" : 0.1 ,
"proteinGrams" : 0.1 ,
"fatGrams" : 0.1
},
"sport" : {
"id" : "22353647432"
},
"strengthTrainingResults" : {
"completedRounds" : [
{
"type" : "COMPLETED_ROUND_TYPE_AMRAP" ,
"startTimeDeltaMillis" : 60000 ,
"endTimeDeltaMillis" : 80000 ,
"workoutPhase" : "WORKOUT_PHASE_WARMUP" ,
"completedSets" : [
{
"type" : "SET_TYPE_WORK" ,
"startTimeDeltaMillis" : 60000 ,
"endTimeDeltaMillis" : 80000 ,
"resistanceType" : "RESISTANCE_BODY_WEIGHT" ,
"movement" : "string" ,
"avgHeartRate" : 120 ,
"maxHeartRate" : 140
}
]
}
]
},
"trainingLoadReport" : {
"cardioLoad" : 123.45 ,
"muscleLoad" : 234.56 ,
"cardioLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"muscleLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"calculationTime" : "2025-09-18T21:46:01.951Z" ,
"sessionRpe" : "RPE_MODERATE" ,
"perceivedLoad" : 0.1 ,
"perceivedLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM"
},
"laps" : {
"laps" : [
{
"splitTimeMillis" : 0 ,
"durationMillis" : 600000 ,
"distanceMeters" : 1500 ,
"startLocationLatitude" : 37.7749 ,
"startLocationLongitude" : -122.4194 ,
"startLocationAltitude" : 15 ,
"startLocationTimeMillis" : 0 ,
"ascentMeters" : 100 ,
"descentMeters" : 80 ,
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"avgSecsPerPool" : 0.1 ,
"poolsSwum" : 10 ,
"strokes" : 81
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
}
}
],
"autoLaps" : [
{
"splitTimeMillis" : 0 ,
"durationMillis" : 600000 ,
"distanceMeters" : 1500 ,
"startLocationLatitude" : 37.7749 ,
"startLocationLongitude" : -122.4194 ,
"startLocationAltitude" : 15 ,
"startLocationTimeMillis" : 0 ,
"ascentMeters" : 100 ,
"descentMeters" : 80 ,
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"avgSecsPerPool" : 0.1 ,
"poolsSwum" : 10 ,
"strokes" : 81
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
}
}
]
},
"statistics" : {
"statistics" : [
{
"type" : "STATISTICS_TYPE_SPEED" ,
"min" : 0.1 ,
"avg" : 0.1 ,
"max" : 0.1
}
],
"swimmingStatistics" : {
"distanceMeters" : 1500 ,
"totalStrokeCount" : 100 ,
"poolsSwum" : 10 ,
"poolUnits" : "POOL_UNIT_METERS" ,
"poolLength" : 25 ,
"swimmingStyles" : [
{
"style" : "SWIMMING_STYLE_FREESTYLE" ,
"distanceMeters" : 500 ,
"strokeCount" : 81 ,
"swimmingTimeTotalMillis" : 0 ,
"poolTimeMinMillis" : 0 ,
"hrAvg" : 120 ,
"hrMax" : 140 ,
"swolfAvg" : 30
}
]
},
"trainingPeaksStatistics" : {
"intensityFactor" : 0.1 ,
"normalizedPower" : 200 ,
"trainingStressScore" : 0.1
}
},
"zones" : [
{
"type" : "ZONE_TYPE_HEART_RATE" ,
"zones" : [
{
"lowerLimit" : 100 ,
"higherLimit" : 120 ,
"inZone" : 100 ,
"distanceMeters" : 1000 ,
"muscleLoad" : 100
}
]
}
],
"samples" : {
"samples" : [
{
"type" : "HEART_RATE" ,
"intervalMillis" : 1000 ,
"values" : [
88 ,
89 ,
90
]
}
],
"transitionSamples" : [
{
"type" : "HEART_RATE" ,
"intervalMillis" : 1000 ,
"values" : [
88 ,
89 ,
90
]
}
],
"rrSamples" : [
{
"durationMillis" : 800 ,
"offline" : true
}
],
"transitionRrSamples" : [
{
"durationMillis" : 800 ,
"offline" : true
}
],
"swimmingPhases" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"phases" : [
{
"startOffsetMillis" : 32423 ,
"durationMillis" : 67500 ,
"style" : "BREASTSTROKE" ,
"strokes" : 31
}
]
}
},
"routes" : {
"route" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"wayPoints" : [
{
"longitude" : -122.4194 ,
"latitude" : 37.7749 ,
"altitude" : 15 ,
"elapsedMillis" : 0
}
]
},
"transitionRoute" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"wayPoints" : [
{
"longitude" : -122.4194 ,
"latitude" : 37.7749 ,
"altitude" : 15 ,
"elapsedMillis" : 0
}
]
}
},
"pauseTimes" : [
{
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z"
}
]
}
],
"testResults" : {
"cyclingTest" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"fitnessClass" : "FITNESS_CLASS_GOOD" ,
"functionalThresholdPower" : 250 ,
"previousFunctionalThresholdPower" : 240 ,
"vo2max" : 55
},
"runningTest" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"category" : "RUNNING_TEST_CATEGORY_MAXIMAL" ,
"maxAerobicSpeedKmh" : 2.8 ,
"maxAerobicPower" : 300 ,
"maxHrBpm" : 182 ,
"vo2max" : 55 ,
"initialSpeedKmh" : 8 ,
"speedIncreaseRate" : 0.5 ,
"qualityRatePercent" : 95
},
"walkingTest" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"category" : "WALKING_TEST_CATEGORY_TIMED_15_MIN" ,
"fitnessClass" : "VO2MAX_FITNESS_CLASS_GOOD" ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"testDistanceMeters" : 1500 ,
"steps" : 2000 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"testHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"vo2max" : 55 ,
"walkingPercent" : 70 ,
"speedVariationPercent" : 30 ,
"cadenceVariationPercent" : 20 ,
"hrAbove65ProsMaxHr" : 15 ,
"allCriterionQualityPercent" : 90 ,
"steadyWalkingGuidance" : 85 ,
"walkingSpeedGuidance" : 5 ,
"duration" : 900000
}
},
"hillSplits" : {
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z" ,
"totalUphillDistanceMeters" : 1500 ,
"totalDownhillDistanceMeters" : 1000 ,
"totalUphillCount" : 10 ,
"totalDownhillCount" : 9 ,
"hills" : [
{
"type" : "HILL_TYPE_UPHILL" ,
"startTime" : "2025-09-18T21:46:01.952Z" ,
"endTime" : "2025-09-18T21:46:01.952Z" ,
"upHill" : {
"uphillNumber" : 0 ,
"ascentMeters" : 100 ,
"avgInclinePercent" : 5
},
"downHill" : {
"downhillNumber" : 0 ,
"descentMeters" : 80 ,
"avgDeclinePercent" : 4
},
"distanceMeters" : 500 ,
"maxSpeedKmh" : 25 ,
"avgSpeedKmh" : 20 ,
"startAltitudeMeters" : 100 ,
"endAltitudeMeters" : 150 ,
"avgHrBpm" : 80 ,
"maxHrBpm" : 120 ,
"duration" : 900000 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
}
]
},
"trainingLoadReport" : {
"cardioLoad" : 123.45 ,
"muscleLoad" : 234.56 ,
"cardioLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"muscleLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM" ,
"calculationTime" : "2025-09-18T21:46:01.951Z" ,
"sessionRpe" : "RPE_MODERATE" ,
"perceivedLoad" : 0.1 ,
"perceivedLoadInterpretation" : "LOAD_INTERPRETATION_MEDIUM"
},
"comments" : [
{
"identifier" : {
"id" : "string"
},
"created" : "2025-09-18T21:46:01.952Z" ,
"modified" : "2025-09-18T21:46:01.952Z" ,
"note" : "string" ,
"fromOtherUser" : true
}
]
}
TrainingSession
Properties
{
"identifier" : {
"id" : "string"
},
"created" : "2025-09-18T21:46:01.961Z" ,
"modified" : "2025-09-18T21:46:01.961Z" ,
"note" : "string" ,
"fromOtherUser" : true
}
TrainingSessionComment
Properties
Name
Type
Required
Description
identifier
trainingsessionTrainingSessionCommentReference
false
created
string
true
Datetime in ISO 8601 format. UTC time.
modified
string
true
Datetime in ISO 8601 format. UTC time.
note
string
true
fromOtherUser
boolean
false
Is 'true' when comment is not from training-session user him self. E.g. from coach.
TrainingSessionCommentReference
Properties
Name
Type
Required
Description
id
string
true
trainingsessionTrainingSessionReference
TrainingSession reference
Properties
Name
Type
Required
Description
id
string
true
trainingsessionTrainingTargetReference
TrainingTargetReference
Properties
Name
Type
Required
Description
id
string
true
trainingsessionUpHill
{
"uphillNumber" : 0 ,
"ascentMeters" : 100 ,
"avgInclinePercent" : 5
}
UpHill
Properties
Name
Type
Required
Description
uphillNumber
integer(int64)
true
ascentMeters
number(float)
true
avgInclinePercent
number(float)
true
Average incline in percentage.
trainingsessionWalkingTest
{
"startTime" : "2025-09-18T21:46:01.963Z" ,
"endTime" : "2025-09-18T21:46:01.963Z" ,
"warmup" : {
"startTime" : "2025-09-18T21:46:01.963Z" ,
"endTime" : "2025-09-18T21:46:01.963Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"performance" : {
"startTime" : "2025-09-18T21:46:01.963Z" ,
"endTime" : "2025-09-18T21:46:01.963Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"cooldown" : {
"startTime" : "2025-09-18T21:46:01.963Z" ,
"endTime" : "2025-09-18T21:46:01.963Z" ,
"durationMillis" : 600000 ,
"avgHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"avgPower" : 200 ,
"maxPower" : 730
},
"category" : "WALKING_TEST_CATEGORY_TIMED_15_MIN" ,
"fitnessClass" : "VO2MAX_FITNESS_CLASS_GOOD" ,
"avgSpeedKmh" : 8 ,
"maxSpeedKmh" : 10 ,
"testDistanceMeters" : 1500 ,
"steps" : 2000 ,
"avgCadence" : 80 ,
"maxCadence" : 90 ,
"testHrBpm" : 120 ,
"maxHrBpm" : 140 ,
"vo2max" : 55 ,
"walkingPercent" : 70 ,
"speedVariationPercent" : 30 ,
"cadenceVariationPercent" : 20 ,
"hrAbove65ProsMaxHr" : 15 ,
"allCriterionQualityPercent" : 90 ,
"steadyWalkingGuidance" : 85 ,
"walkingSpeedGuidance" : 5 ,
"duration" : 900000
}
WalkingTest
Properties
Name
Type
Required
Description
startTime
string
true
Datetime in ISO 8601 format. In user local time.
endTime
string
true
Datetime in ISO 8601 format. In user local time.
warmup
trainingsessionTestPhase
true
performance
trainingsessionTestPhase
true
cooldown
trainingsessionTestPhase
true
category
WalkingTestWalkingTestCategory
true
The walking test category.
fitnessClass
WalkingTestVO2maxFitnessClass
true
The VO2max fitness class.
avgSpeedKmh
number(float)
true
maxSpeedKmh
number(float)
true
testDistanceMeters
number(float)
true
steps
integer(int64)
true
avgCadence
integer(int64)
true
Average cadence in rounds per minute (rpm).
maxCadence
integer(int64)
true
Maximum cadence in rounds per minute (rpm).
testHrBpm
integer(int64)
true
Heart rate in beats per minute (bpm).
maxHrBpm
integer(int64)
true
Maximum heart rate in beats per minute (bpm).
vo2max
integer(int64)
true
walkingPercent
integer(int64)
true
Percentage of walking in the test.
speedVariationPercent
integer(int64)
true
Percentage of speed variation in the test.
cadenceVariationPercent
integer(int64)
true
Percentage of cadence variation in the test.
hrAbove65ProsMaxHr
integer(int64)
true
allCriterionQualityPercent
integer(int64)
true
steadyWalkingGuidance
integer(int64)
true
walkingSpeedGuidance
integer(int64)
true
duration
integer(int64)
true
trainingsessionZone
{
"lowerLimit" : 100 ,
"higherLimit" : 120 ,
"inZone" : 100 ,
"distanceMeters" : 1000 ,
"muscleLoad" : 100
}
Zone
Properties
Name
Type
Required
Description
lowerLimit
number(double)
true
Lower limit of the zone. Unit depends on the zone type.
higherLimit
number(double)
true
Higher limit of the zone. Unit depends on the zone type.
inZone
integer(int64)
true
Time spent in the zone in milliseconds.
distanceMeters
number(float)
false
Distance in the zone in meters. Only relevant in speed zone types.
muscleLoad
number(float)
false
Muscle load in the zone. Only relevant in power zone types.
ConsentHistoryStateState
ConsentHistoryState
Properties
Name
Type
Required
Description
ConsentHistoryState
string
false
The consent history state.
Enumerated Values
Property
Value
ConsentHistoryState
UNSPECIFIED
ConsentHistoryState
WITHDRAWN
ConsentHistoryState
ACCEPTED
"DATE_FORMAT_DAY_MONTH_YEAR"
DateFormat
Properties
Name
Type
Required
Description
DateFormat
string
false
Enumerated Values
Property
Value
DateFormat
DATE_FORMAT_UNSPECIFIED
DateFormat
DATE_FORMAT_DAY_MONTH_YEAR
DateFormat
DATE_FORMAT_MONTH_DAY_YEAR
DateFormat
DATE_FORMAT_YEAR_MONTH_DAY
LocalizationSettingsDateSeparator
DateSeparator
Properties
Name
Type
Required
Description
DateSeparator
string
false
Enumerated Values
Property
Value
DateSeparator
DATE_SEPARATOR_UNSPECIFIED
DateSeparator
DATE_SEPARATOR_PERIOD
DateSeparator
DATE_SEPARATOR_SLASH
DateSeparator
DATE_SEPARATOR_HYPHEN
LocalizationSettingsFirstDayOfWeek
"FIRST_DAY_OF_WEEK_MONDAY"
FirstDayOfWeek
Properties
Name
Type
Required
Description
FirstDayOfWeek
string
false
The first day of the week.
Enumerated Values
Property
Value
FirstDayOfWeek
FIRST_DAY_OF_WEEK_UNSPECIFIED
FirstDayOfWeek
FIRST_DAY_OF_WEEK_SUNDAY
FirstDayOfWeek
FIRST_DAY_OF_WEEK_MONDAY
FirstDayOfWeek
FIRST_DAY_OF_WEEK_TUESDAY
FirstDayOfWeek
FIRST_DAY_OF_WEEK_WEDNESDAY
FirstDayOfWeek
FIRST_DAY_OF_WEEK_THURSDAY
FirstDayOfWeek
FIRST_DAY_OF_WEEK_FRIDAY
FirstDayOfWeek
FIRST_DAY_OF_WEEK_SATURDAY
LocalizationSettingsMeasurementUnit
"MEASUREMENT_UNIT_METRIC"
MeasurementUnit
Properties
Name
Type
Required
Description
MeasurementUnit
string
false
Enumerated Values
Property
Value
MeasurementUnit
MEASUREMENT_UNIT_UNSPECIFIED
MeasurementUnit
MEASUREMENT_UNIT_IMPERIAL
MeasurementUnit
MEASUREMENT_UNIT_METRIC
"TIME_FORMAT_TWENTY_FOUR_HOUR"
TimeFormat
Properties
Name
Type
Required
Description
TimeFormat
string
false
Enumerated Values
Property
Value
TimeFormat
TIME_FORMAT_UNSPECIFIED
TimeFormat
TIME_FORMAT_TWENTY_FOUR_HOUR
TimeFormat
TIME_FORMAT_TWELVE_HOUR
TimeFormatSeparator
Properties
Name
Type
Required
Description
TimeFormatSeparator
string
false
The time format separator.
Enumerated Values
Property
Value
TimeFormatSeparator
TIME_SEPARATOR_UNSPECIFIED
TimeFormatSeparator
TIME_SEPARATOR_COLON
TimeFormatSeparator
TIME_SEPARATOR_PERIOD
accountAccountData
{
"basicInfo" : {
"firstName" : "John" ,
"lastName" : "Doe" ,
"email" : "john.doe@example.com" ,
"nickname" : "Johnny" ,
"created" : "2023-10-01T12:00:00Z" ,
"modified" : "2023-10-01T12:00:00Z"
},
"profileInformation" : {
"motto" : "No pain, no gain" ,
"favoriteSports" : [
{
"id" : "22353647432"
}
]
},
"localizationSettings" : {
"firstDayOfWeek" : "FIRST_DAY_OF_WEEK_MONDAY" ,
"measurementUnit" : "MEASUREMENT_UNIT_METRIC" ,
"dateFormat" : "DATE_FORMAT_DAY_MONTH_YEAR" ,
"dateSeparator" : "DATE_SEPARATOR_SLASH" ,
"timeFormat" : "TIME_FORMAT_TWENTY_FOUR_HOUR" ,
"timeSeparator" : "TIME_SEPARATOR_COLON" ,
"timezoneOffsetMinutes" : 180 ,
"language" : "en" ,
"flowLanguage" : "en"
},
"generalSettings" : [
{
"name" : "setting_key_name" ,
"value" : "setting value"
}
],
"physicalInformation" : {
"sex" : "SEX_MALE" ,
"birthday" : "2000-01-01" ,
"height" : "180.0" ,
"weight" : "70.0" ,
"weightSource" : "WEIGHT_SOURCE_MEASURED" ,
"trainingBackground" : "TRAINING_BACKGROUND_REGULAR" ,
"vo2Max" : "50" ,
"maximumHeartRate" : "180" ,
"restingHeartRate" : "60" ,
"aerobicThreshold" : "140" ,
"anaerobicThreshold" : "160" ,
"sleepGoal" : "28800000" ,
"typicalDay" : "TYPICAL_DAY_MOSTLY_SITTING" ,
"metThreshold" : "0.875" ,
"weeklyRecoveryTimeSum" : "28.35" ,
"functionalThresholdPower" : "200" ,
"speedCalibrationOffset" : "2.5" ,
"maximumAerobicPower" : "200" ,
"maximumAerobicSpeed" : "3.0" ,
"created" : "2023-10-01T12:00:00Z" ,
"modified" : "2023-10-01T12:00:00Z" ,
"weightLastModified" : "2023-10-01T12:00:00Z" ,
"trainingBackgroundLastModified" : "2023-10-01T12:00:00Z" ,
"vo2MaxLastModified" : "2023-10-01T12:00:00Z" ,
"sleepGoalLastModified" : "2023-10-01T12:00:00Z" ,
"weeklyRecoveryTimeSumLastModified" : "2023-10-01T12:00:00Z" ,
"functionalThresholdPowerLastModified" : "2023-10-01T12:00:00Z" ,
"maximumAerobicPowerLastModified" : "2023-10-01T12:00:00Z" ,
"maximumAerobicSpeedLastModified" : "2023-10-01T12:00:00Z"
},
"contactInformation" : {
"phoneNumber" : "+358123456789" ,
"address" : {
"street1" : "123 Main St" ,
"street2" : "Apt 4B" ,
"street3" : "Suite 100" ,
"countryCode" : "US" ,
"stateCode" : "NY" ,
"city" : "New York" ,
"zipCode" : "10001"
}
},
"consents" : [
{
"type" : "GDPR" ,
"version" : "2023-10-01" ,
"accepted" : "true" ,
"metadata" : [
{
"description" : "GDPR consent metadata description" ,
"content" : "GDPR consent metadata content"
}
],
"approvedDataTypes" : [
"string"
],
"unapprovedDataTypes" : [
"string"
]
}
],
"userTestPreferences" : {
"orthostaticResetDate" : "2023-10-01T12:00:00Z" ,
"created" : "2023-10-01T12:00:00Z" ,
"modified" : "2023-10-01T12:00:00Z"
},
"consentHistoryStates" : [
{
"type" : "string" ,
"version" : "string" ,
"created" : "2019-08-24T14:15:22Z" ,
"state" : "ACCEPTED" ,
"consentMetadata" : [
{
"description" : "GDPR consent metadata description" ,
"content" : "GDPR consent metadata content"
}
]
}
]
}
AccountData
Properties
accountAddress
{
"street1" : "123 Main St" ,
"street2" : "Apt 4B" ,
"street3" : "Suite 100" ,
"countryCode" : "US" ,
"stateCode" : "NY" ,
"city" : "New York" ,
"zipCode" : "10001"
}
Properties
Name
Type
Required
Description
street1
string
false
street2
string
false
street3
string
false
countryCode
string
false
Country code as ISO 3166-1 alpha-2 country code.
stateCode
string
false
city
string
false
zipCode
string
false
accountBasicInfo
{
"firstName" : "John" ,
"lastName" : "Doe" ,
"email" : "john.doe@example.com" ,
"nickname" : "Johnny" ,
"created" : "2023-10-01T12:00:00Z" ,
"modified" : "2023-10-01T12:00:00Z"
}
BasicInfo
Properties
Name
Type
Required
Description
firstName
string
true
lastName
string
true
email
string
true
nickname
string
false
User's nickname. Not in use in current ecosystem.
created
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
modified
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
accountConsent
{
"type" : "GDPR" ,
"version" : "2023-10-01" ,
"accepted" : "true" ,
"metadata" : [
{
"description" : "GDPR consent metadata description" ,
"content" : "GDPR consent metadata content"
}
],
"approvedDataTypes" : [
"string"
],
"unapprovedDataTypes" : [
"string"
]
}
Properties
Name
Type
Required
Description
type
string
true
version
string
true
Version of the consent. Date in ISO 8601 format.
accepted
boolean
true
Has user accepted the consent.
metadata
[accountConsentMetadata ]
false
approvedDataTypes
[string]
false
Possible data types that have been approved by the user.
unapprovedDataTypes
[string]
false
Possible data types that have not been approved by the user.
accountConsentHistoryState
{
"type" : "string" ,
"version" : "string" ,
"created" : "2019-08-24T14:15:22Z" ,
"state" : "ACCEPTED" ,
"consentMetadata" : [
{
"description" : "GDPR consent metadata description" ,
"content" : "GDPR consent metadata content"
}
]
}
Properties
Name
Type
Required
Description
type
string
false
version
string
false
Version of the consent. Date in ISO 8601 format.
created
string(date-time)
false
Consent state created time in ISO 8601 format. UTC time.
state
ConsentHistoryStateState
false
consentMetadata
[accountConsentMetadata ]
false
{
"description" : "GDPR consent metadata description" ,
"content" : "GDPR consent metadata content"
}
Properties
Name
Type
Required
Description
description
string
true
Description of the consent metadata.
content
string
true
{
"phoneNumber" : "+358123456789" ,
"address" : {
"street1" : "123 Main St" ,
"street2" : "Apt 4B" ,
"street3" : "Suite 100" ,
"countryCode" : "US" ,
"stateCode" : "NY" ,
"city" : "New York" ,
"zipCode" : "10001"
}
}
Properties
Name
Type
Required
Description
phoneNumber
string
false
address
accountAddress
false
accountLocalizationSettings
{
"firstDayOfWeek" : "FIRST_DAY_OF_WEEK_MONDAY" ,
"measurementUnit" : "MEASUREMENT_UNIT_METRIC" ,
"dateFormat" : "DATE_FORMAT_DAY_MONTH_YEAR" ,
"dateSeparator" : "DATE_SEPARATOR_SLASH" ,
"timeFormat" : "TIME_FORMAT_TWENTY_FOUR_HOUR" ,
"timeSeparator" : "TIME_SEPARATOR_COLON" ,
"timezoneOffsetMinutes" : 180 ,
"language" : "en" ,
"flowLanguage" : "en"
}
LocalizationSettings
Properties
{
"motto" : "No pain, no gain" ,
"favoriteSports" : [
{
"id" : "22353647432"
}
]
}
ProfileInformation
Properties
{
"sex" : "SEX_MALE" ,
"birthday" : "2000-01-01" ,
"height" : "180.0" ,
"weight" : "70.0" ,
"weightSource" : "WEIGHT_SOURCE_MEASURED" ,
"trainingBackground" : "TRAINING_BACKGROUND_REGULAR" ,
"vo2Max" : "50" ,
"maximumHeartRate" : "180" ,
"restingHeartRate" : "60" ,
"aerobicThreshold" : "140" ,
"anaerobicThreshold" : "160" ,
"sleepGoal" : "28800000" ,
"typicalDay" : "TYPICAL_DAY_MOSTLY_SITTING" ,
"metThreshold" : "0.875" ,
"weeklyRecoveryTimeSum" : "28.35" ,
"functionalThresholdPower" : "200" ,
"speedCalibrationOffset" : "2.5" ,
"maximumAerobicPower" : "200" ,
"maximumAerobicSpeed" : "3.0" ,
"created" : "2023-10-01T12:00:00Z" ,
"modified" : "2023-10-01T12:00:00Z" ,
"weightLastModified" : "2023-10-01T12:00:00Z" ,
"trainingBackgroundLastModified" : "2023-10-01T12:00:00Z" ,
"vo2MaxLastModified" : "2023-10-01T12:00:00Z" ,
"sleepGoalLastModified" : "2023-10-01T12:00:00Z" ,
"weeklyRecoveryTimeSumLastModified" : "2023-10-01T12:00:00Z" ,
"functionalThresholdPowerLastModified" : "2023-10-01T12:00:00Z" ,
"maximumAerobicPowerLastModified" : "2023-10-01T12:00:00Z" ,
"maximumAerobicSpeedLastModified" : "2023-10-01T12:00:00Z"
}
Properties
Name
Type
Required
Description
sex
accountUserPhysicalInformationSex
false
birthday
string
false
Users birthday. Date in ISO 8601 format.
height
number(float)
false
weight
number(float)
false
weightSource
accountUserPhysicalInformationWeightSource
false
Source of the measured weight.
trainingBackground
accountUserPhysicalInformationTrainingBackground
false
User's training background.
vo2Max
integer(int32)
false
User VO2 max in ml/kg/min.
maximumHeartRate
integer(int32)
false
User maximum heart rate in beats per minute (bpm).
restingHeartRate
integer(int32)
false
User resting heart rate in beats per minute (bpm).
aerobicThreshold
integer(int32)
false
User aerobic threshold in beats per minute (bpm).
anaerobicThreshold
integer(int32)
false
User anaerobic threshold in beats per minute (bpm).
sleepGoal
string(uint64)
false
User's daily sleep goal in milliseconds. Valid range is from 4 to 20 hours.
typicalDay
accountUserPhysicalInformationTypicalDay
false
metThreshold
number(double)
false
weeklyRecoveryTimeSum
number(double)
false
User's weekly RT sum. Units and range unknown.
functionalThresholdPower
integer(int32)
false
User's functional threshold power in watts.
speedCalibrationOffset
number(float)
false
Calibration offset calculated from two speed sources (km/h).
maximumAerobicPower
integer(int32)
false
User's maximum aerobic power in watts.
maximumAerobicSpeed
number(float)
false
User's maximum aerobic speed in min/km.
created
string(date-time)
true
Created time in ISO 8601 format. UTC time.
modified
string(date-time)
true
Modified time in ISO 8601 format. UTC time.
weightLastModified
string(date-time)
false
Modified time in ISO 8601 format. UTC time.
trainingBackgroundLastModified
string(date-time)
false
Modified time in ISO 8601 format. UTC time.
vo2MaxLastModified
string(date-time)
false
Modified time in ISO 8601 format. UTC time.
sleepGoalLastModified
string(date-time)
false
Modified time in ISO 8601 format. UTC time.
weeklyRecoveryTimeSumLastModified
string(date-time)
false
Modified time in ISO 8601 format. UTC time.
functionalThresholdPowerLastModified
string(date-time)
false
Modified time in ISO 8601 format. UTC time.
maximumAerobicPowerLastModified
string(date-time)
false
Modified time in ISO 8601 format. UTC time.
maximumAerobicSpeedLastModified
string(date-time)
false
Modified time in ISO 8601 format. UTC time.
Sex
Properties
Name
Type
Required
Description
Sex
string
false
Enumerated Values
Property
Value
Sex
SEX_UNSPECIFIED
Sex
SEX_MALE
Sex
SEX_FEMALE
"TRAINING_BACKGROUND_REGULAR"
TrainingBackground
Properties
Name
Type
Required
Description
TrainingBackground
string
false
The classification of the user's training background.
Enumerated Values
Property
Value
TrainingBackground
TRAINING_BACKGROUND_UNSPECIFIED
TrainingBackground
TRAINING_BACKGROUND_OCCASIONAL
TrainingBackground
TRAINING_BACKGROUND_REGULAR
TrainingBackground
TRAINING_BACKGROUND_FREQUENT
TrainingBackground
TRAINING_BACKGROUND_HEAVY
TrainingBackground
TRAINING_BACKGROUND_SEMI_PRO
TrainingBackground
TRAINING_BACKGROUND_PRO
"TYPICAL_DAY_MOSTLY_SITTING"
TypicalDay
Properties
Name
Type
Required
Description
TypicalDay
string
false
The user's typical day activity level.
Enumerated Values
Property
Value
TypicalDay
TYPICAL_DAY_UNSPECIFIED
TypicalDay
TYPICAL_DAY_MOSTLY_SITTING
TypicalDay
TYPICAL_DAY_MOSTLY_STANDING
TypicalDay
TYPICAL_DAY_MOSTLY_MOVING
WeightSource
Properties
Name
Type
Required
Description
WeightSource
string
false
The source of the weight measurement.
Enumerated Values
Property
Value
WeightSource
WEIGHT_SOURCE_UNSPECIFIED
WeightSource
WEIGHT_SOURCE_DEFAULT
WeightSource
WEIGHT_SOURCE_ESTIMATE
WeightSource
WEIGHT_SOURCE_USER
WeightSource
WEIGHT_SOURCE_MEASURED
WeightSource
WEIGHT_SOURCE_KEEP
accountUserSetting
{
"name" : "setting_key_name" ,
"value" : "setting value"
}
Properties
Name
Type
Required
Description
name
string
true
value
string
true
accountUserTestPreferences
{
"orthostaticResetDate" : "2023-10-01T12:00:00Z" ,
"created" : "2023-10-01T12:00:00Z" ,
"modified" : "2023-10-01T12:00:00Z"
}
Properties
Name
Type
Required
Description
orthostaticResetDate
string
false
Datetime in ISO 8601 format. User's local time.
created
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
modified
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
domainsaccountErrorResponse
{
"errorMessage" : "string"
}
Properties
Name
Type
Required
Description
errorMessage
string
false
domainsaccountLoadResponse
{
"accountData" : {
"basicInfo" : {
"firstName" : "John" ,
"lastName" : "Doe" ,
"email" : "john.doe@example.com" ,
"nickname" : "Johnny" ,
"created" : "2023-10-01T12:00:00Z" ,
"modified" : "2023-10-01T12:00:00Z"
},
"profileInformation" : {
"motto" : "No pain, no gain" ,
"favoriteSports" : [
{
"id" : "22353647432"
}
]
},
"localizationSettings" : {
"firstDayOfWeek" : "FIRST_DAY_OF_WEEK_MONDAY" ,
"measurementUnit" : "MEASUREMENT_UNIT_METRIC" ,
"dateFormat" : "DATE_FORMAT_DAY_MONTH_YEAR" ,
"dateSeparator" : "DATE_SEPARATOR_SLASH" ,
"timeFormat" : "TIME_FORMAT_TWENTY_FOUR_HOUR" ,
"timeSeparator" : "TIME_SEPARATOR_COLON" ,
"timezoneOffsetMinutes" : 180 ,
"language" : "en" ,
"flowLanguage" : "en"
},
"generalSettings" : [
{
"name" : "setting_key_name" ,
"value" : "setting value"
}
],
"physicalInformation" : {
"sex" : "SEX_MALE" ,
"birthday" : "2000-01-01" ,
"height" : "180.0" ,
"weight" : "70.0" ,
"weightSource" : "WEIGHT_SOURCE_MEASURED" ,
"trainingBackground" : "TRAINING_BACKGROUND_REGULAR" ,
"vo2Max" : "50" ,
"maximumHeartRate" : "180" ,
"restingHeartRate" : "60" ,
"aerobicThreshold" : "140" ,
"anaerobicThreshold" : "160" ,
"sleepGoal" : "28800000" ,
"typicalDay" : "TYPICAL_DAY_MOSTLY_SITTING" ,
"metThreshold" : "0.875" ,
"weeklyRecoveryTimeSum" : "28.35" ,
"functionalThresholdPower" : "200" ,
"speedCalibrationOffset" : "2.5" ,
"maximumAerobicPower" : "200" ,
"maximumAerobicSpeed" : "3.0" ,
"created" : "2023-10-01T12:00:00Z" ,
"modified" : "2023-10-01T12:00:00Z" ,
"weightLastModified" : "2023-10-01T12:00:00Z" ,
"trainingBackgroundLastModified" : "2023-10-01T12:00:00Z" ,
"vo2MaxLastModified" : "2023-10-01T12:00:00Z" ,
"sleepGoalLastModified" : "2023-10-01T12:00:00Z" ,
"weeklyRecoveryTimeSumLastModified" : "2023-10-01T12:00:00Z" ,
"functionalThresholdPowerLastModified" : "2023-10-01T12:00:00Z" ,
"maximumAerobicPowerLastModified" : "2023-10-01T12:00:00Z" ,
"maximumAerobicSpeedLastModified" : "2023-10-01T12:00:00Z"
},
"contactInformation" : {
"phoneNumber" : "+358123456789" ,
"address" : {
"street1" : "123 Main St" ,
"street2" : "Apt 4B" ,
"street3" : "Suite 100" ,
"countryCode" : "US" ,
"stateCode" : "NY" ,
"city" : "New York" ,
"zipCode" : "10001"
}
},
"consents" : [
{
"type" : "GDPR" ,
"version" : "2023-10-01" ,
"accepted" : "true" ,
"metadata" : [
{
"description" : "GDPR consent metadata description" ,
"content" : "GDPR consent metadata content"
}
],
"approvedDataTypes" : [
"string"
],
"unapprovedDataTypes" : [
"string"
]
}
],
"userTestPreferences" : {
"orthostaticResetDate" : "2023-10-01T12:00:00Z" ,
"created" : "2023-10-01T12:00:00Z" ,
"modified" : "2023-10-01T12:00:00Z"
},
"consentHistoryStates" : [
{
"type" : "string" ,
"version" : "string" ,
"created" : "2019-08-24T14:15:22Z" ,
"state" : "ACCEPTED" ,
"consentMetadata" : [
{
"description" : "GDPR consent metadata description" ,
"content" : "GDPR consent metadata content"
}
]
}
]
}
}
Properties
domainsaccountSportReference
SportReference
Properties
Name
Type
Required
Description
id
string
true
ActivityInfoActivityClass
ActivityClass
Properties
Name
Type
Required
Description
ActivityClass
string
false
The classification of the activity level.
Enumerated Values
Property
Value
ActivityClass
ACTIVITY_CLASS_UNKNOWN
ActivityClass
ACTIVITY_CLASS_SLEEP
ActivityClass
ACTIVITY_CLASS_SEDENTARY
ActivityClass
ACTIVITY_CLASS_LIGHT
ActivityClass
ACTIVITY_CLASS_CONTINUOUS_MODERATE
ActivityClass
ACTIVITY_CLASS_INTERMITTENT_MODERATE
ActivityClass
ACTIVITY_CLASS_CONTINUOUS_VIGOROUS
ActivityClass
ACTIVITY_CLASS_INTERMITTENT_VIGOROUS
ActivityClass
ACTIVITY_CLASS_NON_WEAR
ActivityClass
ACTIVITY_CLASS_NO_DATA
activityActivities
{
"activityDays" : [
{
"date" : "2000-01-01" ,
"target" : {
"minDailyMetGoal" : "345.4"
},
"physicalInformation" : {
"birthday" : "1995-05-13" ,
"sex" : "SEX_UNSPECIFIED" ,
"height" : "172.0" ,
"weight" : "79.0" ,
"maximumHeartRate" : "195" ,
"restingHeartRate" : "55" ,
"aerobicThreshold" : "130" ,
"anaerobicThreshold" : "175" ,
"vo2Max" : "55" ,
"trainingBackground" : "TRAINING_BACKGROUND_UNSPECIFIED" ,
"weightSource" : "WEIGHT_SOURCE_UNSPECIFIED" ,
"sleepGoal" : "14400000"
},
"activitiesPerDevice" : [
{
"deviceReference" : {
"deviceId" : "ABC102003"
},
"activitySamples" : [
{
"sportInfos" : [
{
"factor" : "2.0" ,
"time" : "14:41:45"
}
],
"activityInfos" : [
{
"activityClass" : "ACTIVITY_CLASS_SLEEP" ,
"time" : "14:41:45" ,
"factor" : "2.0"
}
],
"inactivityInfos" : [
{
"time" : "14:41:45"
}
],
"stepSamples" : {
"startTime" : "14:41:45" ,
"interval" : "60000" ,
"steps" : [
0
]
},
"metSamples" : {
"startTime" : "14:41:45" ,
"interval" : "60000" ,
"mets" : [
0.1
]
}
}
]
}
]
}
]
}
Properties
Name
Type
Required
Description
activityDays
[activityActivityDay ]
false
Each element represents a single day of activity data.
activityActivityDay
{
"date" : "2000-01-01" ,
"target" : {
"minDailyMetGoal" : "345.4"
},
"physicalInformation" : {
"birthday" : "1995-05-13" ,
"sex" : "SEX_UNSPECIFIED" ,
"height" : "172.0" ,
"weight" : "79.0" ,
"maximumHeartRate" : "195" ,
"restingHeartRate" : "55" ,
"aerobicThreshold" : "130" ,
"anaerobicThreshold" : "175" ,
"vo2Max" : "55" ,
"trainingBackground" : "TRAINING_BACKGROUND_UNSPECIFIED" ,
"weightSource" : "WEIGHT_SOURCE_UNSPECIFIED" ,
"sleepGoal" : "14400000"
},
"activitiesPerDevice" : [
{
"deviceReference" : {
"deviceId" : "ABC102003"
},
"activitySamples" : [
{
"sportInfos" : [
{
"factor" : "2.0" ,
"time" : "14:41:45"
}
],
"activityInfos" : [
{
"activityClass" : "ACTIVITY_CLASS_SLEEP" ,
"time" : "14:41:45" ,
"factor" : "2.0"
}
],
"inactivityInfos" : [
{
"time" : "14:41:45"
}
],
"stepSamples" : {
"startTime" : "14:41:45" ,
"interval" : "60000" ,
"steps" : [
0
]
},
"metSamples" : {
"startTime" : "14:41:45" ,
"interval" : "60000" ,
"mets" : [
0.1
]
}
}
]
}
]
}
ActivityDay
Properties
Name
Type
Required
Description
date
string
true
The date of the activity data. Date in ISO 8601 format.
target
activityActivityTarget
true
A value representing the target met accumulation of single day.
physicalInformation
domainsactivityPhysicalInformation
true
User's physical information for the activity day.
activitiesPerDevice
[activityDeviceRecordedActivity ]
false
Activity data collected by all devices user has in their use. Single element represents activity data collected by a specific device.
activityActivityInfo
{
"activityClass" : "ACTIVITY_CLASS_SLEEP" ,
"time" : "14:41:45" ,
"factor" : "2.0"
}
Properties
Name
Type
Required
Description
activityClass
ActivityInfoActivityClass
false
The classification of the activity level.
time
string
true
The time of activity day at which the new activity class was detected. Time in ISO 8601 format.
factor
number(float)
true
The activity factor. Range 0.0 - 10.0.
activityActivityTarget
{
"minDailyMetGoal" : "345.4"
}
A value representing the target met accumulation of single day.
Properties
Name
Type
Required
Description
minDailyMetGoal
integer(int64)
true
activityDeviceRecordedActivity
{
"deviceReference" : {
"deviceId" : "ABC102003"
},
"activitySamples" : [
{
"sportInfos" : [
{
"factor" : "2.0" ,
"time" : "14:41:45"
}
],
"activityInfos" : [
{
"activityClass" : "ACTIVITY_CLASS_SLEEP" ,
"time" : "14:41:45" ,
"factor" : "2.0"
}
],
"inactivityInfos" : [
{
"time" : "14:41:45"
}
],
"stepSamples" : {
"startTime" : "14:41:45" ,
"interval" : "60000" ,
"steps" : [
0
]
},
"metSamples" : {
"startTime" : "14:41:45" ,
"interval" : "60000" ,
"mets" : [
0.1
]
}
}
]
}
DeviceRecordedActivity
Properties
Name
Type
Required
Description
deviceReference
domainsactivityDeviceReference
true
Identifies the device that has collected the activity data.
activitySamples
[activityRecordedActivity ]
false
Collection of activities of a device that are all part of the activity day. Since a certain device might not be kept on for a full day, there can be gaps in the data.
activityInactivityInfo
Properties
Name
Type
Required
Description
time
string
true
The time of activity day at which the inactivity was detected. Time in ISO 8601 format.
activityMetSamples
{
"startTime" : "14:41:45" ,
"interval" : "60000" ,
"mets" : [
0.1
]
}
A vector of double valued samples, defining a sampling rate for each bucket and a
bucket for holding a value for the given duration.
Bucket duration is defined by the interval attribute.
That is, if interval is 1 minute, then each cell of the samples array specifies
the sampled value for the given minute.
Properties
Name
Type
Required
Description
startTime
string
true
The time of the first sample bucket. Time in ISO 8601 format.
interval
integer(int64)
true
The size of the sample buckets, in milliseconds.
mets
[number]
false
The mets for the sample buckets.
activityRecordedActivity
{
"sportInfos" : [
{
"factor" : "2.0" ,
"time" : "14:41:45"
}
],
"activityInfos" : [
{
"activityClass" : "ACTIVITY_CLASS_SLEEP" ,
"time" : "14:41:45" ,
"factor" : "2.0"
}
],
"inactivityInfos" : [
{
"time" : "14:41:45"
}
],
"stepSamples" : {
"startTime" : "14:41:45" ,
"interval" : "60000" ,
"steps" : [
0
]
},
"metSamples" : {
"startTime" : "14:41:45" ,
"interval" : "60000" ,
"mets" : [
0.1
]
}
}
Properties
activitySportInfo
{
"factor" : "2.0" ,
"time" : "14:41:45"
}
Properties
Name
Type
Required
Description
factor
number(float)
true
Sport activity factor. Related to training load.
time
string
true
The time of activity day at which the sports factor comes into effect. Time in ISO 8601 format.
activityStepSamples
{
"startTime" : "14:41:45" ,
"interval" : "60000" ,
"steps" : [
0
]
}
A vector of integer valued step samples, defining a sampling rate for each bucket and a
bucket for holding a value for the given duration.
Bucket duration is defined by the interval attribute.
That is, if interval is 1 minute, then each cell of the samples array specifies
the sampled value for the given minute.
Properties
Name
Type
Required
Description
startTime
string
true
The time of the first sample bucket. Time in ISO 8601 format.
interval
integer(int64)
true
The interval of the sample buckets, in milliseconds.
steps
[integer]
false
The steps for the sample buckets.
domainsactivityDeviceReference
{
"deviceId" : "ABC102003"
}
Identifies the device that has collected the activity data.
Properties
Name
Type
Required
Description
deviceId
string
true
domainsactivityErrorResponse
{
"errorMessage" : "string"
}
Properties
Name
Type
Required
Description
errorMessage
string
false
domainsactivityListResponse
{
"activities" : {
"activityDays" : [
{
"date" : "2000-01-01" ,
"target" : {
"minDailyMetGoal" : "345.4"
},
"physicalInformation" : {
"birthday" : "1995-05-13" ,
"sex" : "SEX_UNSPECIFIED" ,
"height" : "172.0" ,
"weight" : "79.0" ,
"maximumHeartRate" : "195" ,
"restingHeartRate" : "55" ,
"aerobicThreshold" : "130" ,
"anaerobicThreshold" : "175" ,
"vo2Max" : "55" ,
"trainingBackground" : "TRAINING_BACKGROUND_UNSPECIFIED" ,
"weightSource" : "WEIGHT_SOURCE_UNSPECIFIED" ,
"sleepGoal" : "14400000"
},
"activitiesPerDevice" : [
{
"deviceReference" : {
"deviceId" : "ABC102003"
},
"activitySamples" : [
{
"sportInfos" : [
{
"factor" : "2.0" ,
"time" : "14:41:45"
}
],
"activityInfos" : [
{
"activityClass" : "ACTIVITY_CLASS_SLEEP" ,
"time" : "14:41:45" ,
"factor" : "2.0"
}
],
"inactivityInfos" : [
{
"time" : "14:41:45"
}
],
"stepSamples" : {
"startTime" : "14:41:45" ,
"interval" : "60000" ,
"steps" : [
0
]
},
"metSamples" : {
"startTime" : "14:41:45" ,
"interval" : "60000" ,
"mets" : [
0.1
]
}
}
]
}
]
}
]
}
}
Properties
Name
Type
Required
Description
activities
activityActivities
false
The list of activity days for the requested period.
domainsactivityPhysicalInformation
{
"birthday" : "1995-05-13" ,
"sex" : "SEX_UNSPECIFIED" ,
"height" : "172.0" ,
"weight" : "79.0" ,
"maximumHeartRate" : "195" ,
"restingHeartRate" : "55" ,
"aerobicThreshold" : "130" ,
"anaerobicThreshold" : "175" ,
"vo2Max" : "55" ,
"trainingBackground" : "TRAINING_BACKGROUND_UNSPECIFIED" ,
"weightSource" : "WEIGHT_SOURCE_UNSPECIFIED" ,
"sleepGoal" : "14400000"
}
User's physical information for the activity day.
Properties
Name
Type
Required
Description
birthday
string
false
sex
domainsactivityPhysicalInformationSex
false
height
integer(int64)
false
weight
integer(int64)
false
maximumHeartRate
integer(int64)
false
User maximum heart rate in bpm.
restingHeartRate
integer(int64)
false
User resting heart rate in bpm.
aerobicThreshold
integer(int64)
false
User aerobic threshold in bpm.
anaerobicThreshold
integer(int64)
false
User anaerobic threshold in bpm.
vo2Max
integer(int64)
false
trainingBackground
domainsactivityPhysicalInformationTrainingBackground
false
User's training background.
weightSource
domainsactivityPhysicalInformationWeightSource
false
sleepGoal
string(uint64)
false
User's sleep goal in milliseconds.
domainsactivityPhysicalInformationSex
Sex
Properties
Name
Type
Required
Description
Sex
string
false
Enumerated Values
Property
Value
Sex
SEX_UNSPECIFIED
Sex
SEX_MALE
Sex
SEX_FEMALE
domainsactivityPhysicalInformationTrainingBackground
"TRAINING_BACKGROUND_UNSPECIFIED"
Classification of the user's training background.
Properties
Name
Type
Required
Description
anonymous
string
false
Classification of the user's training background.
Enumerated Values
Property
Value
anonymous
TRAINING_BACKGROUND_UNSPECIFIED
anonymous
TRAINING_BACKGROUND_OCCASIONAL
anonymous
TRAINING_BACKGROUND_REGULAR
anonymous
TRAINING_BACKGROUND_FREQUENT
anonymous
TRAINING_BACKGROUND_HEAVY
anonymous
TRAINING_BACKGROUND_SEMI_PRO
anonymous
TRAINING_BACKGROUND_PRO
domainsactivityPhysicalInformationWeightSource
"WEIGHT_SOURCE_UNSPECIFIED"
Classification of the user's weight source.
Properties
Name
Type
Required
Description
anonymous
string
false
Classification of the user's weight source.
Enumerated Values
Property
Value
anonymous
WEIGHT_SOURCE_UNSPECIFIED
anonymous
WEIGHT_SOURCE_DEFAULT
anonymous
WEIGHT_SOURCE_ESTIMATE
anonymous
WEIGHT_SOURCE_USER
anonymous
WEIGHT_SOURCE_MEASURED
anonymous
WEIGHT_SOURCE_KEEP
PerceivedRecoveryMuscleSoreness
"MUSCLE_SORENESS_UNSPECIFIED"
MuscleSoreness
Properties
Name
Type
Required
Description
MuscleSoreness
string
false
Enumerated Values
Property
Value
MuscleSoreness
MUSCLE_SORENESS_UNSPECIFIED
MuscleSoreness
MUSCLE_SORENESS_NONE
MuscleSoreness
MUSCLE_SORENESS_SOME
MuscleSoreness
MUSCLE_SORENESS_MUCH
PerceivedRecoveryOverallFatigue
"OVERALL_FATIGUE_UNSPECIFIED"
OverallFatigue
Properties
Name
Type
Required
Description
OverallFatigue
string
false
Enumerated Values
Property
Value
OverallFatigue
OVERALL_FATIGUE_UNSPECIFIED
OverallFatigue
OVERALL_FATIGUE_NORMAL
OverallFatigue
OVERALL_FATIGUE_LITTLE
OverallFatigue
OVERALL_FATIGUE_MUCH
PerceivedRecoverySleepUserRating
"SLEEP_USER_RATING_UNSPECIFIED"
SleepUserRating
Properties
Name
Type
Required
Description
SleepUserRating
string
false
Enumerated Values
Property
Value
SleepUserRating
SLEEP_USER_RATING_UNSPECIFIED
SleepUserRating
SLEEP_USER_RATING_SLEPT_POORLY
SleepUserRating
SLEEP_USER_RATING_SLEPT_SOMEWHAT_POORLY
SleepUserRating
SLEEP_USER_RATING_SLEPT_NEITHER_POORLY_NOR_WELL
SleepUserRating
SLEEP_USER_RATING_SLEPT_SOMEWHAT_WELL
SleepUserRating
SLEEP_USER_RATING_SLEPT_WELL
calendarCalendarEntries
{
"entries" : [
{
"note" : {
"created" : "2025-09-18T21:46:01.977Z" ,
"modified" : "2025-09-18T21:46:01.978Z" ,
"dateTime" : "2025-09-18T21:46:01.978Z" ,
"value" : "Some notes"
},
"feeling" : {
"created" : "2025-09-18T21:46:01.978Z" ,
"modified" : "2025-09-18T21:46:01.978Z" ,
"dateTime" : "2025-09-18T21:46:01.978Z" ,
"value" : 1 ,
"comment" : "Some comment"
},
"feedback" : {
"created" : "2025-09-18T21:46:01.978Z" ,
"modified" : "2025-09-18T21:46:01.978Z" ,
"dateTime" : "2025-09-18T21:46:01.978Z" ,
"value" : "string"
},
"perceivedRecovery" : {
"created" : "2025-09-18T21:46:01.978Z" ,
"modified" : "2025-09-18T21:46:01.978Z" ,
"dateTime" : "2025-09-18T21:46:01.978Z" ,
"muscleSoreness" : "MUSCLE_SORENESS_UNSPECIFIED" ,
"overallFatigue" : "OVERALL_FATIGUE_UNSPECIFIED" ,
"sleepUserRating" : "SLEEP_USER_RATING_UNSPECIFIED"
},
"weight" : {
"created" : "2025-09-18T21:46:01.978Z" ,
"modified" : "2025-09-18T21:46:01.978Z" ,
"dateTime" : "2025-09-18T21:46:01.978Z" ,
"value" : 15
},
"physicalInformation" : {
"created" : "2025-09-18T21:46:01.978Z" ,
"modified" : "2025-09-18T21:46:01.978Z" ,
"dateTime" : "2025-09-18T21:46:01.978Z" ,
"height" : 90 ,
"weight" : 15 ,
"maximumHeartRate" : 100 ,
"restingHeartRate" : 240 ,
"aerobicThreshold" : 240 ,
"anaerobicThreshold" : 240 ,
"vo2Max" : 10 ,
"trainingBackground" : "TRAINING_BACKGROUND_UNSPECIFIED" ,
"weightSource" : "WEIGHT_SOURCE_UNSPECIFIED" ,
"sleepGoal" : "string" ,
"typicalDay" : "TYPICAL_DAY_UNSPECIFIED" ,
"weeklyRtSum" : 0.1 ,
"functionalThresholdPower" : 60
}
}
]
}
CalendarEntries
Properties
calendarCalendarEntry
{
"note" : {
"created" : "2025-09-18T21:46:01.978Z" ,
"modified" : "2025-09-18T21:46:01.978Z" ,
"dateTime" : "2025-09-18T21:46:01.978Z" ,
"value" : "Some notes"
},
"feeling" : {
"created" : "2025-09-18T21:46:01.978Z" ,
"modified" : "2025-09-18T21:46:01.978Z" ,
"dateTime" : "2025-09-18T21:46:01.978Z" ,
"value" : 1 ,
"comment" : "Some comment"
},
"feedback" : {
"created" : "2025-09-18T21:46:01.978Z" ,
"modified" : "2025-09-18T21:46:01.978Z" ,
"dateTime" : "2025-09-18T21:46:01.979Z" ,
"value" : "string"
},
"perceivedRecovery" : {
"created" : "2025-09-18T21:46:01.979Z" ,
"modified" : "2025-09-18T21:46:01.979Z" ,
"dateTime" : "2025-09-18T21:46:01.979Z" ,
"muscleSoreness" : "MUSCLE_SORENESS_UNSPECIFIED" ,
"overallFatigue" : "OVERALL_FATIGUE_UNSPECIFIED" ,
"sleepUserRating" : "SLEEP_USER_RATING_UNSPECIFIED"
},
"weight" : {
"created" : "2025-09-18T21:46:01.979Z" ,
"modified" : "2025-09-18T21:46:01.979Z" ,
"dateTime" : "2025-09-18T21:46:01.979Z" ,
"value" : 15
},
"physicalInformation" : {
"created" : "2025-09-18T21:46:01.979Z" ,
"modified" : "2025-09-18T21:46:01.979Z" ,
"dateTime" : "2025-09-18T21:46:01.979Z" ,
"height" : 90 ,
"weight" : 15 ,
"maximumHeartRate" : 100 ,
"restingHeartRate" : 240 ,
"aerobicThreshold" : 240 ,
"anaerobicThreshold" : 240 ,
"vo2Max" : 10 ,
"trainingBackground" : "TRAINING_BACKGROUND_UNSPECIFIED" ,
"weightSource" : "WEIGHT_SOURCE_UNSPECIFIED" ,
"sleepGoal" : "string" ,
"typicalDay" : "TYPICAL_DAY_UNSPECIFIED" ,
"weeklyRtSum" : 0.1 ,
"functionalThresholdPower" : 60
}
}
CalendarEntry (contains one of the following: note, feeling, feedback, perceived-recovery, weight, physical-information)
Properties
calendarFeedback
{
"created" : "2025-09-18T21:46:01.979Z" ,
"modified" : "2025-09-18T21:46:01.979Z" ,
"dateTime" : "2025-09-18T21:46:01.979Z" ,
"value" : "string"
}
Feedback
Properties
Name
Type
Required
Description
created
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
modified
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
dateTime
string
true
Datetime in ISO 8601 format. In user local time.
value
string
false
calendarFeeling
{
"created" : "2025-09-18T21:46:01.979Z" ,
"modified" : "2025-09-18T21:46:01.979Z" ,
"dateTime" : "2025-09-18T21:46:01.979Z" ,
"value" : 1 ,
"comment" : "Some comment"
}
Feeling
Properties
Name
Type
Required
Description
created
string(date-time)
true
modified
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
dateTime
string
true
Datetime in ISO 8601 format. In user local time.
value
number(float)
false
comment
string
false
calendarNote
{
"created" : "2025-09-18T21:46:01.980Z" ,
"modified" : "2025-09-18T21:46:01.980Z" ,
"dateTime" : "2025-09-18T21:46:01.980Z" ,
"value" : "Some notes"
}
Note
Properties
Name
Type
Required
Description
created
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
modified
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
dateTime
string
true
Datetime in ISO 8601 format. In user local time.
value
string
false
calendarPerceivedRecovery
{
"created" : "2025-09-18T21:46:01.980Z" ,
"modified" : "2025-09-18T21:46:01.980Z" ,
"dateTime" : "2025-09-18T21:46:01.980Z" ,
"muscleSoreness" : "MUSCLE_SORENESS_UNSPECIFIED" ,
"overallFatigue" : "OVERALL_FATIGUE_UNSPECIFIED" ,
"sleepUserRating" : "SLEEP_USER_RATING_UNSPECIFIED"
}
PerceivedRecovery
Properties
Name
Type
Required
Description
created
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
modified
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
dateTime
string
true
Datetime in ISO 8601 format. In user local time.
muscleSoreness
PerceivedRecoveryMuscleSoreness
false
User's perceived muscle soreness.
overallFatigue
PerceivedRecoveryOverallFatigue
false
User's perceived overall fatigue.
sleepUserRating
PerceivedRecoverySleepUserRating
false
User's perceived sleep quality.
calendarWeight
{
"created" : "2025-09-18T21:46:01.980Z" ,
"modified" : "2025-09-18T21:46:01.980Z" ,
"dateTime" : "2025-09-18T21:46:01.980Z" ,
"value" : 15
}
Weight
Properties
Name
Type
Required
Description
created
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
modified
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
dateTime
string
true
Datetime in ISO 8601 format. In user local time.
value
number(float)
true
domainscalendarErrorResponse
{
"errorMessage" : "string"
}
ErrorResponse
Properties
Name
Type
Required
Description
errorMessage
string
false
domainscalendarLoadResponse
{
"data" : {
"entries" : [
{
"note" : {
"created" : "2025-09-18T21:46:01.980Z" ,
"modified" : "2025-09-18T21:46:01.980Z" ,
"dateTime" : "2025-09-18T21:46:01.980Z" ,
"value" : "Some notes"
},
"feeling" : {
"created" : "2025-09-18T21:46:01.980Z" ,
"modified" : "2025-09-18T21:46:01.980Z" ,
"dateTime" : "2025-09-18T21:46:01.980Z" ,
"value" : 1 ,
"comment" : "Some comment"
},
"feedback" : {
"created" : "2025-09-18T21:46:01.980Z" ,
"modified" : "2025-09-18T21:46:01.980Z" ,
"dateTime" : "2025-09-18T21:46:01.980Z" ,
"value" : "string"
},
"perceivedRecovery" : {
"created" : "2025-09-18T21:46:01.981Z" ,
"modified" : "2025-09-18T21:46:01.981Z" ,
"dateTime" : "2025-09-18T21:46:01.981Z" ,
"muscleSoreness" : "MUSCLE_SORENESS_UNSPECIFIED" ,
"overallFatigue" : "OVERALL_FATIGUE_UNSPECIFIED" ,
"sleepUserRating" : "SLEEP_USER_RATING_UNSPECIFIED"
},
"weight" : {
"created" : "2025-09-18T21:46:01.981Z" ,
"modified" : "2025-09-18T21:46:01.981Z" ,
"dateTime" : "2025-09-18T21:46:01.981Z" ,
"value" : 15
},
"physicalInformation" : {
"created" : "2025-09-18T21:46:01.981Z" ,
"modified" : "2025-09-18T21:46:01.981Z" ,
"dateTime" : "2025-09-18T21:46:01.981Z" ,
"height" : 90 ,
"weight" : 15 ,
"maximumHeartRate" : 100 ,
"restingHeartRate" : 240 ,
"aerobicThreshold" : 240 ,
"anaerobicThreshold" : 240 ,
"vo2Max" : 10 ,
"trainingBackground" : "TRAINING_BACKGROUND_UNSPECIFIED" ,
"weightSource" : "WEIGHT_SOURCE_UNSPECIFIED" ,
"sleepGoal" : "string" ,
"typicalDay" : "TYPICAL_DAY_UNSPECIFIED" ,
"weeklyRtSum" : 0.1 ,
"functionalThresholdPower" : 60
}
}
]
}
}
LoadResponse
Properties
domainscalendarPhysicalInformation
{
"created" : "2025-09-18T21:46:01.981Z" ,
"modified" : "2025-09-18T21:46:01.981Z" ,
"dateTime" : "2025-09-18T21:46:01.981Z" ,
"height" : 90 ,
"weight" : 15 ,
"maximumHeartRate" : 100 ,
"restingHeartRate" : 240 ,
"aerobicThreshold" : 240 ,
"anaerobicThreshold" : 240 ,
"vo2Max" : 10 ,
"trainingBackground" : "TRAINING_BACKGROUND_UNSPECIFIED" ,
"weightSource" : "WEIGHT_SOURCE_UNSPECIFIED" ,
"sleepGoal" : "string" ,
"typicalDay" : "TYPICAL_DAY_UNSPECIFIED" ,
"weeklyRtSum" : 0.1 ,
"functionalThresholdPower" : 60
}
PhysicalInformation
Properties
Name
Type
Required
Description
created
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
modified
string(date-time)
true
Datetime in ISO 8601 format. UTC time.
dateTime
string
true
Datetime in ISO 8601 format. In user local time.
height
number(float)
false
weight
number(float)
false
maximumHeartRate
integer(int64)
false
User maximum heart rate in beats per minute (bpm).
restingHeartRate
integer(int64)
false
User resting heart rate in beats per minute (bpm).
aerobicThreshold
integer(int64)
false
User aerobic threshold in beats per minute (bpm).
anaerobicThreshold
integer(int64)
false
User anaerobic threshold in beats per minute (bpm).
vo2Max
integer(int64)
false
User VO2 max in ml/kg/min.
trainingBackground
domainscalendarPhysicalInformationTrainingBackground
false
User's training background.
weightSource
domainscalendarPhysicalInformationWeightSource
false
sleepGoal
string(uint64)
false
User's sleep goal in milliseconds. Range (4 - 20 hours).
typicalDay
domainscalendarPhysicalInformationTypicalDay
false
User's typical day setting.
weeklyRtSum
number(float)
false
functionalThresholdPower
integer(int64)
false
User's functional threshold power in watts.
domainscalendarPhysicalInformationTrainingBackground
"TRAINING_BACKGROUND_UNSPECIFIED"
TrainingBackground
Properties
Name
Type
Required
Description
TrainingBackground
string
false
Enumerated Values
Property
Value
TrainingBackground
TRAINING_BACKGROUND_UNSPECIFIED
TrainingBackground
TRAINING_BACKGROUND_OCCASIONAL
TrainingBackground
TRAINING_BACKGROUND_REGULAR
TrainingBackground
TRAINING_BACKGROUND_FREQUENT
TrainingBackground
TRAINING_BACKGROUND_HEAVY
TrainingBackground
TRAINING_BACKGROUND_SEMI_PRO
TrainingBackground
TRAINING_BACKGROUND_PRO
domainscalendarPhysicalInformationTypicalDay
"TYPICAL_DAY_UNSPECIFIED"
TypicalDay
Properties
Name
Type
Required
Description
TypicalDay
string
false
Enumerated Values
Property
Value
TypicalDay
TYPICAL_DAY_UNSPECIFIED
TypicalDay
TYPICAL_DAY_MOSTLY_SITTING
TypicalDay
TYPICAL_DAY_MOSTLY_STANDING
TypicalDay
TYPICAL_DAY_MOSTLY_MOVING
domainscalendarPhysicalInformationWeightSource
"WEIGHT_SOURCE_UNSPECIFIED"
WeightSource
Properties
Name
Type
Required
Description
WeightSource
string
false
Enumerated Values
Property
Value
WeightSource
WEIGHT_SOURCE_UNSPECIFIED
WeightSource
WEIGHT_SOURCE_DEFAULT
WeightSource
WEIGHT_SOURCE_ESTIMATE
WeightSource
WEIGHT_SOURCE_USER
WeightSource
WEIGHT_SOURCE_MEASURED
WeightSource
WEIGHT_SOURCE_KEEP
ECGTestResultECGHeartRateVariabilityLevel
ECGHeartRateVariabilityLevel
Properties
Name
Type
Required
Description
ECGHeartRateVariabilityLevel
string
false
The ECG heart rate variability level.
Enumerated Values
Property
Value
ECGHeartRateVariabilityLevel
ECG_HRV_LEVEL_UNKNOWN
ECGHeartRateVariabilityLevel
ECG_HRV_LEVEL_NO_BASELINE
ECGHeartRateVariabilityLevel
ECG_HRV_LEVEL_BELOW_USUAL
ECGHeartRateVariabilityLevel
ECG_HRV_LEVEL_USUAL
ECGHeartRateVariabilityLevel
ECG_HRV_LEVEL_ABOVE_USUAL
ECGTestResultECGQualityLevel
ECGQualityLevel
Properties
Name
Type
Required
Description
ECGQualityLevel
string
false
Enumerated Values
Property
Value
ECGQualityLevel
ECG_QUALITY_UNKNOWN
ECGQualityLevel
ECG_QUALITY_NO_CONTACT
ECGQualityLevel
ECG_QUALITY_LOW
ECGQualityLevel
ECG_QUALITY_HIGH
ECGTestResultECGQualityMeasurement
{
"recordingTimeDeltaMs" : 1000 ,
"qualityLevel" : "ECG_QUALITY_HIGH"
}
ECGQualityMeasurement
Properties
Name
Type
Required
Description
recordingTimeDeltaMs
integer(int64)
true
Recording time. Delta in milliseconds from test_time.
qualityLevel
ECGTestResultECGQualityLevel
true
ECGTestResultECGSample
{
"recordingTimeDeltaMs" : 1000 ,
"amplitudeMv" : 0.5
}
ECGSample
Properties
Name
Type
Required
Description
recordingTimeDeltaMs
integer(int64)
true
Recording time. Delta in milliseconds from start_time.
amplitudeMv
number(float)
true
JumpTestResultJumpTestType
JumpTestType
Properties
Name
Type
Required
Description
JumpTestType
string
false
Enumerated Values
Property
Value
JumpTestType
JUMP_TEST_TYPE_UNSPECIFIED
JumpTestType
JUMP_TEST_TYPE_SQUAT
JumpTestType
JUMP_TEST_TYPE_COUNTER
JumpTestType
JUMP_TEST_TYPE_CONTINUOUS
LegMuscleRecoveryRecoveryStatus
RecoveryStatus
Properties
Name
Type
Required
Description
RecoveryStatus
string
false
Enumerated Values
Property
Value
RecoveryStatus
NOT_AVAILABLE
RecoveryStatus
UNRECOVERED
RecoveryStatus
RECOVERED
SpO2TestResultDeviationFromBaseline
DeviationFromBaseline
Properties
Name
Type
Required
Description
DeviationFromBaseline
string
false
The deviation from baseline.
Enumerated Values
Property
Value
DeviationFromBaseline
DEVIATION_FROM_BASELINE_UNKNOWN
DeviationFromBaseline
DEVIATION_NO_BASELINE
DeviationFromBaseline
DEVIATION_BELOW_USUAL
DeviationFromBaseline
DEVIATION_USUAL
DeviationFromBaseline
DEVIATION_ABOVE_USUAL
SpO2TestResultSpO2Class
SpO2Class
Properties
Name
Type
Required
Description
SpO2Class
string
false
Enumerated Values
Property
Value
SpO2Class
SPO2_CLASS_UNKNOWN
SpO2Class
SPO2_CLASS_VERY_LOW
SpO2Class
SPO2_CLASS_LOW
SpO2Class
SPO2_CLASS_NORMAL
SpO2TestResultSpO2TestStatus
SpO2TestStatus
Properties
Name
Type
Required
Description
SpO2TestStatus
string
false
Enumerated Values
Property
Value
SpO2TestStatus
SPO2_TEST_STATUS_UNKNOWN
SpO2TestStatus
SPO2_TEST_PASSED
SpO2TestStatus
SPO2_TEST_INCONCLUSIVE_TOO_LOW_QUALITY_IN_SAMPLES
SpO2TestStatus
SPO2_TEST_INCONCLUSIVE_TOO_LOW_OVERALL_QUALITY
SpO2TestStatus
SPO2_TEST_INCONCLUSIVE_TOO_MANY_MISSING_SAMPLES
domainstestsErrorResponse
{
"errorMessage" : "string"
}
ErrorResponse
Properties
Name
Type
Required
Description
errorMessage
string
false
domainstestsLoadResponse
{
"data" : {
"tests" : [
{
"created" : "2025-09-18T21:46:01.982Z" ,
"modified" : "2025-09-18T21:46:01.982Z" ,
"startTime" : "2025-09-18T21:46:01.982Z" ,
"jumpTestResult" : {
"jumpTestType" : "JUMP_TEST_TYPE_SQUAT" ,
"durationMillis" : 60000 ,
"legMuscleRecovery" : {
"recoveryStatus" : "RECOVERED" ,
"lowLimit" : 0.1 ,
"baseline" : 0.1
},
"jumps" : [
{
"flightTime" : 350 ,
"contactTime" : 250
}
]
},
"orthostaticTestResult" : {
"rrAvgSupine" : 829 ,
"rrMinStandup" : 567 ,
"rrAvgStand" : 675 ,
"rrLtAvgSupine" : 942 ,
"rrLtAvgMinStandup" : 615 ,
"rrLtAvgStand" : 648 ,
"rmssdSupine" : 47 ,
"rmssdLtAvgSupine" : 40 ,
"rmssdStand" : 16 ,
"rmssdLtAvgStand" : 19 ,
"rrSamples" : [
0
],
"lastResetDate" : "2021-01-01"
},
"fitnessTestResult" : {
"ownIndex" : 45 ,
"maximumHeartRate" : 180 ,
"averageHeartRate" : 60 ,
"fitnessClass" : "GOOD" ,
"timezoneOffsetMinutes" : 60 ,
"physicalInformation" : {
"birthday" : "2010-02-21" ,
"sex" : "MALE" ,
"height" : 172 ,
"weight" : 79.4 ,
"maximumHeartRate" : 100 ,
"restingHeartRate" : 55 ,
"aerobicThreshold" : 240 ,
"anaerobicThreshold" : 175 ,
"vo2Max" : 45 ,
"trainingBackground" : "TRAINING_BACKGROUND_REGULAR" ,
"weightSource" : "WEIGHT_SOURCE_DEFAULT" ,
"sleepGoal" : 28800000
}
},
"rrRecording" : {
"maximumHeartRate" : 180 ,
"minimumHeartRate" : 100 ,
"averageHeartRate" : 130 ,
"endTime" : "2025-09-18T21:46:01.982Z" ,
"rrSamples" : [
0
]
},
"ecgTestResult" : {
"testTime" : "2025-09-18T21:46:01.982Z" ,
"stopTime" : "2025-09-18T21:46:01.982Z" ,
"timeZoneOffsetMinutes" : 60 ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"averageHeartRateBpm" : 70 ,
"heartRateVariabilityMs" : 970 ,
"heartRateVariabilityLevel" : "ECG_HRV_LEVEL_USUAL" ,
"rriMs" : 857 ,
"pulseArrivalTimeAtContractionMs" : 100 ,
"pulseArrivalTimeAtRelaxationMs" : 200 ,
"pulseTransitTimeQualityIndex" : 98 ,
"samples" : [
{
"recordingTimeDeltaMs" : 1000 ,
"amplitudeMv" : 0.5
}
],
"qualityMeasurements" : [
{
"recordingTimeDeltaMs" : 1000 ,
"qualityLevel" : "ECG_QUALITY_HIGH"
}
]
},
"spo2TestResult" : {
"testTime" : "2025-04-03T12:29:25.266Z" ,
"stopTime" : "2025-09-18T21:46:01.982Z" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"timeZoneOffsetMinutes" : 60 ,
"testStatus" : "SPO2_TEST_PASSED" ,
"bloodOxygenPercent" : 97 ,
"spo2Class" : "SPO2_CLASS_NORMAL" ,
"spo2ValueDeviationFromBaseline" : "DEVIATION_USUAL" ,
"spo2QualityAveragePercent" : 98 ,
"averageHeartRateBpm" : 70 ,
"heartRateVariabilityMs" : 970 ,
"spo2HrvDeviationFromBaseline" : "DEVIATION_USUAL" ,
"altitudeMeters" : 150
}
}
]
}
}
LoadResponse
Properties
Name
Type
Required
Description
data
testsTests
false
domainstestsPhysicalInformation
{
"birthday" : "2010-02-21" ,
"sex" : "MALE" ,
"height" : 172 ,
"weight" : 79.4 ,
"maximumHeartRate" : 100 ,
"restingHeartRate" : 55 ,
"aerobicThreshold" : 240 ,
"anaerobicThreshold" : 175 ,
"vo2Max" : 45 ,
"trainingBackground" : "TRAINING_BACKGROUND_REGULAR" ,
"weightSource" : "WEIGHT_SOURCE_DEFAULT" ,
"sleepGoal" : 28800000
}
PhysicalInformation
Properties
Name
Type
Required
Description
birthday
string
true
Birthday as date in ISO 8601 format (YYYY-MM-DD).
sex
domainstestsPhysicalInformationSex
false
height
number(float)
false
weight
number(float)
false
maximumHeartRate
integer(int64)
false
User maximum heart rate in beats per minute (bpm).
restingHeartRate
integer(int64)
false
User resting heart rate in beats per minute (bpm).
aerobicThreshold
integer(int64)
false
User aerobic threshold in beats per minute (bpm).
anaerobicThreshold
integer(int64)
false
User anaerobic threshold in beats per minute (bpm).
vo2Max
integer(int64)
false
User VO2 max in ml/kg/min.
trainingBackground
domainstestsPhysicalInformationTrainingBackground
false
User training background.
weightSource
domainstestsPhysicalInformationWeightSource
false
sleepGoal
string(uint64)
false
User sleep goal in milliseconds. Range (4 - 20 hours).
domainstestsPhysicalInformationSex
Sex
Properties
Name
Type
Required
Description
Sex
string
false
Enumerated Values
Property
Value
Sex
UNSPECIFIED
Sex
MALE
Sex
FEMALE
domainstestsPhysicalInformationTrainingBackground
"TRAINING_BACKGROUND_REGULAR"
TrainingBackground
Properties
Name
Type
Required
Description
TrainingBackground
string
false
The training background of the user.
Enumerated Values
Property
Value
TrainingBackground
TRAINING_BACKGROUND_UNSPECIFIED
TrainingBackground
TRAINING_BACKGROUND_OCCASIONAL
TrainingBackground
TRAINING_BACKGROUND_REGULAR
TrainingBackground
TRAINING_BACKGROUND_FREQUENT
TrainingBackground
TRAINING_BACKGROUND_HEAVY
TrainingBackground
TRAINING_BACKGROUND_SEMI_PRO
TrainingBackground
TRAINING_BACKGROUND_PRO
domainstestsPhysicalInformationWeightSource
WeightSource
Properties
Name
Type
Required
Description
WeightSource
string
false
Enumerated Values
Property
Value
WeightSource
WEIGHT_SOURCE_UNSPECIFIED
WeightSource
WEIGHT_SOURCE_DEFAULT
WeightSource
WEIGHT_SOURCE_ESTIMATE
WeightSource
WEIGHT_SOURCE_USER
WeightSource
WEIGHT_SOURCE_MEASURED
WeightSource
WEIGHT_SOURCE_KEEP
testsECGTestResult
{
"testTime" : "2025-09-18T21:46:01.983Z" ,
"stopTime" : "2025-09-18T21:46:01.983Z" ,
"timeZoneOffsetMinutes" : 60 ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"averageHeartRateBpm" : 70 ,
"heartRateVariabilityMs" : 970 ,
"heartRateVariabilityLevel" : "ECG_HRV_LEVEL_USUAL" ,
"rriMs" : 857 ,
"pulseArrivalTimeAtContractionMs" : 100 ,
"pulseArrivalTimeAtRelaxationMs" : 200 ,
"pulseTransitTimeQualityIndex" : 98 ,
"samples" : [
{
"recordingTimeDeltaMs" : 1000 ,
"amplitudeMv" : 0.5
}
],
"qualityMeasurements" : [
{
"recordingTimeDeltaMs" : 1000 ,
"qualityLevel" : "ECG_QUALITY_HIGH"
}
]
}
ECGTestResult
Properties
Name
Type
Required
Description
testTime
string
true
Datetime in ISO 8601 format. In user local time.
stopTime
string
true
Datetime in ISO 8601 format. In user local time.
timeZoneOffsetMinutes
integer(int32)
false
Time zone offset in minutes.
deviceReference
testsTestDeviceReference
true
averageHeartRateBpm
integer(int64)
false
heartRateVariabilityMs
number(float)
false
Heart rate variability in ms.
heartRateVariabilityLevel
ECGTestResultECGHeartRateVariabilityLevel
false
Heart rate variability level.
rriMs
number(float)
false
Average RR interval in ms.
pulseArrivalTimeAtContractionMs
number(float)
false
Pulse arrival time at contraction in ms (i.e. pulse transit time in systolic phase).
pulseArrivalTimeAtRelaxationMs
number(float)
false
Pulse arrival time at relaxation in ms (i.e. pulse transit time in diastolic phase).
pulseTransitTimeQualityIndex
number(float)
false
Quality index of pulse transit time.
samples
[ECGTestResultECGSample ]
false
qualityMeasurements
[ECGTestResultECGQualityMeasurement ]
false
ECG Quality measurements.
testsFitnessTestResult
{
"ownIndex" : 45 ,
"maximumHeartRate" : 180 ,
"averageHeartRate" : 60 ,
"fitnessClass" : "GOOD" ,
"timezoneOffsetMinutes" : 60 ,
"physicalInformation" : {
"birthday" : "2010-02-21" ,
"sex" : "MALE" ,
"height" : 172 ,
"weight" : 79.4 ,
"maximumHeartRate" : 100 ,
"restingHeartRate" : 55 ,
"aerobicThreshold" : 240 ,
"anaerobicThreshold" : 175 ,
"vo2Max" : 45 ,
"trainingBackground" : "TRAINING_BACKGROUND_REGULAR" ,
"weightSource" : "WEIGHT_SOURCE_DEFAULT" ,
"sleepGoal" : 28800000
}
}
FitnessTestResult
Properties
Name
Type
Required
Description
ownIndex
integer(int64)
false
Polar OwnIndexâ„¢ value. Comparable to VO2 max in ml/kg/min.
maximumHeartRate
integer(int64)
false
User maximum heart rate in beats per minute (bpm).
averageHeartRate
integer(int64)
false
User resting heart rate in beats per minute (bpm).
fitnessClass
testsFitnessTestResultFitnessClass
false
The classification of the fitness level.
timezoneOffsetMinutes
integer(int32)
false
Timezone offset in minutes.
physicalInformation
domainstestsPhysicalInformation
false
testsFitnessTestResultFitnessClass
FitnessClass
Properties
Name
Type
Required
Description
FitnessClass
string
false
The classification of the fitness level.
Enumerated Values
Property
Value
FitnessClass
UNSPECIFIED
FitnessClass
ELITE
FitnessClass
VERY_GOOD
FitnessClass
GOOD
FitnessClass
MODERATE
FitnessClass
FAIR
FitnessClass
LOW
FitnessClass
VERY_LOW
testsJump
{
"flightTime" : 350 ,
"contactTime" : 250
}
Jump
Properties
Name
Type
Required
Description
flightTime
integer(int64)
true
Jump air time in milliseconds.
contactTime
integer(int64)
true
Jump contact time in milliseconds.
testsJumpTestResult
{
"jumpTestType" : "JUMP_TEST_TYPE_SQUAT" ,
"durationMillis" : 60000 ,
"legMuscleRecovery" : {
"recoveryStatus" : "RECOVERED" ,
"lowLimit" : 0.1 ,
"baseline" : 0.1
},
"jumps" : [
{
"flightTime" : 350 ,
"contactTime" : 250
}
]
}
JumpTestResult
Properties
testsLegMuscleRecovery
{
"recoveryStatus" : "RECOVERED" ,
"lowLimit" : 0.1 ,
"baseline" : 0.1
}
LegMuscleRecovery
Properties
testsOrthostaticTestResult
{
"rrAvgSupine" : 829 ,
"rrMinStandup" : 567 ,
"rrAvgStand" : 675 ,
"rrLtAvgSupine" : 942 ,
"rrLtAvgMinStandup" : 615 ,
"rrLtAvgStand" : 648 ,
"rmssdSupine" : 47 ,
"rmssdLtAvgSupine" : 40 ,
"rmssdStand" : 16 ,
"rmssdLtAvgStand" : 19 ,
"rrSamples" : [
0
],
"lastResetDate" : "2021-01-01"
}
OrthostaticTestResult
Properties
Name
Type
Required
Description
rrAvgSupine
integer(int64)
false
RR average in supine position in milliseconds.
rrMinStandup
integer(int64)
false
RR minimum in standup position in milliseconds.
rrAvgStand
integer(int64)
false
RR average in standup position in milliseconds.
rrLtAvgSupine
integer(int64)
false
RR long term average in supine position in milliseconds.
rrLtAvgMinStandup
integer(int64)
false
RR long term average minimum after standup position in milliseconds.
rrLtAvgStand
integer(int64)
false
RR long term average in standup position in milliseconds.
rmssdSupine
integer(int64)
false
RMSSD (Root mean square of the successive differences) in supine position.
rmssdLtAvgSupine
integer(int64)
false
RMSSD (Root mean square of the successive differences) long term average in supine position.
rmssdStand
integer(int64)
false
RMSSD (Root mean square of the successive differences) average in standup position.
rmssdLtAvgStand
integer(int64)
false
RMSSD (Root mean square of the successive differences) long term average in standup position.
rrSamples
[integer]
false
Intervals between heartbeats in millis. Does not include "offline" entries.
lastResetDate
string
true
Reset date in ISO 8601 format. In user local time.
testsRRRecording
{
"maximumHeartRate" : 180 ,
"minimumHeartRate" : 100 ,
"averageHeartRate" : 130 ,
"endTime" : "2025-09-18T21:46:01.985Z" ,
"rrSamples" : [
0
]
}
RRRecording
Properties
Name
Type
Required
Description
maximumHeartRate
integer(int64)
true
Maximum heart rate in beats per minute (bpm).
minimumHeartRate
integer(int64)
true
Minimum heart rate in beats per minute (bpm).
averageHeartRate
integer(int64)
true
Average heart rate in beats per minute (bpm).
endTime
string
true
Datetime in ISO 8601 format. In user local time.
rrSamples
[integer]
false
Intervals between heartbeats in millis. Does not include "offline" entries.
testsSpO2TestResult
{
"testTime" : "2025-04-03T12:29:25.266Z" ,
"stopTime" : "2025-09-18T21:46:01.985Z" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"timeZoneOffsetMinutes" : 60 ,
"testStatus" : "SPO2_TEST_PASSED" ,
"bloodOxygenPercent" : 97 ,
"spo2Class" : "SPO2_CLASS_NORMAL" ,
"spo2ValueDeviationFromBaseline" : "DEVIATION_USUAL" ,
"spo2QualityAveragePercent" : 98 ,
"averageHeartRateBpm" : 70 ,
"heartRateVariabilityMs" : 970 ,
"spo2HrvDeviationFromBaseline" : "DEVIATION_USUAL" ,
"altitudeMeters" : 150
}
SpO2TestResult
Properties
Name
Type
Required
Description
testTime
string
true
Datetime in ISO 8601 format. User's local time.
stopTime
string
true
Datetime in ISO 8601 format. User's local time.
deviceReference
testsTestDeviceReference
true
timeZoneOffsetMinutes
integer(int32)
false
Time zone offset in minutes.
testStatus
SpO2TestResultSpO2TestStatus
true
bloodOxygenPercent
integer(int32)
false
spo2Class
SpO2TestResultSpO2Class
false
spo2ValueDeviationFromBaseline
SpO2TestResultDeviationFromBaseline
false
SpO2 value deviation from baseline.
spo2QualityAveragePercent
number(float)
false
Average quality of SPO2 signal during test.
averageHeartRateBpm
integer(int64)
false
heartRateVariabilityMs
number(float)
false
Heart rate variability in ms.
spo2HrvDeviationFromBaseline
SpO2TestResultDeviationFromBaseline
false
SpO2 hrv deviation from baseline.
altitudeMeters
number(float)
false
Altitude during test in meters.
testsTest
{
"created" : "2025-09-18T21:46:01.985Z" ,
"modified" : "2025-09-18T21:46:01.985Z" ,
"startTime" : "2025-09-18T21:46:01.985Z" ,
"jumpTestResult" : {
"jumpTestType" : "JUMP_TEST_TYPE_SQUAT" ,
"durationMillis" : 60000 ,
"legMuscleRecovery" : {
"recoveryStatus" : "RECOVERED" ,
"lowLimit" : 0.1 ,
"baseline" : 0.1
},
"jumps" : [
{
"flightTime" : 350 ,
"contactTime" : 250
}
]
},
"orthostaticTestResult" : {
"rrAvgSupine" : 829 ,
"rrMinStandup" : 567 ,
"rrAvgStand" : 675 ,
"rrLtAvgSupine" : 942 ,
"rrLtAvgMinStandup" : 615 ,
"rrLtAvgStand" : 648 ,
"rmssdSupine" : 47 ,
"rmssdLtAvgSupine" : 40 ,
"rmssdStand" : 16 ,
"rmssdLtAvgStand" : 19 ,
"rrSamples" : [
0
],
"lastResetDate" : "2021-01-01"
},
"fitnessTestResult" : {
"ownIndex" : 45 ,
"maximumHeartRate" : 180 ,
"averageHeartRate" : 60 ,
"fitnessClass" : "GOOD" ,
"timezoneOffsetMinutes" : 60 ,
"physicalInformation" : {
"birthday" : "2010-02-21" ,
"sex" : "MALE" ,
"height" : 172 ,
"weight" : 79.4 ,
"maximumHeartRate" : 100 ,
"restingHeartRate" : 55 ,
"aerobicThreshold" : 240 ,
"anaerobicThreshold" : 175 ,
"vo2Max" : 45 ,
"trainingBackground" : "TRAINING_BACKGROUND_REGULAR" ,
"weightSource" : "WEIGHT_SOURCE_DEFAULT" ,
"sleepGoal" : 28800000
}
},
"rrRecording" : {
"maximumHeartRate" : 180 ,
"minimumHeartRate" : 100 ,
"averageHeartRate" : 130 ,
"endTime" : "2025-09-18T21:46:01.985Z" ,
"rrSamples" : [
0
]
},
"ecgTestResult" : {
"testTime" : "2025-09-18T21:46:01.985Z" ,
"stopTime" : "2025-09-18T21:46:01.985Z" ,
"timeZoneOffsetMinutes" : 60 ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"averageHeartRateBpm" : 70 ,
"heartRateVariabilityMs" : 970 ,
"heartRateVariabilityLevel" : "ECG_HRV_LEVEL_USUAL" ,
"rriMs" : 857 ,
"pulseArrivalTimeAtContractionMs" : 100 ,
"pulseArrivalTimeAtRelaxationMs" : 200 ,
"pulseTransitTimeQualityIndex" : 98 ,
"samples" : [
{
"recordingTimeDeltaMs" : 1000 ,
"amplitudeMv" : 0.5
}
],
"qualityMeasurements" : [
{
"recordingTimeDeltaMs" : 1000 ,
"qualityLevel" : "ECG_QUALITY_HIGH"
}
]
},
"spo2TestResult" : {
"testTime" : "2025-04-03T12:29:25.266Z" ,
"stopTime" : "2025-09-18T21:46:01.986Z" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"timeZoneOffsetMinutes" : 60 ,
"testStatus" : "SPO2_TEST_PASSED" ,
"bloodOxygenPercent" : 97 ,
"spo2Class" : "SPO2_CLASS_NORMAL" ,
"spo2ValueDeviationFromBaseline" : "DEVIATION_USUAL" ,
"spo2QualityAveragePercent" : 98 ,
"averageHeartRateBpm" : 70 ,
"heartRateVariabilityMs" : 970 ,
"spo2HrvDeviationFromBaseline" : "DEVIATION_USUAL" ,
"altitudeMeters" : 150
}
}
Test (contains one of the following: jump_test_result, orthostatic_test_result, fitness_test_result, rr_recording)
Properties
testsTestDeviceReference
{
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
}
DeviceReference
Properties
Name
Type
Required
Description
uuid
string
true
Unique identifier of the device.
testsTests
{
"tests" : [
{
"created" : "2025-09-18T21:46:01.986Z" ,
"modified" : "2025-09-18T21:46:01.986Z" ,
"startTime" : "2025-09-18T21:46:01.986Z" ,
"jumpTestResult" : {
"jumpTestType" : "JUMP_TEST_TYPE_SQUAT" ,
"durationMillis" : 60000 ,
"legMuscleRecovery" : {
"recoveryStatus" : "RECOVERED" ,
"lowLimit" : 0.1 ,
"baseline" : 0.1
},
"jumps" : [
{
"flightTime" : 350 ,
"contactTime" : 250
}
]
},
"orthostaticTestResult" : {
"rrAvgSupine" : 829 ,
"rrMinStandup" : 567 ,
"rrAvgStand" : 675 ,
"rrLtAvgSupine" : 942 ,
"rrLtAvgMinStandup" : 615 ,
"rrLtAvgStand" : 648 ,
"rmssdSupine" : 47 ,
"rmssdLtAvgSupine" : 40 ,
"rmssdStand" : 16 ,
"rmssdLtAvgStand" : 19 ,
"rrSamples" : [
0
],
"lastResetDate" : "2021-01-01"
},
"fitnessTestResult" : {
"ownIndex" : 45 ,
"maximumHeartRate" : 180 ,
"averageHeartRate" : 60 ,
"fitnessClass" : "GOOD" ,
"timezoneOffsetMinutes" : 60 ,
"physicalInformation" : {
"birthday" : "2010-02-21" ,
"sex" : "MALE" ,
"height" : 172 ,
"weight" : 79.4 ,
"maximumHeartRate" : 100 ,
"restingHeartRate" : 55 ,
"aerobicThreshold" : 240 ,
"anaerobicThreshold" : 175 ,
"vo2Max" : 45 ,
"trainingBackground" : "TRAINING_BACKGROUND_REGULAR" ,
"weightSource" : "WEIGHT_SOURCE_DEFAULT" ,
"sleepGoal" : 28800000
}
},
"rrRecording" : {
"maximumHeartRate" : 180 ,
"minimumHeartRate" : 100 ,
"averageHeartRate" : 130 ,
"endTime" : "2025-09-18T21:46:01.986Z" ,
"rrSamples" : [
0
]
},
"ecgTestResult" : {
"testTime" : "2025-09-18T21:46:01.986Z" ,
"stopTime" : "2025-09-18T21:46:01.986Z" ,
"timeZoneOffsetMinutes" : 60 ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"averageHeartRateBpm" : 70 ,
"heartRateVariabilityMs" : 970 ,
"heartRateVariabilityLevel" : "ECG_HRV_LEVEL_USUAL" ,
"rriMs" : 857 ,
"pulseArrivalTimeAtContractionMs" : 100 ,
"pulseArrivalTimeAtRelaxationMs" : 200 ,
"pulseTransitTimeQualityIndex" : 98 ,
"samples" : [
{
"recordingTimeDeltaMs" : 1000 ,
"amplitudeMv" : 0.5
}
],
"qualityMeasurements" : [
{
"recordingTimeDeltaMs" : 1000 ,
"qualityLevel" : "ECG_QUALITY_HIGH"
}
]
},
"spo2TestResult" : {
"testTime" : "2025-04-03T12:29:25.266Z" ,
"stopTime" : "2025-09-18T21:46:01.987Z" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"timeZoneOffsetMinutes" : 60 ,
"testStatus" : "SPO2_TEST_PASSED" ,
"bloodOxygenPercent" : 97 ,
"spo2Class" : "SPO2_CLASS_NORMAL" ,
"spo2ValueDeviationFromBaseline" : "DEVIATION_USUAL" ,
"spo2QualityAveragePercent" : 98 ,
"averageHeartRateBpm" : 70 ,
"heartRateVariabilityMs" : 970 ,
"spo2HrvDeviationFromBaseline" : "DEVIATION_USUAL" ,
"altitudeMeters" : 150
}
}
]
}
Tests
Properties
Name
Type
Required
Description
tests
[testsTest ]
false
domainsprofilepictureErrorResponse
{
"errorMessage" : "string"
}
ErrorResponse
Properties
Name
Type
Required
Description
errorMessage
string
false
profilepictureHttpBody
HttpBody
Properties
None
AutoPauseAutoPauseTrigger
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
AUTO_PAUSE_TRIGGER_OFF
anonymous
AUTO_PAUSE_TRIGGER_TRIGGER_SPEED
SportProfileProductInfoAltitudeSetting
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
ALTITUDE_SETTING_OFF
anonymous
ALTITUDE_SETTING_ON
SportProfileProductInfoHeartRateView
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
HEART_RATE_VIEW_BPM
anonymous
HEART_RATE_VIEW_PERCENTS_OF_HR_RESERVE
anonymous
HEART_RATE_VIEW_PERCENTS_OF_MAX_HR
"SPORT_TAP_BUTTON_SENSITIVITY_OFF"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
SPORT_TAP_BUTTON_SENSITIVITY_OFF
anonymous
SPORT_TAP_BUTTON_SENSITIVITY_VERY_LOW
anonymous
SPORT_TAP_BUTTON_SENSITIVITY_LOW
anonymous
SPORT_TAP_BUTTON_SENSITIVITY_MEDIUM
anonymous
SPORT_TAP_BUTTON_SENSITIVITY_HIGH
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
TAP_BUTTON_ACTION_OFF
anonymous
TAP_BUTTON_ACTION_TAKE_LAP
anonymous
TAP_BUTTON_ACTION_CHANGE_TRAINING_VIEW
anonymous
TAP_BUTTON_ACTION_ACTIVATE_BACKLIGHT
SportProfileSettingsMuscleLoadSetting
"MUSCLE_LOAD_SETTING_OFF"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
MUSCLE_LOAD_SETTING_OFF
anonymous
MUSCLE_LOAD_SETTING_ON
SportProfileSettingsPowerView
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
POWER_VIEW_WATT
anonymous
POWER_VIEW_WATT_PER_KG
anonymous
POWER_VIEW_FTP_PERCENT
"REMOTE_BUTTON_ACTION_RING_BELL"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
REMOTE_BUTTON_ACTION_RING_BELL
anonymous
REMOTE_BUTTON_ACTION_ACTIVATE_BACKLIGHT
anonymous
REMOTE_BUTTON_ACTION_CHANGE_TRAINING_VIEW
anonymous
REMOTE_BUTTON_ACTION_TAKE_LAP
anonymous
REMOTE_BUTTON_ACTION_ACTIVATE_SAFETY_LIGHT
anonymous
REMOTE_BUTTON_ACTION_BROWSE_UP
anonymous
REMOTE_BUTTON_ACTION_BROWSE_DOWN
SportProfileSettingsStrideSpeedSource
"STRIDE_SPEED_SOURCE_STRIDE"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
STRIDE_SPEED_SOURCE_STRIDE
anonymous
STRIDE_SPEED_SOURCE_GPS
SportProfileSettingsSwimmingUnits
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
SWIMMING_UNITS_METERS
anonymous
SWIMMING_UNITS_YARDS
SportProfileSettingsZoneOptimizerSetting
"ZONE_OPTIMIZER_SETTING_OFF"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
ZONE_OPTIMIZER_SETTING_OFF
anonymous
ZONE_OPTIMIZER_SETTING_MODIFIED_OFF
anonymous
ZONE_OPTIMIZER_SETTING_DEFAULT
anonymous
ZONE_OPTIMIZER_SETTING_MODIFIED
SportSportType
*Sport types.
SINGLE_SPORT: The sport is a single sport.
MULTI_SPORT: The sport is a multi-sport, which can include multiple sports of type SUB_SPORT.
SUB_SPORT: The sport is a sub-sport, which is part of a multi-sport. For example triathlon.
FREE_MULTI_SPORT: The sport is a free multi-sport, which can include multiple sports of type SINGLE_SPORT.*
Properties
Name
Type
Required
Description
anonymous
string
false
Sport types. SINGLE_SPORT: The sport is a single sport. MULTI_SPORT: The sport is a multi-sport, which can include multiple sports of type SUB_SPORT. SUB_SPORT: The sport is a sub-sport, which is part of a multi-sport. For example triathlon. FREE_MULTI_SPORT: The sport is a free multi-sport, which can include multiple sports of type SINGLE_SPORT.
Enumerated Values
Property
Value
anonymous
SINGLE_SPORT
anonymous
MULTI_SPORT
anonymous
SUB_SPORT
anonymous
FREE_MULTI_SPORT
SprintDetectionSprintDetectionSource
"SPRINT_DETECTION_SOURCE_OFF"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
SPRINT_DETECTION_SOURCE_OFF
anonymous
SPRINT_DETECTION_SOURCE_SOURCE_ACCELERATION
anonymous
SPRINT_DETECTION_SOURCE_SOURCE_SPEED
StrideSensorCalibSettingsRunningFactorSource
"RUNNING_FACTOR_SOURCE_DEFAULT"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
RUNNING_FACTOR_SOURCE_DEFAULT
anonymous
RUNNING_FACTOR_SOURCE_AUTO_CALIBRATION
anonymous
RUNNING_FACTOR_SOURCE_MANUAL_CALIBRATION
StrideSensorCalibSettingsStrideCalibType
"STRIDE_CALIB_TYPE_MANUAL"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
STRIDE_CALIB_TYPE_MANUAL
anonymous
STRIDE_CALIB_TYPE_AUTO
SwimmingPoolInfoSwimmingPoolUnits
"SWIMMING_POOL_UNITS_METERS"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
SWIMMING_POOL_UNITS_METERS
anonymous
SWIMMING_POOL_UNITS_YARDS
TrainingReminderTrainingReminderType
"TRAINING_REMINDER_TYPE_OFF"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
TRAINING_REMINDER_TYPE_OFF
anonymous
TRAINING_REMINDER_TYPE_CALORIES_BASED
anonymous
TRAINING_REMINDER_TYPE_DISTANCE_BASED
anonymous
TRAINING_REMINDER_TYPE_TIME_BASED
ZonesHeartRateZoneSettingSource
"HEART_RATE_ZONE_SETTING_SOURCE_DEFAULT"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
HEART_RATE_ZONE_SETTING_SOURCE_DEFAULT
anonymous
HEART_RATE_ZONE_SETTING_SOURCE_THRESHOLD
anonymous
HEART_RATE_ZONE_SETTING_SOURCE_FREE
ZonesPowerZoneCalculationMethod
"POWER_ZONE_CALCULATION_METHOD_UNKNOWN"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
POWER_ZONE_CALCULATION_METHOD_UNKNOWN
anonymous
POWER_ZONE_CALCULATION_METHOD_FTP_BASED
anonymous
POWER_ZONE_CALCULATION_METHOD_MAP_BASED
ZonesPowerZoneSettingSource
"POWER_ZONE_SETTING_SOURCE_DEFAULT"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
POWER_ZONE_SETTING_SOURCE_DEFAULT
anonymous
POWER_ZONE_SETTING_SOURCE_FREE
ZonesSpeedZoneCalculationMethod
"SPEED_ZONE_CALCULATION_METHOD_UNKNOWN"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
SPEED_ZONE_CALCULATION_METHOD_UNKNOWN
anonymous
SPEED_ZONE_CALCULATION_METHOD_SPORT_SPECIFIC_PREDEFINED
anonymous
SPEED_ZONE_CALCULATION_METHOD_MAS_BASED
ZonesSpeedZoneSettingSource
"SPEED_ZONE_SETTING_SOURCE_DEFAULT"
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
SPEED_ZONE_SETTING_SOURCE_DEFAULT
anonymous
SPEED_ZONE_SETTING_SOURCE_FREE
domainssportErrorResponse
{
"errorMessage" : "string"
}
Properties
Name
Type
Required
Description
errorMessage
string
false
domainssportSportReference
SportReference
Properties
Name
Type
Required
Description
id
integer(int64)
true
domainssportZones
{
"heartRateZones" : [
{
"lowerLimit" : 0 ,
"higherLimit" : 0
}
],
"speedZones" : [
{
"lowerLimit" : 0.1 ,
"higherLimit" : 0.1
}
],
"powerZones" : [
{
"lowerLimit" : 0 ,
"higherLimit" : 0
}
],
"heartRateSettingSource" : "HEART_RATE_ZONE_SETTING_SOURCE_DEFAULT" ,
"powerSettingSource" : "POWER_ZONE_SETTING_SOURCE_DEFAULT" ,
"speedSettingSource" : "SPEED_ZONE_SETTING_SOURCE_DEFAULT" ,
"powerZoneCalculationMethod" : "POWER_ZONE_CALCULATION_METHOD_UNKNOWN" ,
"speedZoneCalculationMethod" : "SPEED_ZONE_CALCULATION_METHOD_UNKNOWN"
}
Training zones.
Properties
sportAlcorSiriusDisplaySettings
{
"display" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
],
"lastShownDisplay" : 0 ,
"addedDefaultDisplays" : 0
}
Represents a list of training displays and their settings for Alcor and Sirius platforms.
Alcor products are: M100 and M200. Sirius products are: A300, M400, M430, M450, M460 and V800.
Properties
Name
Type
Required
Description
display
[sportTrainingDisplay ]
false
List of training displays.
lastShownDisplay
integer(int64)
false
This field is encoded and decoded view identifier in training computer. Bits 28-31 tells the number of displays in the view. Bits 20-27 tell the first display value of enum value. Bits 13-19 tell second. Bits 7-12 tell the third. Bits 0-6 tell the fourth.
addedDefaultDisplays
integer(int64)
false
Status bitfield of adding default displays in training computer. Bit 0: True if Power data related default display is added to displays. Bit 1: True if HR data related default display is added to displays. Bit 2: True if Speed data related default display is added to displays. Bit 3: True if Cadence data related default display is added to displays. Bit 4: True if Speed And Hr data related default display is added to displays. Bit 5: True if Altitude related default display is added to displays.
sportAutoLapSettings
{
"automaticLap" : "AUTOMATIC_LAP_OFF" ,
"automaticLapDistance" : 0.1 ,
"automaticLapDuration" : 0
}
Properties
Name
Type
Required
Description
automaticLap
sportAutoLapSettingsAutomaticLap
false
automaticLapDistance
number(float)
false
automaticLapDuration
integer(int32)
false
sportAutoLapSettingsAutomaticLap
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
AUTOMATIC_LAP_OFF
anonymous
AUTOMATIC_LAP_DISTANCE
anonymous
AUTOMATIC_LAP_DURATION
anonymous
AUTOMATIC_LAP_LOCATION
sportAutoPause
{
"trigger" : "AUTO_PAUSE_TRIGGER_OFF" ,
"speedThreshold" : 0.1
}
Properties
sportCapellaDisplaySettings
{
"trainingDisplay" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
],
"lapDisplay" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
]
}
Represents a list of training displays and their settings for Capella platform.
Properties
sportHeartRateZone
{
"lowerLimit" : 0 ,
"higherLimit" : 0
}
Properties
Name
Type
Required
Description
lowerLimit
integer(int32)
false
higherLimit
integer(int32)
false
sportListProfilesResponse
{
"profiles" : [
{
"uuid" : "string" ,
"created" : "2019-08-24T14:15:22Z" ,
"modified" : "2019-08-24T14:15:22Z" ,
"profile" : {
"sportId" : 0 ,
"settings" : {
"sensorBroadcastingHr" : true ,
"hrZoneLockAvailable" : true ,
"speedZoneLockAvailable" : true ,
"powerZoneLockAvailable" : true ,
"volume" : {
"volume" : 0
},
"speedView" : "SPEED_VIEW_PACE" ,
"zoneOptimizerSetting" : "ZONE_OPTIMIZER_SETTING_OFF" ,
"zoneLimits" : {
"heartRateZones" : [
{
"lowerLimit" : 0 ,
"higherLimit" : 0
}
],
"speedZones" : [
{
"lowerLimit" : 0.1 ,
"higherLimit" : 0.1
}
],
"powerZones" : [
{
"lowerLimit" : 0 ,
"higherLimit" : 0
}
],
"heartRateSettingSource" : "HEART_RATE_ZONE_SETTING_SOURCE_DEFAULT" ,
"powerSettingSource" : "POWER_ZONE_SETTING_SOURCE_DEFAULT" ,
"speedSettingSource" : "SPEED_ZONE_SETTING_SOURCE_DEFAULT" ,
"powerZoneCalculationMethod" : "POWER_ZONE_CALCULATION_METHOD_UNKNOWN" ,
"speedZoneCalculationMethod" : "SPEED_ZONE_CALCULATION_METHOD_UNKNOWN"
},
"trainingReminder" : {
"type" : "TRAINING_REMINDER_TYPE_OFF" ,
"text" : "string" ,
"calorie" : 0 ,
"time" : 0 ,
"distance" : 0.1
},
"powerView" : "POWER_VIEW_WATT" ,
"strideSpeedSource" : "STRIDE_SPEED_SOURCE_STRIDE" ,
"swimmingUnits" : "SWIMMING_UNITS_METERS" ,
"muscleLoadSetting" : "MUSCLE_LOAD_SETTING_OFF" ,
"remoteButtonActions" : [
"REMOTE_BUTTON_ACTION_RING_BELL"
]
},
"sportFactor" : 0.1 ,
"aerobicThreshold" : 0 ,
"anaerobicThreshold" : 0 ,
"sprintDetectionSettings" : {
"source" : "SPRINT_DETECTION_SOURCE_OFF" ,
"sprintThresholdAcceleration" : 0.1 ,
"sprintThresholdSpeed" : 0.1
},
"productSettings" : [
{
"product" : {
"modelName" : "string"
},
"vibration" : true ,
"autoScrolling" : true ,
"strideSensorCalibSettings" : {
"runningFactor" : 0.1 ,
"calibType" : "STRIDE_CALIB_TYPE_MANUAL" ,
"runningFactorSource" : "RUNNING_FACTOR_SOURCE_DEFAULT"
},
"swimmingPool" : {
"swimmingPoolType" : "SWIMMING_POOL_UNITS_METERS" ,
"poolLength" : 0.1
},
"altitudeSetting" : "ALTITUDE_SETTING_OFF" ,
"gpsSetting" : "GPS_SETTING_OFF" ,
"autoPause" : {
"trigger" : "AUTO_PAUSE_TRIGGER_OFF" ,
"speedThreshold" : 0.1
},
"autolapSettings" : {
"automaticLap" : "AUTOMATIC_LAP_OFF" ,
"automaticLapDistance" : 0.1 ,
"automaticLapDuration" : 0
},
"heartRateView" : "HEART_RATE_VIEW_BPM" ,
"capellaDisplaySettings" : {
"trainingDisplay" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
],
"lapDisplay" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
]
},
"alcorSiriusDisplaySettings" : {
"display" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
],
"lastShownDisplay" : 0 ,
"addedDefaultDisplays" : 0
},
"tapButtonAction" : "TAP_BUTTON_ACTION_OFF" ,
"sportTapButtonSensitivity" : "SPORT_TAP_BUTTON_SENSITIVITY_OFF" ,
"voiceGuidance" : true
}
],
"subProfileUuids" : [
"string"
]
}
}
]
}
Properties
Name
Type
Required
Description
profiles
[sportUserSportProfile ]
false
[Aggregate root for sport profile data.]
sportListSportsResponse
{
"sports" : [
{
"id" : {
"id" : 0
},
"modified" : "2024-03-26T07:07:33Z" ,
"localizedNames" : {
"property1" : {
"longName" : "string"
},
"property2" : {
"longName" : "string"
}
},
"parentSport" : {
"id" : 0
},
"type" : "SINGLE_SPORT" ,
"defaultSpeedView" : "SPEED_VIEW_PACE" ,
"defaultGpsSetting" : "GPS_SETTING_OFF" ,
"defaultAltitudeActive" : true ,
"defaultAutomaticLap" : "AUTOMATIC_LAP_OFF" ,
"defaultTapActive" : true ,
"supportedFeatures" : {
"speedZones" : true ,
"sensorBroadcastingHr" : true
}
}
]
}
Properties
Name
Type
Required
Description
sports
[sportSport ]
false
List of sports available in the Polar ecosystem.
sportLoadProfileListCatalogResponse
{
"catalog" : {
"uuid" : "string" ,
"created" : "2019-08-24T14:15:22Z" ,
"modified" : "2019-08-24T14:15:22Z" ,
"activeSportProfileListIndex" : 0 ,
"lists" : [
{
"index" : 0 ,
"sportProfileUuids" : [
"string"
]
}
]
}
}
Properties
sportLocalizedName
LocalizedName
Properties
Name
Type
Required
Description
longName
string
true
Full name of the sport. Defaults to the translation key if not translated.
sportPowerZone
{
"lowerLimit" : 0 ,
"higherLimit" : 0
}
Properties
Name
Type
Required
Description
lowerLimit
integer(int32)
false
higherLimit
integer(int32)
false
sportProduct
{
"modelName" : "string"
}
Properties
Name
Type
Required
Description
modelName
string
false
Product model name e.g. 'Polar M460', 'Polar Jeep', 'Polar_INW6G'.
sportSpeedZone
{
"lowerLimit" : 0.1 ,
"higherLimit" : 0.1
}
Properties
Name
Type
Required
Description
lowerLimit
number(float)
false
higherLimit
number(float)
false
sportSport
{
"id" : {
"id" : 0
},
"modified" : "2024-03-26T07:07:33Z" ,
"localizedNames" : {
"property1" : {
"longName" : "string"
},
"property2" : {
"longName" : "string"
}
},
"parentSport" : {
"id" : 0
},
"type" : "SINGLE_SPORT" ,
"defaultSpeedView" : "SPEED_VIEW_PACE" ,
"defaultGpsSetting" : "GPS_SETTING_OFF" ,
"defaultAltitudeActive" : true ,
"defaultAutomaticLap" : "AUTOMATIC_LAP_OFF" ,
"defaultTapActive" : true ,
"supportedFeatures" : {
"speedZones" : true ,
"sensorBroadcastingHr" : true
}
}
Sport
Properties
Name
Type
Required
Description
id
domainssportSportReference
false
modified
string(date-time)
true
Last modification time in UTC time in ISO 8601 format.
localizedNames
object
false
A map of localized sport names, where the key is a 2-5 letter ISO 639-1 language code.
» additionalProperties
sportLocalizedName
false
Localized name of a sport in different languages.
parentSport
domainssportSportReference
false
Parent sport identifier. Indicates what kind of sport this is e.g. hiking's parent sport is walking and road cycling's is cycling. For top-level sports, this references itself (e.g., Running sport's parent_sport is Running). Has nothing to do with multisports.
type
SportSportType
true
defaultSpeedView
sportSportSpeedView
true
Whether displaying speed or pace by default.
defaultGpsSetting
sportSportGPSSetting
true
defaultAltitudeActive
boolean
true
Whether barometer based altitude measurement is active by default.
defaultAutomaticLap
sportSportAutomaticLap
true
Default Automatic lap detection settings.
defaultTapActive
boolean
true
Whether tap gestures (tapping the display to trigger actions like laps, view changes, or backlight) are active by default.
supportedFeatures
sportSupportedFeatures
false
Supported features for this sport.
sportSportAutomaticLap
*Automatic lap detection settings.
AUTOMATIC_LAP_OFF: No automatic lap detection.
AUTOMATIC_LAP_DISTANCE: Automatic lap based on distance.
AUTOMATIC_LAP_DURATION: Automatic lap based on time.
AUTOMATIC_LAP_LOCATION: Automatic lap based on location.*
Properties
Name
Type
Required
Description
anonymous
string
false
Automatic lap detection settings. AUTOMATIC_LAP_OFF: No automatic lap detection. AUTOMATIC_LAP_DISTANCE: Automatic lap based on distance. AUTOMATIC_LAP_DURATION: Automatic lap based on time. AUTOMATIC_LAP_LOCATION: Automatic lap based on location.
Enumerated Values
Property
Value
anonymous
AUTOMATIC_LAP_OFF
anonymous
AUTOMATIC_LAP_DISTANCE
anonymous
AUTOMATIC_LAP_DURATION
anonymous
AUTOMATIC_LAP_LOCATION
sportSportGPSSetting
*GPS settings.
GPS_SETTING_OFF: GPS is off.
GPS_SETTING_ON_NORMAL: Normal GPS recoding rate which typically is 1 Hz. Normal recording reta may differ between devices.
GPS_SETTING_ON_LONG: Long GPS recoding rate which typically is 1/60 Hz (1 minute sample interval) or 1/120 Hz (2 minutes sample interval). Long recording reta may differ between devices.
GPS_SETTING_ON_10_HZ: 10 Hz recording rate.
GPS_SETTING_ON_MEDIUM: Medium GPS recoding rate which typically is 1/60 Hz (1 minute sample interval). Medium recording reta may differ between devices.*
Properties
Name
Type
Required
Description
anonymous
string
false
GPS settings. GPS_SETTING_OFF: GPS is off. GPS_SETTING_ON_NORMAL: Normal GPS recoding rate which typically is 1 Hz. Normal recording reta may differ between devices. GPS_SETTING_ON_LONG: Long GPS recoding rate which typically is 1/60 Hz (1 minute sample interval) or 1/120 Hz (2 minutes sample interval). Long recording reta may differ between devices. GPS_SETTING_ON_10_HZ: 10 Hz recording rate. GPS_SETTING_ON_MEDIUM: Medium GPS recoding rate which typically is 1/60 Hz (1 minute sample interval). Medium recording reta may differ between devices.
Enumerated Values
Property
Value
anonymous
GPS_SETTING_OFF
anonymous
GPS_SETTING_ON_NORMAL
anonymous
GPS_SETTING_ON_LONG
anonymous
GPS_SETTING_ON_10_HZ
anonymous
GPS_SETTING_ON_MEDIUM
sportSportProfile
{
"sportId" : 0 ,
"settings" : {
"sensorBroadcastingHr" : true ,
"hrZoneLockAvailable" : true ,
"speedZoneLockAvailable" : true ,
"powerZoneLockAvailable" : true ,
"volume" : {
"volume" : 0
},
"speedView" : "SPEED_VIEW_PACE" ,
"zoneOptimizerSetting" : "ZONE_OPTIMIZER_SETTING_OFF" ,
"zoneLimits" : {
"heartRateZones" : [
{
"lowerLimit" : 0 ,
"higherLimit" : 0
}
],
"speedZones" : [
{
"lowerLimit" : 0.1 ,
"higherLimit" : 0.1
}
],
"powerZones" : [
{
"lowerLimit" : 0 ,
"higherLimit" : 0
}
],
"heartRateSettingSource" : "HEART_RATE_ZONE_SETTING_SOURCE_DEFAULT" ,
"powerSettingSource" : "POWER_ZONE_SETTING_SOURCE_DEFAULT" ,
"speedSettingSource" : "SPEED_ZONE_SETTING_SOURCE_DEFAULT" ,
"powerZoneCalculationMethod" : "POWER_ZONE_CALCULATION_METHOD_UNKNOWN" ,
"speedZoneCalculationMethod" : "SPEED_ZONE_CALCULATION_METHOD_UNKNOWN"
},
"trainingReminder" : {
"type" : "TRAINING_REMINDER_TYPE_OFF" ,
"text" : "string" ,
"calorie" : 0 ,
"time" : 0 ,
"distance" : 0.1
},
"powerView" : "POWER_VIEW_WATT" ,
"strideSpeedSource" : "STRIDE_SPEED_SOURCE_STRIDE" ,
"swimmingUnits" : "SWIMMING_UNITS_METERS" ,
"muscleLoadSetting" : "MUSCLE_LOAD_SETTING_OFF" ,
"remoteButtonActions" : [
"REMOTE_BUTTON_ACTION_RING_BELL"
]
},
"sportFactor" : 0.1 ,
"aerobicThreshold" : 0 ,
"anaerobicThreshold" : 0 ,
"sprintDetectionSettings" : {
"source" : "SPRINT_DETECTION_SOURCE_OFF" ,
"sprintThresholdAcceleration" : 0.1 ,
"sprintThresholdSpeed" : 0.1
},
"productSettings" : [
{
"product" : {
"modelName" : "string"
},
"vibration" : true ,
"autoScrolling" : true ,
"strideSensorCalibSettings" : {
"runningFactor" : 0.1 ,
"calibType" : "STRIDE_CALIB_TYPE_MANUAL" ,
"runningFactorSource" : "RUNNING_FACTOR_SOURCE_DEFAULT"
},
"swimmingPool" : {
"swimmingPoolType" : "SWIMMING_POOL_UNITS_METERS" ,
"poolLength" : 0.1
},
"altitudeSetting" : "ALTITUDE_SETTING_OFF" ,
"gpsSetting" : "GPS_SETTING_OFF" ,
"autoPause" : {
"trigger" : "AUTO_PAUSE_TRIGGER_OFF" ,
"speedThreshold" : 0.1
},
"autolapSettings" : {
"automaticLap" : "AUTOMATIC_LAP_OFF" ,
"automaticLapDistance" : 0.1 ,
"automaticLapDuration" : 0
},
"heartRateView" : "HEART_RATE_VIEW_BPM" ,
"capellaDisplaySettings" : {
"trainingDisplay" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
],
"lapDisplay" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
]
},
"alcorSiriusDisplaySettings" : {
"display" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
],
"lastShownDisplay" : 0 ,
"addedDefaultDisplays" : 0
},
"tapButtonAction" : "TAP_BUTTON_ACTION_OFF" ,
"sportTapButtonSensitivity" : "SPORT_TAP_BUTTON_SENSITIVITY_OFF" ,
"voiceGuidance" : true
}
],
"subProfileUuids" : [
"string"
]
}
Properties
Name
Type
Required
Description
sportId
integer(int64)
false
Sport identifier. All available sports can be loaded from the /v4/data/sports/list endpoint.
settings
sportSportProfileSettings
false
sportFactor
number(float)
false
Used in training load calculation (e.g. running and cycling have different training impacts). Range: 0.0 - 9.9.
aerobicThreshold
integer(int32)
false
Aerobic heart rate threshold in beats per minute (bpm). Range: 50 - 210.
anaerobicThreshold
integer(int32)
false
Anaerobic heart rate threshold in beats per minute (bpm). Range: 70 - 228.
sprintDetectionSettings
sportSprintDetection
false
Sprint detection settings.
productSettings
[sportSportProfileProductInfo ]
false
Product specific sport profile settings.
subProfileUuids
[string]
false
UUIDs of subprofiles for multisport profiles. Note that the referred-to profiles have to be dedicated multisport subprofiles.
sportSportProfileList
{
"index" : 0 ,
"sportProfileUuids" : [
"string"
]
}
Properties
Name
Type
Required
Description
index
integer(int64)
false
Index of the sport profile list. The index is used to identify the active sport profile list.
sportProfileUuids
[string]
false
Ordered list of sport profile identifiers.
sportSportProfileProductInfo
{
"product" : {
"modelName" : "string"
},
"vibration" : true ,
"autoScrolling" : true ,
"strideSensorCalibSettings" : {
"runningFactor" : 0.1 ,
"calibType" : "STRIDE_CALIB_TYPE_MANUAL" ,
"runningFactorSource" : "RUNNING_FACTOR_SOURCE_DEFAULT"
},
"swimmingPool" : {
"swimmingPoolType" : "SWIMMING_POOL_UNITS_METERS" ,
"poolLength" : 0.1
},
"altitudeSetting" : "ALTITUDE_SETTING_OFF" ,
"gpsSetting" : "GPS_SETTING_OFF" ,
"autoPause" : {
"trigger" : "AUTO_PAUSE_TRIGGER_OFF" ,
"speedThreshold" : 0.1
},
"autolapSettings" : {
"automaticLap" : "AUTOMATIC_LAP_OFF" ,
"automaticLapDistance" : 0.1 ,
"automaticLapDuration" : 0
},
"heartRateView" : "HEART_RATE_VIEW_BPM" ,
"capellaDisplaySettings" : {
"trainingDisplay" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
],
"lapDisplay" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
]
},
"alcorSiriusDisplaySettings" : {
"display" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
],
"lastShownDisplay" : 0 ,
"addedDefaultDisplays" : 0
},
"tapButtonAction" : "TAP_BUTTON_ACTION_OFF" ,
"sportTapButtonSensitivity" : "SPORT_TAP_BUTTON_SENSITIVITY_OFF" ,
"voiceGuidance" : true
}
Represents a product specific sport profile settings.
Properties
sportSportProfileProductInfoGPSSetting
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
GPS_SETTING_OFF
anonymous
GPS_SETTING_ON_NORMAL
anonymous
GPS_SETTING_ON_LONG
anonymous
GPS_SETTING_ON_10_HZ
anonymous
GPS_SETTING_ON_MEDIUM
sportSportProfileSettings
{
"sensorBroadcastingHr" : true ,
"hrZoneLockAvailable" : true ,
"speedZoneLockAvailable" : true ,
"powerZoneLockAvailable" : true ,
"volume" : {
"volume" : 0
},
"speedView" : "SPEED_VIEW_PACE" ,
"zoneOptimizerSetting" : "ZONE_OPTIMIZER_SETTING_OFF" ,
"zoneLimits" : {
"heartRateZones" : [
{
"lowerLimit" : 0 ,
"higherLimit" : 0
}
],
"speedZones" : [
{
"lowerLimit" : 0.1 ,
"higherLimit" : 0.1
}
],
"powerZones" : [
{
"lowerLimit" : 0 ,
"higherLimit" : 0
}
],
"heartRateSettingSource" : "HEART_RATE_ZONE_SETTING_SOURCE_DEFAULT" ,
"powerSettingSource" : "POWER_ZONE_SETTING_SOURCE_DEFAULT" ,
"speedSettingSource" : "SPEED_ZONE_SETTING_SOURCE_DEFAULT" ,
"powerZoneCalculationMethod" : "POWER_ZONE_CALCULATION_METHOD_UNKNOWN" ,
"speedZoneCalculationMethod" : "SPEED_ZONE_CALCULATION_METHOD_UNKNOWN"
},
"trainingReminder" : {
"type" : "TRAINING_REMINDER_TYPE_OFF" ,
"text" : "string" ,
"calorie" : 0 ,
"time" : 0 ,
"distance" : 0.1
},
"powerView" : "POWER_VIEW_WATT" ,
"strideSpeedSource" : "STRIDE_SPEED_SOURCE_STRIDE" ,
"swimmingUnits" : "SWIMMING_UNITS_METERS" ,
"muscleLoadSetting" : "MUSCLE_LOAD_SETTING_OFF" ,
"remoteButtonActions" : [
"REMOTE_BUTTON_ACTION_RING_BELL"
]
}
Properties
sportSportProfileSettingsSpeedView
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
SPEED_VIEW_PACE
anonymous
SPEED_VIEW_SPEED
sportSportSpeedView
*Speed view options.
SPEED_VIEW_PACE: Speed is displayed as pace (e.g., min/km).
SPEED_VIEW_SPEED: Speed is displayed as speed (e.g., km/h).*
Properties
Name
Type
Required
Description
anonymous
string
false
Speed view options. SPEED_VIEW_PACE: Speed is displayed as pace (e.g., min/km). SPEED_VIEW_SPEED: Speed is displayed as speed (e.g., km/h).
Enumerated Values
Property
Value
anonymous
SPEED_VIEW_PACE
anonymous
SPEED_VIEW_SPEED
sportSprintDetection
{
"source" : "SPRINT_DETECTION_SOURCE_OFF" ,
"sprintThresholdAcceleration" : 0.1 ,
"sprintThresholdSpeed" : 0.1
}
Properties
Name
Type
Required
Description
source
SprintDetectionSprintDetectionSource
false
sprintThresholdAcceleration
number(float)
false
Sprint threshold for acceleration m/s^2.
sprintThresholdSpeed
number(float)
false
Sprint threshold for speed km/h.
sportStrideSensorCalibSettings
{
"runningFactor" : 0.1 ,
"calibType" : "STRIDE_CALIB_TYPE_MANUAL" ,
"runningFactorSource" : "RUNNING_FACTOR_SOURCE_DEFAULT"
}
Properties
sportSupportedFeatures
{
"speedZones" : true ,
"sensorBroadcastingHr" : true
}
SupportedFeatures
Properties
Name
Type
Required
Description
speedZones
boolean
true
Whether speed zones are relevant for this sport.
sensorBroadcastingHr
boolean
false
Whether heart rate broadcasting is enabled by default.
sportSwimmingPoolInfo
{
"swimmingPoolType" : "SWIMMING_POOL_UNITS_METERS" ,
"poolLength" : 0.1
}
Properties
sportTrainingDisplay
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
Represents a training display.
Properties
sportTrainingDisplayItem
{
"name" : "string" ,
"id" : 0
}
Represent a single item in a training display.
Properties
Name
Type
Required
Description
name
string
false
id
integer(int64)
false
sportTrainingReminder
{
"type" : "TRAINING_REMINDER_TYPE_OFF" ,
"text" : "string" ,
"calorie" : 0 ,
"time" : 0 ,
"distance" : 0.1
}
Configuration for training reminders in products with the TRAINING_REMINDER capability. Displays a message after a specified duration, distance, or calorie threshold is reached.
Properties
Name
Type
Required
Description
type
TrainingReminderTrainingReminderType
false
text
string
false
Reminder text to be shown in the product during exercise.
calorie
integer(int32)
false
Set when type is CALORIES_BASED.
time
integer(int32)
false
Set when type is TIME_BASED.
distance
number(float)
false
Set when type is DISTANCE_BASED.
sportUserSportProfile
{
"uuid" : "string" ,
"created" : "2019-08-24T14:15:22Z" ,
"modified" : "2019-08-24T14:15:22Z" ,
"profile" : {
"sportId" : 0 ,
"settings" : {
"sensorBroadcastingHr" : true ,
"hrZoneLockAvailable" : true ,
"speedZoneLockAvailable" : true ,
"powerZoneLockAvailable" : true ,
"volume" : {
"volume" : 0
},
"speedView" : "SPEED_VIEW_PACE" ,
"zoneOptimizerSetting" : "ZONE_OPTIMIZER_SETTING_OFF" ,
"zoneLimits" : {
"heartRateZones" : [
{
"lowerLimit" : 0 ,
"higherLimit" : 0
}
],
"speedZones" : [
{
"lowerLimit" : 0.1 ,
"higherLimit" : 0.1
}
],
"powerZones" : [
{
"lowerLimit" : 0 ,
"higherLimit" : 0
}
],
"heartRateSettingSource" : "HEART_RATE_ZONE_SETTING_SOURCE_DEFAULT" ,
"powerSettingSource" : "POWER_ZONE_SETTING_SOURCE_DEFAULT" ,
"speedSettingSource" : "SPEED_ZONE_SETTING_SOURCE_DEFAULT" ,
"powerZoneCalculationMethod" : "POWER_ZONE_CALCULATION_METHOD_UNKNOWN" ,
"speedZoneCalculationMethod" : "SPEED_ZONE_CALCULATION_METHOD_UNKNOWN"
},
"trainingReminder" : {
"type" : "TRAINING_REMINDER_TYPE_OFF" ,
"text" : "string" ,
"calorie" : 0 ,
"time" : 0 ,
"distance" : 0.1
},
"powerView" : "POWER_VIEW_WATT" ,
"strideSpeedSource" : "STRIDE_SPEED_SOURCE_STRIDE" ,
"swimmingUnits" : "SWIMMING_UNITS_METERS" ,
"muscleLoadSetting" : "MUSCLE_LOAD_SETTING_OFF" ,
"remoteButtonActions" : [
"REMOTE_BUTTON_ACTION_RING_BELL"
]
},
"sportFactor" : 0.1 ,
"aerobicThreshold" : 0 ,
"anaerobicThreshold" : 0 ,
"sprintDetectionSettings" : {
"source" : "SPRINT_DETECTION_SOURCE_OFF" ,
"sprintThresholdAcceleration" : 0.1 ,
"sprintThresholdSpeed" : 0.1
},
"productSettings" : [
{
"product" : {
"modelName" : "string"
},
"vibration" : true ,
"autoScrolling" : true ,
"strideSensorCalibSettings" : {
"runningFactor" : 0.1 ,
"calibType" : "STRIDE_CALIB_TYPE_MANUAL" ,
"runningFactorSource" : "RUNNING_FACTOR_SOURCE_DEFAULT"
},
"swimmingPool" : {
"swimmingPoolType" : "SWIMMING_POOL_UNITS_METERS" ,
"poolLength" : 0.1
},
"altitudeSetting" : "ALTITUDE_SETTING_OFF" ,
"gpsSetting" : "GPS_SETTING_OFF" ,
"autoPause" : {
"trigger" : "AUTO_PAUSE_TRIGGER_OFF" ,
"speedThreshold" : 0.1
},
"autolapSettings" : {
"automaticLap" : "AUTOMATIC_LAP_OFF" ,
"automaticLapDistance" : 0.1 ,
"automaticLapDuration" : 0
},
"heartRateView" : "HEART_RATE_VIEW_BPM" ,
"capellaDisplaySettings" : {
"trainingDisplay" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
],
"lapDisplay" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
]
},
"alcorSiriusDisplaySettings" : {
"display" : [
{
"items" : [
{
"name" : "string" ,
"id" : 0
}
]
}
],
"lastShownDisplay" : 0 ,
"addedDefaultDisplays" : 0
},
"tapButtonAction" : "TAP_BUTTON_ACTION_OFF" ,
"sportTapButtonSensitivity" : "SPORT_TAP_BUTTON_SENSITIVITY_OFF" ,
"voiceGuidance" : true
}
],
"subProfileUuids" : [
"string"
]
}
}
Aggregate root for sport profile data.
Properties
Name
Type
Required
Description
uuid
string
false
Sport profile ecosystem identifier.
created
string(date-time)
false
Creation time of the sport profile in UTC time in format (yyyy-mm-ddThh:mm:ssssssZ).
modified
string(date-time)
false
Last modification time of the sport profile in UTC time in format (yyyy-mm-ddThh:mm:ssssssZ).
profile
sportSportProfile
false
sportUserSportProfileCatalog
{
"uuid" : "string" ,
"created" : "2019-08-24T14:15:22Z" ,
"modified" : "2019-08-24T14:15:22Z" ,
"activeSportProfileListIndex" : 0 ,
"lists" : [
{
"index" : 0 ,
"sportProfileUuids" : [
"string"
]
}
]
}
Aggregate root for sport profile list catalog.
Properties
Name
Type
Required
Description
uuid
string
false
Sport profile catalog ecosystem identifier.
created
string(date-time)
false
Creation time of the catalog in UTC time in format (yyyy-mm-ddThh:mm:ssssssZ).
modified
string(date-time)
false
Last modification time of the catalog in UTC time in format (yyyy-mm-ddThh:mm:ssssssZ).
activeSportProfileListIndex
integer(int64)
false
The index of the active sport profile list (see SportProfileList.index). Not set if there are no profile lists.
lists
[sportSportProfileList ]
false
sportVolume
Properties
Name
Type
Required
Description
volume
integer(int32)
false
Volume level range: 0 (minimum) to 100 (maximum).
HypnogramSleepRating
SleepRating
Properties
Name
Type
Required
Description
SleepRating
string
false
Enumerated Values
Property
Value
SleepRating
SLEEP_RATING_UNKNOWN
SleepRating
SLEEP_RATING_SLEPT_BAD
SleepRating
SLEEP_RATING_SLEPT_QUITE_BAD
SleepRating
SLEEP_RATING_SLEPT_NEITHER_BAD_NOR_WELL
SleepRating
SLEEP_RATING_SLEPT_QUITE_WELL
SleepRating
SLEEP_RATING_SLEPT_WELL
SleepStateChangeSleepState
SleepState
Properties
Name
Type
Required
Description
SleepState
string
false
SLEEP_STATE_WAKE: This is regarded as an interruption of sleep during night. SLEEP_STATE_REM: rem sleep. SLEEP_STATE_NON_REM1: non rem sleep. SLEEP_STATE_NON_REM2: non rem sleep. SLEEP_STATE_NON_REM3: Deepest sleep. SLEEP_STATE_UNKNOWN: State is unknown e.g. because of bad skin contact.
Enumerated Values
Property
Value
SleepState
SLEEP_STATE_WAKE
SleepState
SLEEP_STATE_REM
SleepState
SLEEP_STATE_NON_REM1
SleepState
SLEEP_STATE_NON_REM2
SleepState
SLEEP_STATE_NON_REM3
SleepState
SLEEP_STATE_UNKNOWN
SleepWakeStateChangeSleepWakeState
SleepWakeState
Properties
Name
Type
Required
Description
SleepWakeState
string
false
Enumerated Values
Property
Value
SleepWakeState
SLEEP_WAKE_STATE_SLEEP
SleepWakeState
SLEEP_WAKE_STATE_WAKE
SleepWakeState
SLEEP_WAKE_STATE_NO_DATA
domainssleepDeviceReference
{
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
}
DeviceReference
Properties
Name
Type
Required
Description
uuid
string
true
Unique identifier of the device.
domainssleepErrorResponse
{
"errorMessage" : "string"
}
ErrorResponse
Properties
Name
Type
Required
Description
errorMessage
string
false
sleepAnalysis
{
"efficiencyPercent" : 100 ,
"continuityIndex" : 5 ,
"continuityClass" : 5 ,
"feedback" : "01101"
}
Analysis
Properties
Name
Type
Required
Description
efficiencyPercent
number(double)
true
Sleep efficiency in percent. Range: [0.0 - 100.0].
continuityIndex
number(double)
true
Sleep continuity index. Range: [0.0 - 5.0].
continuityClass
integer(int32)
true
Sleep continuity class. Range: [0 - 5].
feedback
string
false
Sleep feedback. Contains 5 digits, order of digits: [own sleep time goal, sleep efficiency, sleep continuity, own sleep rating, recommended sleep time]. Values: 0 = below, 1 = above and 2 = no evaluation.
sleepHypnogram
{
"sleepStart" : "2025-01-01T23:12:33.435+02:00" ,
"sleepEnd" : "2025-01-02T08:12:33.435+02:00" ,
"alarmStopTime" : "2025-01-02T08:15:33.435+02:00" ,
"alarmSnoozeTimes" : [
"2025-01-01T08:05:00.435+02:00" ,
"2025-01-01T08:10:00.435+02:00"
],
"sleepStateChanges" : [
{
"offsetFromStart" : "30s" ,
"newState" : "SLEEP_STATE_WAKE"
}
],
"sleepStartOffsetSeconds" : -3600 ,
"sleepEndOffsetSeconds" : -10800 ,
"sleepRating" : "SLEEP_RATING_UNKNOWN" ,
"sleepGoal" : "28800s" ,
"birthday" : "2000-01-01" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"batteryRanOut" : true
}
Hypnogram
Properties
Name
Type
Required
Description
sleepStart
string
true
Sleep start time in ISO-8601 offset date-time format. User's local time.
sleepEnd
string
true
Sleep end time in ISO-8601 offset date-time format. User's local time.
alarmStopTime
string
false
Time when the user stopped the alarm in ISO-8601 offset date-time format. User's local time. Optional.
alarmSnoozeTimes
[string]
false
List of times when the user snoozed the alarm in ISO-8601 offset date-time format. User's local time.
sleepStateChanges
[sleepSleepStateChange ]
false
List of changes in the depth of user's sleep.
sleepStartOffsetSeconds
integer(int32)
false
Offset seconds for sleep start time. Used in sleep trimming. Value can be negative or positive.
sleepEndOffsetSeconds
integer(int32)
false
Offset seconds for sleep end time. Used in sleep trimming. Value can be negative or positive.
sleepRating
HypnogramSleepRating
false
Sleep quality rating. Optional.
sleepGoal
string
false
Sleep duration goal. Format is seconds with optional fraction of seconds in maximum of nanoseconds precision like "3.000000001s".
birthday
string
true
The user's birthday in ISO 8601 date format.
deviceReference
domainssleepDeviceReference
false
The recording Device ID. Optional.
batteryRanOut
boolean
true
Tells whether the sleep recording was stopped because of low battery. Default is false.
sleepInterruptions
{
"totalDuration" : "220s" ,
"longDuration" : "180s" ,
"shortDuration" : "40s" ,
"totalCount" : 0 ,
"longCount" : 0 ,
"shortCount" : 0
}
Interruptions
Properties
Name
Type
Required
Description
totalDuration
string
true
Total duration of interruptions. Format is seconds with optional fraction of seconds in maximum of nanoseconds precision like "3.000000001s".
longDuration
string
true
Duration of long interruptions. Format is seconds with optional fraction of seconds in maximum of nanoseconds precision like "3.000000001s".
shortDuration
string
true
Duration of short interruptions. Format is seconds with optional fraction of seconds in maximum of nanoseconds precision like "3.000000001s".
totalCount
integer(int32)
true
Total count of interruptions.
longCount
integer(int32)
true
Count of long interruptions.
shortCount
integer(int32)
true
Count of short interruptions.
sleepListSleepWakeVectorsResponse
{
"sleepWakeVectors" : [
{
"date" : "2025-01-02" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"sleepWakeStateChanges" : [
{
"startOffset" : 0 ,
"newState" : "SLEEP_WAKE_STATE_SLEEP"
}
]
}
]
}
ListSleepWakeVectorsResponse
Properties
Name
Type
Required
Description
sleepWakeVectors
[sleepSleepWakeVector ]
false
The list of sleep/wake state vectors for the requested range.
sleepListSleepsResponse
{
"nightSleeps" : [
{
"sleepDate" : "2025-01-02" ,
"sleepResult" : {
"hypnogram" : {
"sleepStart" : "2025-01-01T23:12:33.435+02:00" ,
"sleepEnd" : "2025-01-02T08:12:33.435+02:00" ,
"alarmStopTime" : "2025-01-02T08:15:33.435+02:00" ,
"alarmSnoozeTimes" : [
"2025-01-01T08:05:00.435+02:00" ,
"2025-01-01T08:10:00.435+02:00"
],
"sleepStateChanges" : [
{
"offsetFromStart" : "30s" ,
"newState" : "SLEEP_STATE_WAKE"
}
],
"sleepStartOffsetSeconds" : -3600 ,
"sleepEndOffsetSeconds" : -10800 ,
"sleepRating" : "SLEEP_RATING_UNKNOWN" ,
"sleepGoal" : "28800s" ,
"birthday" : "2000-01-01" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"batteryRanOut" : true
},
"sleepCycles" : [
{
"secondsFromSleepStart" : 0 ,
"sleepDepthAtCycleStart" : 2
}
]
},
"originalSleepResult" : {
"hypnogram" : {
"sleepStart" : "2025-01-01T23:12:33.435+02:00" ,
"sleepEnd" : "2025-01-02T08:12:33.435+02:00" ,
"alarmStopTime" : "2025-01-02T08:15:33.435+02:00" ,
"alarmSnoozeTimes" : [
"2025-01-01T08:05:00.435+02:00" ,
"2025-01-01T08:10:00.435+02:00"
],
"sleepStateChanges" : [
{
"offsetFromStart" : "30s" ,
"newState" : "SLEEP_STATE_WAKE"
}
],
"sleepStartOffsetSeconds" : -3600 ,
"sleepEndOffsetSeconds" : -10800 ,
"sleepRating" : "SLEEP_RATING_UNKNOWN" ,
"sleepGoal" : "28800s" ,
"birthday" : "2000-01-01" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"batteryRanOut" : true
},
"sleepCycles" : [
{
"secondsFromSleepStart" : 0 ,
"sleepDepthAtCycleStart" : 2
}
]
},
"sleepScore" : {
"created" : "2025-05-20T03:00:59.064Z" ,
"lastModified" : "2025-05-20T03:00:59.064Z" ,
"sleepScore" : 1 ,
"sleepTimeOwnTargetScore" : 1 ,
"sleepTimeRecommendationScore" : 1 ,
"continuityScore" : 1 ,
"efficiencyScore" : 1 ,
"remScore" : 1 ,
"n3Score" : 1 ,
"longInterruptionsTimeScore" : 1 ,
"groupDurationScore" : 1 ,
"groupSolidityScore" : 1 ,
"groupRefreshScore" : 1 ,
"scoreRate" : 1
},
"sleepEvaluation" : {
"sleepType" : "SLEEP_TYPE_UNKNOWN" ,
"sleepSpan" : "string" ,
"asleepDuration" : "string" ,
"age" : 0.1 ,
"analysis" : {
"efficiencyPercent" : 100 ,
"continuityIndex" : 5 ,
"continuityClass" : 5 ,
"feedback" : "01101"
},
"interruptions" : {
"totalDuration" : "220s" ,
"longDuration" : "180s" ,
"shortDuration" : "40s" ,
"totalCount" : 0 ,
"longCount" : 0 ,
"shortCount" : 0
},
"phaseDurations" : {
"wake" : "60s" ,
"rem" : "70s" ,
"light" : "80s" ,
"deep" : "90s" ,
"unknown" : "100s" ,
"remPercentage" : 100 ,
"deepPercentage" : 100
}
}
}
]
}
ListSleepsResponse
Properties
Name
Type
Required
Description
nightSleeps
[sleepNightSleep ]
false
The list of night sleeps from the requested range.
sleepNightSleep
{
"sleepDate" : "2025-01-02" ,
"sleepResult" : {
"hypnogram" : {
"sleepStart" : "2025-01-01T23:12:33.435+02:00" ,
"sleepEnd" : "2025-01-02T08:12:33.435+02:00" ,
"alarmStopTime" : "2025-01-02T08:15:33.435+02:00" ,
"alarmSnoozeTimes" : [
"2025-01-01T08:05:00.435+02:00" ,
"2025-01-01T08:10:00.435+02:00"
],
"sleepStateChanges" : [
{
"offsetFromStart" : "30s" ,
"newState" : "SLEEP_STATE_WAKE"
}
],
"sleepStartOffsetSeconds" : -3600 ,
"sleepEndOffsetSeconds" : -10800 ,
"sleepRating" : "SLEEP_RATING_UNKNOWN" ,
"sleepGoal" : "28800s" ,
"birthday" : "2000-01-01" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"batteryRanOut" : true
},
"sleepCycles" : [
{
"secondsFromSleepStart" : 0 ,
"sleepDepthAtCycleStart" : 2
}
]
},
"originalSleepResult" : {
"hypnogram" : {
"sleepStart" : "2025-01-01T23:12:33.435+02:00" ,
"sleepEnd" : "2025-01-02T08:12:33.435+02:00" ,
"alarmStopTime" : "2025-01-02T08:15:33.435+02:00" ,
"alarmSnoozeTimes" : [
"2025-01-01T08:05:00.435+02:00" ,
"2025-01-01T08:10:00.435+02:00"
],
"sleepStateChanges" : [
{
"offsetFromStart" : "30s" ,
"newState" : "SLEEP_STATE_WAKE"
}
],
"sleepStartOffsetSeconds" : -3600 ,
"sleepEndOffsetSeconds" : -10800 ,
"sleepRating" : "SLEEP_RATING_UNKNOWN" ,
"sleepGoal" : "28800s" ,
"birthday" : "2000-01-01" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"batteryRanOut" : true
},
"sleepCycles" : [
{
"secondsFromSleepStart" : 0 ,
"sleepDepthAtCycleStart" : 2
}
]
},
"sleepScore" : {
"created" : "2025-05-20T03:00:59.064Z" ,
"lastModified" : "2025-05-20T03:00:59.064Z" ,
"sleepScore" : 1 ,
"sleepTimeOwnTargetScore" : 1 ,
"sleepTimeRecommendationScore" : 1 ,
"continuityScore" : 1 ,
"efficiencyScore" : 1 ,
"remScore" : 1 ,
"n3Score" : 1 ,
"longInterruptionsTimeScore" : 1 ,
"groupDurationScore" : 1 ,
"groupSolidityScore" : 1 ,
"groupRefreshScore" : 1 ,
"scoreRate" : 1
},
"sleepEvaluation" : {
"sleepType" : "SLEEP_TYPE_UNKNOWN" ,
"sleepSpan" : "string" ,
"asleepDuration" : "string" ,
"age" : 0.1 ,
"analysis" : {
"efficiencyPercent" : 100 ,
"continuityIndex" : 5 ,
"continuityClass" : 5 ,
"feedback" : "01101"
},
"interruptions" : {
"totalDuration" : "220s" ,
"longDuration" : "180s" ,
"shortDuration" : "40s" ,
"totalCount" : 0 ,
"longCount" : 0 ,
"shortCount" : 0
},
"phaseDurations" : {
"wake" : "60s" ,
"rem" : "70s" ,
"light" : "80s" ,
"deep" : "90s" ,
"unknown" : "100s" ,
"remPercentage" : 100 ,
"deepPercentage" : 100
}
}
}
NightSleep
Properties
sleepPhaseDurations
{
"wake" : "60s" ,
"rem" : "70s" ,
"light" : "80s" ,
"deep" : "90s" ,
"unknown" : "100s" ,
"remPercentage" : 100 ,
"deepPercentage" : 100
}
PhaseDurations
Properties
Name
Type
Required
Description
wake
string
true
Duration of wake phase. Format is seconds with optional fraction of seconds in maximum of nanoseconds precision like "3.000000001s".
rem
string
true
Duration of rem phase. Format is seconds with optional fraction of seconds in maximum of nanoseconds precision like "3.000000001s".
light
string
true
Duration of light sleep. Format is seconds with optional fraction of seconds in maximum of nanoseconds precision like "3.000000001s".
deep
string
true
Duration of deep sleep. Format is seconds with optional fraction of seconds in maximum of nanoseconds precision like "3.000000001s".
unknown
string
true
Duration of unknown phase. Format is seconds with optional fraction of seconds in maximum of nanoseconds precision like "3.000000001s".
remPercentage
number(double)
true
Percentage of time spent in rem phase. Range: [0.0 - 100.0].
deepPercentage
number(double)
true
Percentage of time spent in deep sleep. Range: [0.0 - 100.0].
sleepSleepCycle
{
"secondsFromSleepStart" : 0 ,
"sleepDepthAtCycleStart" : 2
}
SleepCycle
Properties
Name
Type
Required
Description
secondsFromSleepStart
integer(int64)
true
Start offset from the beginning of the sleep.
sleepDepthAtCycleStart
number(float)
true
Sleep depth at the start of sleep cycle. Range: [0.0 - 2.0].
sleepSleepEvaluation
{
"sleepType" : "SLEEP_TYPE_UNKNOWN" ,
"sleepSpan" : "string" ,
"asleepDuration" : "string" ,
"age" : 0.1 ,
"analysis" : {
"efficiencyPercent" : 100 ,
"continuityIndex" : 5 ,
"continuityClass" : 5 ,
"feedback" : "01101"
},
"interruptions" : {
"totalDuration" : "220s" ,
"longDuration" : "180s" ,
"shortDuration" : "40s" ,
"totalCount" : 0 ,
"longCount" : 0 ,
"shortCount" : 0
},
"phaseDurations" : {
"wake" : "60s" ,
"rem" : "70s" ,
"light" : "80s" ,
"deep" : "90s" ,
"unknown" : "100s" ,
"remPercentage" : 100 ,
"deepPercentage" : 100
}
}
SleepEvaluation
Properties
Name
Type
Required
Description
sleepType
sleepSleepType
false
SLEEP_TYPE_UNKNOWN: Sleep type is unknown. SLEEP_TYPE_SLEEP_TIME_ONLY: Sleep information contains sleep time only, no sleep stages and sleep cycles. SLEEP_TYPE_SLEEP_PLUS: Sleep information contains sleep time with sleep stages, no sleep cycles. SLEEP_TYPE_SLEEP_PLUS_STAGES: Sleep information contains sleep time with sleep stages and sleep cycles.
sleepSpan
string
false
Format is seconds with optional fraction of seconds in maximum of nanoseconds precision like "3.000000001s".
asleepDuration
string
false
Format is seconds with optional fraction of seconds in maximum of nanoseconds precision like "3.000000001s".
age
number(double)
false
analysis
sleepAnalysis
false
interruptions
sleepInterruptions
false
phaseDurations
sleepPhaseDurations
false
sleepSleepResult
{
"hypnogram" : {
"sleepStart" : "2025-01-01T23:12:33.435+02:00" ,
"sleepEnd" : "2025-01-02T08:12:33.435+02:00" ,
"alarmStopTime" : "2025-01-02T08:15:33.435+02:00" ,
"alarmSnoozeTimes" : [
"2025-01-01T08:05:00.435+02:00" ,
"2025-01-01T08:10:00.435+02:00"
],
"sleepStateChanges" : [
{
"offsetFromStart" : "30s" ,
"newState" : "SLEEP_STATE_WAKE"
}
],
"sleepStartOffsetSeconds" : -3600 ,
"sleepEndOffsetSeconds" : -10800 ,
"sleepRating" : "SLEEP_RATING_UNKNOWN" ,
"sleepGoal" : "28800s" ,
"birthday" : "2000-01-01" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"batteryRanOut" : true
},
"sleepCycles" : [
{
"secondsFromSleepStart" : 0 ,
"sleepDepthAtCycleStart" : 2
}
]
}
SleepResult
Properties
sleepSleepScoreData
{
"created" : "2025-05-20T03:00:59.064Z" ,
"lastModified" : "2025-05-20T03:00:59.064Z" ,
"sleepScore" : 1 ,
"sleepTimeOwnTargetScore" : 1 ,
"sleepTimeRecommendationScore" : 1 ,
"continuityScore" : 1 ,
"efficiencyScore" : 1 ,
"remScore" : 1 ,
"n3Score" : 1 ,
"longInterruptionsTimeScore" : 1 ,
"groupDurationScore" : 1 ,
"groupSolidityScore" : 1 ,
"groupRefreshScore" : 1 ,
"scoreRate" : 1
}
SleepScoreData
Properties
Name
Type
Required
Description
created
string(date-time)
true
Creation time in UTC. Timestamp in RFC 3339 format "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z".
lastModified
string(date-time)
true
Last modification time in UTC. Timestamp in RFC 3339 format "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z".
sleepScore
number(float)
true
Average score of the overall sleep. (1 to 100).
sleepTimeOwnTargetScore
number(float)
true
Score of the sleep w.r.t. ownTargetSleepTime. (1 to 100).
sleepTimeRecommendationScore
number(float)
true
Score of the sleep w.r.t recommended sleep time. (1 to 100).
continuityScore
number(float)
true
Score of the sleep w.r.t continuityIndex. (1 to 100).
efficiencyScore
number(float)
true
Score of the sleep w.r.t SleepEfficiency. (1 to 100).
remScore
number(float)
true
Score of the sleep w.r.t REM sleep. (1 to 100).
n3Score
number(float)
true
Score of the sleep w.r.t N3 sleep. (1 to 100).
longInterruptionsTimeScore
number(float)
true
Score of the sleep w.r.t long interruption time. (1 to 100).
groupDurationScore
number(float)
true
Average score of duration variables.
groupSolidityScore
number(float)
true
Average score of solidity variables.
groupRefreshScore
number(float)
true
Average score of refresh variables.
scoreRate
integer(int32)
false
Rating of sleep score status in scale 1-5 compared to own usual level (1 = worst, 5 = best).
sleepSleepStateChange
{
"offsetFromStart" : "30s" ,
"newState" : "SLEEP_STATE_WAKE"
}
SleepStateChange
Properties
Name
Type
Required
Description
offsetFromStart
string
true
Offset from the start of the sleep. Format is seconds with optional fraction of seconds in maximum of nanoseconds precision like "3.000000001s".
newState
SleepStateChangeSleepState
false
The state the user went into.
sleepSleepType
SleepType
Properties
Name
Type
Required
Description
SleepType
string
false
SLEEP_TYPE_UNKNOWN: Sleep type is unknown. SLEEP_TYPE_SLEEP_TIME_ONLY: Sleep information contains sleep time only, no sleep stages and sleep cycles. SLEEP_TYPE_SLEEP_PLUS: Sleep information contains sleep time with sleep stages, no sleep cycles. SLEEP_TYPE_SLEEP_PLUS_STAGES: Sleep information contains sleep time with sleep stages and sleep cycles.
Enumerated Values
Property
Value
SleepType
SLEEP_TYPE_UNKNOWN
SleepType
SLEEP_TYPE_SLEEP_TIME_ONLY
SleepType
SLEEP_TYPE_SLEEP_PLUS
SleepType
SLEEP_TYPE_SLEEP_PLUS_STAGES
sleepSleepWakeStateChange
{
"startOffset" : 0 ,
"newState" : "SLEEP_WAKE_STATE_SLEEP"
}
SleepWakeStateChange
Properties
Name
Type
Required
Description
startOffset
integer(int64)
true
Start of the new state as milliseconds from the start of the day.
newState
SleepWakeStateChangeSleepWakeState
false
sleepSleepWakeVector
{
"date" : "2025-01-02" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"sleepWakeStateChanges" : [
{
"startOffset" : 0 ,
"newState" : "SLEEP_WAKE_STATE_SLEEP"
}
]
}
SleepWakeVector
Properties
Name
Type
Required
Description
date
string
true
Start date of the vector. Date in ISO-8601 format.
deviceReference
domainssleepDeviceReference
false
The recording device reference.
sleepWakeStateChanges
[sleepSleepWakeStateChange ]
false
List of sleep/wake state changes for the date.
DirectionInstructionContinueStraight
Properties
None
DirectionInstructionFork
{
"direction" : "NO_DIRECTION"
}
Properties
DirectionInstructionRoundaboutExit
{
"currentExitNumber" : 0 ,
"targetExitNumber" : 0 ,
"totalExits" : 0 ,
"orientation" : "UNKNOWN"
}
Properties
Name
Type
Required
Description
currentExitNumber
integer(int64)
false
The number of the exit The exit through which the roundabout is entered is number 0 In range [0, total_exits-1].
targetExitNumber
integer(int64)
false
The target exit's number to which this instruction is guiding the user to. In range [1, total_exits-1].
totalExits
integer(int64)
false
The total number of exits in this roundabout. Also counts exits that are not part of the route.
orientation
RoundaboutExitRoundaboutOrientation
false
Orientation of the roundabout.
DirectionInstructionTurn
{
"direction" : "NO_DIRECTION" ,
"type" : "REGULAR"
}
Properties
DirectionInstructionUTurn
Properties
None
ForkForkDirection
- NO_DIRECTION: No direction specified.
LEFT: Fork left.
RIGHT: Fork right.*
Properties
Name
Type
Required
Description
anonymous
string
false
NO_DIRECTION: No direction specified. LEFT: Fork left. RIGHT: Fork right.
Enumerated Values
Property
Value
anonymous
NO_DIRECTION
anonymous
LEFT
anonymous
RIGHT
RoundaboutExitRoundaboutOrientation
- UNKNOWN: Unknown orientation.
CLOCKWISE: Clockwise orientation.
COUNTERCLOCKWISE: Counterclockwise orientation.*
Properties
Name
Type
Required
Description
anonymous
string
false
UNKNOWN: Unknown orientation. CLOCKWISE: Clockwise orientation. COUNTERCLOCKWISE: Counterclockwise orientation.
Enumerated Values
Property
Value
anonymous
UNKNOWN
anonymous
CLOCKWISE
anonymous
COUNTERCLOCKWISE
TurnTurnDirection
- NO_DIRECTION: No direction specified.
LEFT: Turn left.
RIGHT: Turn right.*
Properties
Name
Type
Required
Description
anonymous
string
false
NO_DIRECTION: No direction specified. LEFT: Turn left. RIGHT: Turn right.
Enumerated Values
Property
Value
anonymous
NO_DIRECTION
anonymous
LEFT
anonymous
RIGHT
TurnTurnType
- REGULAR: Regular turn: right angle: ~90 degrees.
SLIGHT: Slight turn: obtuse angle: ~100-180 degrees.
SHARP: Sharp turn: acute angle: ~0-80 degrees.*
Properties
Name
Type
Required
Description
anonymous
string
false
REGULAR: Regular turn: right angle: ~90 degrees. SLIGHT: Slight turn: obtuse angle: ~100-180 degrees. SHARP: Sharp turn: acute angle: ~0-80 degrees.
Enumerated Values
Property
Value
anonymous
REGULAR
anonymous
SLIGHT
anonymous
SHARP
apiLoadRouteResponse
{
"userRoute" : {
"id" : "string" ,
"route" : {
"name" : "string" ,
"distanceMeters" : 0.1 ,
"routeSource" : "string" ,
"sourceId" : "string" ,
"sourceVersionIdentifier" : "string" ,
"routePoints" : [
{
"location" : {
"longitude" : 0.1 ,
"latitude" : 0.1 ,
"altitudeMeters" : 0.1
},
"distanceFromStartMeters" : 0.1 ,
"timeOffsetFromStartMillis" : 0 ,
"instructions" : [
{
"turn" : {
"direction" : "NO_DIRECTION" ,
"type" : "REGULAR"
},
"fork" : {
"direction" : "NO_DIRECTION"
},
"continueStraight" : {},
"uTurn" : {},
"roundaboutExit" : {
"currentExitNumber" : 0 ,
"targetExitNumber" : 0 ,
"totalExits" : 0 ,
"orientation" : "UNKNOWN"
}
}
]
}
],
"hasInstructions" : true ,
"sportId" : 0
},
"created" : "2019-08-24T14:15:22Z" ,
"modified" : "2019-08-24T14:15:22Z" ,
"legacyRouteId" : "string"
}
}
Properties
datamodelrouteLocation
{
"longitude" : 0.1 ,
"latitude" : 0.1 ,
"altitudeMeters" : 0.1
}
Location
Properties
Name
Type
Required
Description
longitude
number(double)
false
Longitude of the location.
latitude
number(double)
false
Latitude of the location.
altitudeMeters
number(double)
false
Altitude of the location in meters.
datamodelrouteRoute
{
"name" : "string" ,
"distanceMeters" : 0.1 ,
"routeSource" : "string" ,
"sourceId" : "string" ,
"sourceVersionIdentifier" : "string" ,
"routePoints" : [
{
"location" : {
"longitude" : 0.1 ,
"latitude" : 0.1 ,
"altitudeMeters" : 0.1
},
"distanceFromStartMeters" : 0.1 ,
"timeOffsetFromStartMillis" : 0 ,
"instructions" : [
{
"turn" : {
"direction" : "NO_DIRECTION" ,
"type" : "REGULAR"
},
"fork" : {
"direction" : "NO_DIRECTION"
},
"continueStraight" : {},
"uTurn" : {},
"roundaboutExit" : {
"currentExitNumber" : 0 ,
"targetExitNumber" : 0 ,
"totalExits" : 0 ,
"orientation" : "UNKNOWN"
}
}
]
}
],
"hasInstructions" : true ,
"sportId" : 0
}
Route
Properties
Name
Type
Required
Description
name
string
false
distanceMeters
number(double)
false
Route distance in meters.
routeSource
string
false
sourceId
string
false
sourceVersionIdentifier
string
false
Route source version identifier.
routePoints
[routeRoutePoint ]
false
hasInstructions
boolean
false
Does the route have instructions.
sportId
integer(int64)
false
Route's sport identifier. All available sports can be loaded from the /v4/data/sports/list endpoint.
routeDirectionInstruction
{
"turn" : {
"direction" : "NO_DIRECTION" ,
"type" : "REGULAR"
},
"fork" : {
"direction" : "NO_DIRECTION"
},
"continueStraight" : {},
"uTurn" : {},
"roundaboutExit" : {
"currentExitNumber" : 0 ,
"targetExitNumber" : 0 ,
"totalExits" : 0 ,
"orientation" : "UNKNOWN"
}
}
DirectionInstruction
Properties
routeRoutePoint
{
"location" : {
"longitude" : 0.1 ,
"latitude" : 0.1 ,
"altitudeMeters" : 0.1
},
"distanceFromStartMeters" : 0.1 ,
"timeOffsetFromStartMillis" : 0 ,
"instructions" : [
{
"turn" : {
"direction" : "NO_DIRECTION" ,
"type" : "REGULAR"
},
"fork" : {
"direction" : "NO_DIRECTION"
},
"continueStraight" : {},
"uTurn" : {},
"roundaboutExit" : {
"currentExitNumber" : 0 ,
"targetExitNumber" : 0 ,
"totalExits" : 0 ,
"orientation" : "UNKNOWN"
}
}
]
}
RoutePoint
Properties
Name
Type
Required
Description
location
datamodelrouteLocation
false
Location of the route point.
distanceFromStartMeters
number(double)
false
Distance from the start of the route in meters.
timeOffsetFromStartMillis
integer(int64)
false
Time offset from the start of the route in milliseconds.
instructions
[routeDirectionInstruction ]
false
Direction instructions for the route point.
routeUserRoute
{
"id" : "string" ,
"route" : {
"name" : "string" ,
"distanceMeters" : 0.1 ,
"routeSource" : "string" ,
"sourceId" : "string" ,
"sourceVersionIdentifier" : "string" ,
"routePoints" : [
{
"location" : {
"longitude" : 0.1 ,
"latitude" : 0.1 ,
"altitudeMeters" : 0.1
},
"distanceFromStartMeters" : 0.1 ,
"timeOffsetFromStartMillis" : 0 ,
"instructions" : [
{
"turn" : {
"direction" : "NO_DIRECTION" ,
"type" : "REGULAR"
},
"fork" : {
"direction" : "NO_DIRECTION"
},
"continueStraight" : {},
"uTurn" : {},
"roundaboutExit" : {
"currentExitNumber" : 0 ,
"targetExitNumber" : 0 ,
"totalExits" : 0 ,
"orientation" : "UNKNOWN"
}
}
]
}
],
"hasInstructions" : true ,
"sportId" : 0
},
"created" : "2019-08-24T14:15:22Z" ,
"modified" : "2019-08-24T14:15:22Z" ,
"legacyRouteId" : "string"
}
UserRoute
Properties
Name
Type
Required
Description
id
string
false
Route ecosystem identifier - Required.
route
datamodelrouteRoute
false
created
string(date-time)
false
Route creation time in UTC time in RFC 3339 format (yyyy-mm-ddThh:mm:sssZ).
modified
string(date-time)
false
Last modification time of the route in UTC time in RFC 3339 format (yyyy-mm-ddThh:mm:sssZ).
legacyRouteId
string(uint64)
false
Legacy route ecosystem identifier.
routeapiErrorResponse
{
"errorMessage" : "string"
}
Properties
Name
Type
Required
Description
errorMessage
string
false
DeviceRegistrationEventEventType
Properties
Name
Type
Required
Description
anonymous
string
false
Enumerated Values
Property
Value
anonymous
EVENT_TYPE_UNSPECIFIED
anonymous
EVENT_TYPE_ADDED
anonymous
EVENT_TYPE_DELETED
deviceDevice
{
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"firmwareVersion" : "1.2.3" ,
"hardwareIdentifier" : "00123456.01" ,
"salesRegion" : "GLOBAL" ,
"productVariant" : {
"productDescription" : "Polar Vantage V" ,
"productColor" : "Black"
}
}
Device
Properties
Name
Type
Required
Description
deviceReference
domainsdeviceDeviceReference
true
firmwareVersion
string
false
Firmware version of the device if known.
hardwareIdentifier
string
false
Hardware identifier of the device if known.
salesRegion
string
false
Sales region where the device was sold.
productVariant
deviceProductVariantReference
true
Product type of the device.
deviceProductVariantReference
{
"productDescription" : "Polar Vantage V" ,
"productColor" : "Black"
}
ProductVariantReference
Properties
Name
Type
Required
Description
productDescription
string
true
productColor
string
false
domainsdeviceDeviceReference
{
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
}
DeviceReference
Properties
Name
Type
Required
Description
uuid
string
true
Unique identifier of the device.
domainsuserdeviceErrorResponse
{
"errorMessage" : "string"
}
Properties
Name
Type
Required
Description
errorMessage
string
false
userdeviceActiveUserDevice
{
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"registered" : "2025-01-01T10:12:33Z" ,
"deviceSettings" : [
{
"name" : "language" ,
"value" : "en"
}
]
}
ActiveUserDevice
Properties
userdeviceArchivedUserDevice
{
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"deregistered" : "2025-01-01T10:12:33Z"
}
ArchivedUserDevice
Properties
Name
Type
Required
Description
deviceReference
domainsdeviceDeviceReference
true
deregistered
string(date-time)
true
Time when device was deregistered in ISO 8601 format.
userdeviceDeviceRegistrationEvent
{
"eventTimestamp" : "2025-01-01T10:12:33.435Z" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"eventType" : "EVENT_TYPE_UNSPECIFIED"
}
DeviceRegistrationEvent
Properties
userdeviceListUserDevicesResponse
{
"devicesData" : [
{
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"firmwareVersion" : "1.2.3" ,
"hardwareIdentifier" : "00123456.01" ,
"salesRegion" : "GLOBAL" ,
"productVariant" : {
"productDescription" : "Polar Vantage V" ,
"productColor" : "Black"
}
}
],
"userDevicesData" : {
"activeDevices" : [
{
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"registered" : "2025-01-01T10:12:33Z" ,
"deviceSettings" : [
{
"name" : "language" ,
"value" : "en"
}
]
}
],
"archivedDevices" : [
{
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"deregistered" : "2025-01-01T10:12:33Z"
}
],
"deviceRegistrationEvents" : [
{
"eventTimestamp" : "2025-01-01T10:12:33.435Z" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"eventType" : "EVENT_TYPE_UNSPECIFIED"
}
]
}
}
Properties
userdeviceUserDeviceSetting
{
"name" : "language" ,
"value" : "en"
}
UserDeviceSetting
Properties
Name
Type
Required
Description
name
string
true
value
string
true
userdeviceUserDevicesData
{
"activeDevices" : [
{
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"registered" : "2025-01-01T10:12:33Z" ,
"deviceSettings" : [
{
"name" : "language" ,
"value" : "en"
}
]
}
],
"archivedDevices" : [
{
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"deregistered" : "2025-01-01T10:12:33Z"
}
],
"deviceRegistrationEvents" : [
{
"eventTimestamp" : "2025-01-01T10:12:33.435Z" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"eventType" : "EVENT_TYPE_UNSPECIFIED"
}
]
}
UserDeviceData
Properties
domainsppiDeviceReference
{
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
}
DeviceReference
Properties
Name
Type
Required
Description
uuid
string
true
Unique identifier of the device.
domainsppiErrorResponse
{
"errorMessage" : "string"
}
ErrorResponse
Properties
Name
Type
Required
Description
errorMessage
string
false
ppiDailyPpiSamples
{
"date" : "2025-08-01" ,
"modified" : "2025-08-01T12:00:00Z" ,
"ppiSamplesPerDevice" : [
{
"recordingDevice" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"ppiSamples" : [
{
"offsetMillis" : 70 ,
"ppInterval" : 1052 ,
"errorEstimateMillis" : 10 ,
"skinContact" : true ,
"movement" : false ,
"offline" : false
}
],
"recordingTriggerTypeChanges" : [
{
"triggerType" : "TRIGGER_TYPE_UNDEFINED" ,
"offsetMillis" : 70
}
]
}
]
}
DailyPpiSamples
Properties
Name
Type
Required
Description
date
string
true
Date of the PPI samples in ISO 8601 format.
modified
string(date-time)
false
Timestamp in ISO 8601 format. UTC time. Returned if data has been found for the date.
ppiSamplesPerDevice
[ppiRecordedPpiSamples ]
false
ppiListPpiSamplesResponse
{
"dailyPpiSamples" : [
{
"date" : "2025-08-01" ,
"modified" : "2025-08-01T12:00:00Z" ,
"ppiSamplesPerDevice" : [
{
"recordingDevice" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"ppiSamples" : [
{
"offsetMillis" : 70 ,
"ppInterval" : 1052 ,
"errorEstimateMillis" : 10 ,
"skinContact" : true ,
"movement" : false ,
"offline" : false
}
],
"recordingTriggerTypeChanges" : [
{
"triggerType" : "TRIGGER_TYPE_UNDEFINED" ,
"offsetMillis" : 70
}
]
}
]
}
]
}
ListPpiSamplesResponse
Properties
Name
Type
Required
Description
dailyPpiSamples
[ppiDailyPpiSamples ]
false
Pulse to pulse interval samples per day.
ppiPpiSample
{
"offsetMillis" : 70 ,
"ppInterval" : 1052 ,
"errorEstimateMillis" : 10 ,
"skinContact" : true ,
"movement" : false ,
"offline" : false
}
PpiSample
Properties
Name
Type
Required
Description
offsetMillis
integer(int64)
true
Offset of the sample from the beginning of the day in milliseconds.
ppInterval
integer(int64)
true
Pulse to pulse interval value in milliseconds.
errorEstimateMillis
integer(int64)
true
Error estimate for the PPI value in milliseconds. Describes the quality of PPI sample.
skinContact
boolean
true
Skin contact status. True if skin contact is detected, false otherwise.
movement
boolean
true
Movement status. True if movement is detected, false otherwise.
offline
boolean
true
Offline status. True if the PPI sample is recorded during an offline period, false otherwise.
ppiRecordedPpiSamples
{
"recordingDevice" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"ppiSamples" : [
{
"offsetMillis" : 70 ,
"ppInterval" : 1052 ,
"errorEstimateMillis" : 10 ,
"skinContact" : true ,
"movement" : false ,
"offline" : false
}
],
"recordingTriggerTypeChanges" : [
{
"triggerType" : "TRIGGER_TYPE_UNDEFINED" ,
"offsetMillis" : 70
}
]
}
RecordedPpiSamples
Properties
ppiRecordingTriggerTypeChange
{
"triggerType" : "TRIGGER_TYPE_UNDEFINED" ,
"offsetMillis" : 70
}
RecordingTriggerTypeChange
Properties
Name
Type
Required
Description
triggerType
ppiRecordingTriggerTypeChangeTriggerType
true
Type of the recording trigger.
offsetMillis
integer(int64)
true
Offset of the recording trigger type change in milliseconds from the beginning of the day.
ppiRecordingTriggerTypeChangeTriggerType
TriggerType
Properties
Name
Type
Required
Description
TriggerType
string
false
TRIGGER_TYPE_UNDEFINED: Undefined. TRIGGER_TYPE_AUTOMATIC: Automatic recording (for example 24/7 recording). TRIGGER_TYPE_MANUAL: Manual recording (started by user).
Enumerated Values
Property
Value
TriggerType
TRIGGER_TYPE_UNDEFINED
TriggerType
TRIGGER_TYPE_AUTOMATIC
TriggerType
TRIGGER_TYPE_MANUAL
domainsnightlyrechargeErrorResponse
{
"errorMessage" : "string"
}
Properties
Name
Type
Required
Description
errorMessage
string
false
domainsnightlyrechargeListResponse
{
"nightlyRechargeResults" : {
"nightlyRechargeResults" : [
{
"created" : "2025-01-01T10:12:33.435Z" ,
"modified" : "2025-01-01T10:12:33.435Z" ,
"ansStatus" : -15.7068 ,
"recoveryIndicator" : 1 ,
"recoveryIndicatorSubLevel" : 100 ,
"ansRate" : 1 ,
"meanNightlyRecoveryRri" : 800 ,
"meanNightlyRecoveryRmssd" : 800 ,
"meanNightlyRecoveryRespirationInterval" : 800 ,
"meanBaselineRri" : 800 ,
"sdBaselineRri" : 800 ,
"meanBaselineRmssd" : 800 ,
"sdBaselineRmssd" : 800 ,
"meanBaselineRespirationInterval" : 800 ,
"sdBaselineRespirationInterval" : 800 ,
"sleepTip" : "Consider reserving more time for sleep in your schedule. Keep your diet healthy, and take a moment for yourself for relaxing. This might improve the regenerative qualities of your sleep." ,
"vitalityTip" : "Take a nap, if you like. A power nap of no more than 20-30 minutes might do the trick. The best remedy for low energy levels today is reserving some time for rest." ,
"exerciseTip" : "You can train today, even if you might feel you're not 100% up for it." ,
"sleepResultDate" : "2025-01-01" ,
"hrvSamples" : [
{
"startTime" : "2025-09-18T21:46:02.009Z" ,
"sampleInterval" : "300s" ,
"hrvValues" : [
0.1
]
}
],
"breathingRateSamples" : [
{
"startTime" : "2025-09-18T21:46:02.009Z" ,
"sampleInterval" : "300s" ,
"breathingRateValues" : [
0.1
]
}
]
}
]
}
}
Properties
nightlyrechargeNightlyRechargeBreathingRateSamples
{
"startTime" : "2025-09-18T21:46:02.009Z" ,
"sampleInterval" : "300s" ,
"breathingRateValues" : [
0.1
]
}
NightlyRechargeBreathingRateSamples
Properties
Name
Type
Required
Description
startTime
string
true
Datetime in ISO 8601 format. In user local time zone.
sampleInterval
string
true
Sampling interval in seconds.
breathingRateValues
[number]
false
nightlyrechargeNightlyRechargeHrvSamples
{
"startTime" : "2025-09-18T21:46:02.009Z" ,
"sampleInterval" : "300s" ,
"hrvValues" : [
0.1
]
}
NightlyRechargeHrvSamples
Properties
Name
Type
Required
Description
startTime
string
true
Datetime in ISO 8601 format. In user local time zone.
sampleInterval
string
true
Sampling interval in seconds.
hrvValues
[number]
false
nightlyrechargeNightlyRechargeResult
{
"created" : "2025-01-01T10:12:33.435Z" ,
"modified" : "2025-01-01T10:12:33.435Z" ,
"ansStatus" : -15.7068 ,
"recoveryIndicator" : 1 ,
"recoveryIndicatorSubLevel" : 100 ,
"ansRate" : 1 ,
"meanNightlyRecoveryRri" : 800 ,
"meanNightlyRecoveryRmssd" : 800 ,
"meanNightlyRecoveryRespirationInterval" : 800 ,
"meanBaselineRri" : 800 ,
"sdBaselineRri" : 800 ,
"meanBaselineRmssd" : 800 ,
"sdBaselineRmssd" : 800 ,
"meanBaselineRespirationInterval" : 800 ,
"sdBaselineRespirationInterval" : 800 ,
"sleepTip" : "Consider reserving more time for sleep in your schedule. Keep your diet healthy, and take a moment for yourself for relaxing. This might improve the regenerative qualities of your sleep." ,
"vitalityTip" : "Take a nap, if you like. A power nap of no more than 20-30 minutes might do the trick. The best remedy for low energy levels today is reserving some time for rest." ,
"exerciseTip" : "You can train today, even if you might feel you're not 100% up for it." ,
"sleepResultDate" : "2025-01-01" ,
"hrvSamples" : [
{
"startTime" : "2025-09-18T21:46:02.010Z" ,
"sampleInterval" : "300s" ,
"hrvValues" : [
0.1
]
}
],
"breathingRateSamples" : [
{
"startTime" : "2025-09-18T21:46:02.010Z" ,
"sampleInterval" : "300s" ,
"breathingRateValues" : [
0.1
]
}
]
}
NightlyRechargeResult
Properties
Name
Type
Required
Description
created
string(date-time)
true
Time when the result was created in ISO 8601 format. UTC time.
modified
string(date-time)
true
Time when the result was last modified in ISO 8601 format. UTC time.
ansStatus
number(double)
false
recoveryIndicator
integer(int64)
false
The combination of normalized ANS status and normalized Sleep Score and Sleep Metric. Between 1 to 6.
recoveryIndicatorSubLevel
integer(int64)
false
This is a number between 0-100 and it indicates in more detail what is the level of combination of ANS and Sleep inside the recoveryIndicator class. I.e. if your recovery_indicator is 2, then recovery_indicator_sub_level 0 indicates that you are at the bottom of that class and ~100 indicates that you are at almost recovery_indicator level 3.
ansRate
integer(int64)
false
meanNightlyRecoveryRri
integer(int64)
false
meanNightlyRecoveryRmssd
integer(int64)
false
meanNightlyRecoveryRespirationInterval
integer(int64)
false
meanBaselineRri
integer(int64)
false
sdBaselineRri
integer(int64)
false
The standard deviation of RRI from baseline calculation.
meanBaselineRmssd
integer(int64)
false
The mean RMSSD from the baseline calculation.
sdBaselineRmssd
integer(int64)
false
The standard deviation of RMSSD from baseline calculation.
meanBaselineRespirationInterval
integer(int64)
false
sdBaselineRespirationInterval
integer(int64)
false
The standard deviation of Respiration Interval from baseline calculation.
sleepTip
string
false
Chosen sleep tip for the user.
vitalityTip
string
false
Chosen vitality tip for the user.
exerciseTip
string
false
Chosen exercise tip for the user.
sleepResultDate
string
true
Date for which the sleep result and nightly recovery result is for Date in ISO 8601 format. In user local time zone.
hrvSamples
[nightlyrechargeNightlyRechargeHrvSamples ]
false
breathingRateSamples
[nightlyrechargeNightlyRechargeBreathingRateSamples ]
false
nightlyrechargeNightlyRechargeResults
{
"nightlyRechargeResults" : [
{
"created" : "2025-01-01T10:12:33.435Z" ,
"modified" : "2025-01-01T10:12:33.435Z" ,
"ansStatus" : -15.7068 ,
"recoveryIndicator" : 1 ,
"recoveryIndicatorSubLevel" : 100 ,
"ansRate" : 1 ,
"meanNightlyRecoveryRri" : 800 ,
"meanNightlyRecoveryRmssd" : 800 ,
"meanNightlyRecoveryRespirationInterval" : 800 ,
"meanBaselineRri" : 800 ,
"sdBaselineRri" : 800 ,
"meanBaselineRmssd" : 800 ,
"sdBaselineRmssd" : 800 ,
"meanBaselineRespirationInterval" : 800 ,
"sdBaselineRespirationInterval" : 800 ,
"sleepTip" : "Consider reserving more time for sleep in your schedule. Keep your diet healthy, and take a moment for yourself for relaxing. This might improve the regenerative qualities of your sleep." ,
"vitalityTip" : "Take a nap, if you like. A power nap of no more than 20-30 minutes might do the trick. The best remedy for low energy levels today is reserving some time for rest." ,
"exerciseTip" : "You can train today, even if you might feel you're not 100% up for it." ,
"sleepResultDate" : "2025-01-01" ,
"hrvSamples" : [
{
"startTime" : "2025-09-18T21:46:02.010Z" ,
"sampleInterval" : "300s" ,
"hrvValues" : [
0.1
]
}
],
"breathingRateSamples" : [
{
"startTime" : "2025-09-18T21:46:02.010Z" ,
"sampleInterval" : "300s" ,
"breathingRateValues" : [
0.1
]
}
]
}
]
}
NightlyRechargeResults
Properties
continuoussamplesContinuousSamples
{
"heartRateSamplesPerDay" : [
{
"date" : "2025-01-01" ,
"deviceRef" : {
"deviceId" : "A1B2C3D4E5"
},
"state" : 123456789 ,
"samples" : [
{
"heartRate" : 80 ,
"offsetMillis" : 300 ,
"triggerType" : "TRIGGER_TIMED_247"
}
]
}
]
}
ContinuousSamples
Properties
continuoussamplesDailyHeartRateSamplesForDevice
{
"date" : "2025-01-01" ,
"deviceRef" : {
"deviceId" : "A1B2C3D4E5"
},
"state" : 123456789 ,
"samples" : [
{
"heartRate" : 80 ,
"offsetMillis" : 300 ,
"triggerType" : "TRIGGER_TIMED_247"
}
]
}
DailyHeartRateSamplesForDevice
Properties
Name
Type
Required
Description
date
string
true
Date in ISO 8601 format. In user local time.
deviceRef
domainscontinuoussamplesDeviceReference
true
Reference to the device that recorded the heart rate samples.
state
integer(int32)
true
A hash of the heart rate samples binary data.
samples
[continuoussamplesHeartRateSample ]
false
A collection of heart rate samples for the day.
continuoussamplesHeartRateSample
{
"heartRate" : 80 ,
"offsetMillis" : 300 ,
"triggerType" : "TRIGGER_TIMED_247"
}
HeartRateSample
Properties
Name
Type
Required
Description
heartRate
integer(int64)
true
Heart rate in beats per minute.
offsetMillis
integer(int64)
true
Millis since the start of the day.
triggerType
continuoussamplesHeartRateSampleTriggerType
true
Source of the heart rate sample.
continuoussamplesHeartRateSampleTriggerType
TriggerType
Properties
Name
Type
Required
Description
TriggerType
string
false
Source of the heart rate sample.
Enumerated Values
Property
Value
TriggerType
TRIGGER_UNKNOWN
TriggerType
TRIGGER_TIMED_247
TriggerType
TRIGGER_LOW_247
TriggerType
TRIGGER_HIGH_247
TriggerType
TRIGGER_MANUAL
domainscontinuoussamplesDeviceReference
{
"deviceId" : "A1B2C3D4E5"
}
DeviceReference
Properties
Name
Type
Required
Description
deviceId
string
true
Reference to a device by its unique identifier.
domainscontinuoussamplesErrorResponse
{
"errorMessage" : "string"
}
ErrorResponse
Properties
Name
Type
Required
Description
errorMessage
string
false
domainscontinuoussamplesLoadResponse
{
"continuousSamples" : {
"heartRateSamplesPerDay" : [
{
"date" : "2025-01-01" ,
"deviceRef" : {
"deviceId" : "A1B2C3D4E5"
},
"state" : 123456789 ,
"samples" : [
{
"heartRate" : 80 ,
"offsetMillis" : 300 ,
"triggerType" : "TRIGGER_TIMED_247"
}
]
}
]
}
}
LoadResponse
Properties
{
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
}
DeviceReference
Properties
Name
Type
Required
Description
uuid
string
true
Unique identifier of the device.
{
"errorMessage" : "string"
}
SkinContactErrorResponse
Properties
Name
Type
Required
Description
errorMessage
string
false
{
"skinContactPeriods" : [
{
"created" : "2025-04-03T00:00:00Z" ,
"modified" : "2025-04-03T12:29:25.266Z" ,
"startTime" : "2025-09-18T21:46:02.012Z" ,
"stopTime" : "2025-09-18T21:46:02.012Z" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"skinContactChanges" : [
{
"recordingTimeDeltaMilliseconds" : 1000 ,
"skinContact" : true
}
]
}
]
}
SkinContactListResponse
Properties
{
"created" : "2025-04-03T00:00:00Z" ,
"modified" : "2025-04-03T12:29:25.266Z" ,
"startTime" : "2025-09-18T21:46:02.012Z" ,
"stopTime" : "2025-09-18T21:46:02.012Z" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"skinContactChanges" : [
{
"recordingTimeDeltaMilliseconds" : 1000 ,
"skinContact" : true
}
]
}
SkinContactPeriod
Properties
Name
Type
Required
Description
created
string(date-time)
true
Timestamp in ISO 8601 format. UTC time.
modified
string(date-time)
true
Timestamp in ISO 8601 format. UTC time.
startTime
string
true
Datetime in ISO 8601 format. User's local time.
stopTime
string
true
Datetime in ISO 8601 format. User's local time.
deviceReference
skincontactSkinContactDeviceReference
true
skinContactChanges
[skincontactSkinContactSample ]
false
Skin contact changes. After first sample a new sample is saved only when skin contact value changes.
{
"recordingTimeDeltaMilliseconds" : 1000 ,
"skinContact" : true
}
SkinContactSample
Properties
Name
Type
Required
Description
recordingTimeDeltaMilliseconds
string(uint64)
true
Recording time. Delta in milliseconds from start_time of the period.
skinContact
boolean
true
Skin contact. True if the device is in skin contact with user.
temperaturemeasurementSensorLocation
SensorLocation
Properties
Name
Type
Required
Description
SensorLocation
string
false
SL_UNKNOWN: Unknown sensor location. SL_DISTAL: Distal from core. SL_PROXIMAL: Proximal from core.
Enumerated Values
Property
Value
SensorLocation
SL_UNKNOWN
SensorLocation
SL_DISTAL
SensorLocation
SL_PROXIMAL
temperaturemeasurementTemperatureMeasurementDeviceReference
{
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
}
DeviceReference
Properties
Name
Type
Required
Description
uuid
string
true
Unique identifier of the device.
temperaturemeasurementTemperatureMeasurementErrorResponse
{
"errorMessage" : "string"
}
TemperatureMeasurementErrorResponse
Properties
Name
Type
Required
Description
errorMessage
string
false
temperaturemeasurementTemperatureMeasurementListResponse
{
"temperatureMeasurementPeriod" : [
{
"created" : "2025-04-04T00:00:00Z" ,
"modified" : "2025-04-04T11:00:01.342Z" ,
"startTime" : "2025-09-18T21:46:02.012Z" ,
"stopTime" : "2025-09-18T21:46:02.012Z" ,
"measurementType" : "TM_UNKNOWN" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"sensorLocation" : "SL_UNKNOWN" ,
"temperatureMeasurementSamples" : [
{
"recordingTimeDeltaMilliseconds" : 1000 ,
"temperatureCelsius" : 36.5
}
]
}
]
}
TemperatureMeasurementListResponse
Properties
temperaturemeasurementTemperatureMeasurementPeriod
{
"created" : "2025-04-04T00:00:00Z" ,
"modified" : "2025-04-04T11:00:01.342Z" ,
"startTime" : "2025-09-18T21:46:02.012Z" ,
"stopTime" : "2025-09-18T21:46:02.012Z" ,
"measurementType" : "TM_UNKNOWN" ,
"deviceReference" : {
"uuid" : "0e030000-0084-0000-0000-00001234abcd"
},
"sensorLocation" : "SL_UNKNOWN" ,
"temperatureMeasurementSamples" : [
{
"recordingTimeDeltaMilliseconds" : 1000 ,
"temperatureCelsius" : 36.5
}
]
}
TemperatureMeasurementPeriod
Properties
temperaturemeasurementTemperatureMeasurementSample
{
"recordingTimeDeltaMilliseconds" : 1000 ,
"temperatureCelsius" : 36.5
}
TemperatureMeasurementSample
Properties
Name
Type
Required
Description
recordingTimeDeltaMilliseconds
string(uint64)
true
Recording time. Delta in milliseconds from start_time of the period.
temperatureCelsius
number(float)
true
temperaturemeasurementTemperatureMeasurementType
TemperatureMeasurementType
Properties
Name
Type
Required
Description
TemperatureMeasurementType
string
false
Enumerated Values
Property
Value
TemperatureMeasurementType
TM_UNKNOWN
TemperatureMeasurementType
TM_SKIN_TEMPERATURE
TemperatureMeasurementType
TM_CORE_TEMPERATURE