NAV Navbar
Shell HTTP Node.JS Ruby Python Java

TeamPro API v1.1.0

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 TeamPro API documentation

Base URL: https://teampro.api.polar.com/

Email: Support
Web: Support
License: License Agreement

How to get started?

  1. Go to https://admin.polaraccesslink.com/ and log in using your existing Polar credentials, or register new Polar account
  2. Fill your application/service information
  3. Data subscriptions can be left empty for Polar Team Pro API
  4. After client is created, remember to write down the OAuth2 client id and secret
  5. Start developing the API

Go to: https://admin.polaraccesslink.com/ and start the process.

Request rate limiting

The requests are rate limited per authenticated client.

The API will return Http Status Code 429 (TOO_MANY_REQUESTS), when rate limit has been reached.

The rate limit is basically allowing 1 request per second speed. There is also a "burst bucket" with maximum of 100 requests to fill up when doing more requests at higher than 1 per second interval. The "burst bucket" will then slowly diminish back to empty when requests are coming in with less than 1 per second interval, therefore allowing another burst to happen if required.

Authorization

The basic Polar OAuth2 flow for Polar Team Pro API:

  1. End user (team coach) is re-directed from client app to Polar OAuth2 authorization endpoint in https://auth.polar.com
  2. End user grants partner the right to access team data and team member's exercise data.
  3. End user is redirected back to client app and with authorization code as part of the request
  4. 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={ClientID}&response_type=code&scope=team_read

Parameters:

On success, user will be shown the authorization form. After granting authorization, user will be redirected to redirect_uri given during client registration process. Authorization code will be provided as a parameter.

Examples:

If an error occurs, user will be redirected to location defined in default redirect_uri with error code included. Example:

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 new access token.

Request headers

Response JSON object

{
  "access_token": "<access token value>",
  "token_type": "bearer",
  "refresh_token": "<refresh token value>",
  "expires_in": 43199,
  "scope": "team_read",
  "jti": "2dede3ca-0b04-4e41-b655-752dcd979713"
}

Request POST data

Name Required Description
grant_type true authorization_code for authorization code flow, refresh_token for refresh token flow
code true Authorization code received from authorization endpoint (only for authorization code flow)
refresh_token true Refresh token value (only for refresh token flow)
redirect_uri false Note: must be specified if redirect_uri was passed to authorization endpoint

Team

Endpoints for getting teams and team details.

Get teams.

Code samples

# You can also use wget
curl -X GET https://teampro.api.polar.com/v1/teams \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer {access-token}'

GET https://teampro.api.polar.com/v1/teams HTTP/1.1
Host: teampro.api.polar.com
Accept: application/json

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',  'Authorization':'Bearer {access-token}'
};

fetch('https://teampro.api.polar.com/v1/teams',
{
  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://teampro.api.polar.com/v1/teams',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://teampro.api.polar.com/v1/teams', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://teampro.api.polar.com/v1/teams");
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 /v1/teams

Parameters

Parameter In Type Required Description
pagination query paginationQuery false Pagination parameters

Example responses

200 Response

{
  "data": [
    {
      "id": "wMYz6L4w",
      "name": "Team1",
      "organisation": "Organisation1",
      "created": "2017-04-13T21:06:58Z",
      "modified": "2017-04-13T21:06:58Z"
    }
  ],
  "page": {
    "per_page": 20,
    "total_elements": 2,
    "page_number": 0,
    "total_pages": 1
  }
}

Responses

Status Meaning Description Schema
200 OK List of teams. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
» data [team] false none List of teams.
»» id string false none Team id
»» name string false none Team name
»» organisation string false none Organisation name
»» created string(date-time) false none Time when the team is created
»» modified string(date-time) false none Last time modified
» page paginationResponse false none Pagination info in response. Model contains info about response element count and paging.
»» per_page integer false none Items per page
»» total_elements integer false none Total number of items
»» page_number integer false none Number of the current page
»» total_pages integer false none Total number of pages

Get team details.

Code samples

# You can also use wget
curl -X GET https://teampro.api.polar.com/v1/teams/{team_id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer {access-token}'

GET https://teampro.api.polar.com/v1/teams/{team_id} HTTP/1.1
Host: teampro.api.polar.com
Accept: application/json

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',  'Authorization':'Bearer {access-token}'
};

fetch('https://teampro.api.polar.com/v1/teams/{team_id}',
{
  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://teampro.api.polar.com/v1/teams/{team_id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://teampro.api.polar.com/v1/teams/{team_id}', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://teampro.api.polar.com/v1/teams/{team_id}");
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 /v1/teams/{team_id}

Parameters

Parameter In Type Required Description
team_id path string true Team id to get.

Example responses

200 Response

{
  "data": {
    "id": "wMYz6L4w",
    "name": "Team1",
    "organisation": "Organisation1",
    "created": "2017-04-13T21:06:58Z",
    "modified": "2017-04-13T21:06:58Z",
    "players": [
      {
        "player_id": "ZmozZxkr",
        "player_number": 12,
        "role": "Midfielder",
        "first_name": "John",
        "last_name": "Doe"
      }
    ]
  }
}

Responses

Status Meaning Description Schema
200 OK Response containing team details. Inline
404 Not Found Given team_id doesn't match any of user's teams. None

Response Schema

Status Code 200

Name Type Required Restrictions Description
» data teamDetails false none Detailed team data.
»» id string false none Team id
»» name string false none Team name
»» organisation string false none Organisation name
»» created string(date-time) false none Time when the team is created
»» modified string(date-time) false none Last time modified
»» players [player] false none Team players
»»» player_id string false none Player id
»»» player_number integer(int32) false none Player number
»»» role string false none Player role
»»» first_name string false none Player first name
»»» last_name string false none Player last name

Team training sessions

Endpoints for getting team training sessions and details.

Get team training sessions.

Code samples

# You can also use wget
curl -X GET https://teampro.api.polar.com/v1/teams/{team_id}/training_sessions \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer {access-token}'

GET https://teampro.api.polar.com/v1/teams/{team_id}/training_sessions HTTP/1.1
Host: teampro.api.polar.com
Accept: application/json

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',  'Authorization':'Bearer {access-token}'
};

fetch('https://teampro.api.polar.com/v1/teams/{team_id}/training_sessions',
{
  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://teampro.api.polar.com/v1/teams/{team_id}/training_sessions',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://teampro.api.polar.com/v1/teams/{team_id}/training_sessions', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://teampro.api.polar.com/v1/teams/{team_id}/training_sessions");
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 /v1/teams/{team_id}/training_sessions

Parameters

Parameter In Type Required Description
team_id path string true Team whose training session are returned.
since query string(date-time) false Return training sessions having record_start_time greater than .
until query string(date-time) false Return training sessions having record_start_time less than
pagination query paginationQuery false Pagination parameters

Example responses

200 Response

{
  "data": [
    {
      "id": "R8rMB4j7",
      "team_id": "wMYz6L4w",
      "name": "Match against Brazil national team",
      "type": "MATCH",
      "note": "Game started very well, but we lost 0-8",
      "created": "2017-04-13T21:06:58Z",
      "modified": "2017-04-13T21:06:58Z",
      "record_start_time": "2017-04-14T09:17:22",
      "record_end_time": "2017-04-14T09:56:47",
      "start_time": "2017-04-14T09:20:06",
      "end_time": "2017-04-14T09:50:06",
      "latitude": 55.67336654663086,
      "longitude": 12.49395084381104,
      "sport": "SOCCER"
    }
  ],
  "page": {
    "per_page": 20,
    "total_elements": 2,
    "page_number": 0,
    "total_pages": 1
  }
}

Responses

Status Meaning Description Schema
200 OK Teams training sessions. Inline
404 Not Found Given team_id doesn't match any of users's teams. None

Response Schema

Status Code 200

Name Type Required Restrictions Description
» data [trainingSession] false none List of team training sessions.
»» id string false none Training session id
»» team_id string false none Team id
»» name string false none Training session name
»» type string false none Training session type
»» note string false none Notes from training session
»» created string(date-time) false none Time when the training session is created
»» modified string(date-time) false none Last time modified
»» record_start_time string(date-time) false none Training session record start time
»» record_end_time string(date-time) false none Training session record end time
»» start_time string(date-time) false none Training session start time
»» end_time string(date-time) false none Training session end time
»» latitude number false none Start latitude of the training session
»» longitude number false none Start longitude of the training session
»» sport string false none Sport type
» page paginationResponse false none Pagination info in response. Model contains info about response element count and paging.
»» per_page integer false none Items per page
»» total_elements integer false none Total number of items
»» page_number integer false none Number of the current page
»» total_pages integer false none Total number of pages

Enumerated Values

Property Value
type TRAINING
type DRILL
type TEST
type GAME
type MATCH
type STRENGTH AND CONDITION
type OTHER

Get team training session details.

Code samples

# You can also use wget
curl -X GET https://teampro.api.polar.com/v1/teams/training_sessions/{training_session_id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer {access-token}'

GET https://teampro.api.polar.com/v1/teams/training_sessions/{training_session_id} HTTP/1.1
Host: teampro.api.polar.com
Accept: application/json

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',  'Authorization':'Bearer {access-token}'
};

fetch('https://teampro.api.polar.com/v1/teams/training_sessions/{training_session_id}',
{
  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://teampro.api.polar.com/v1/teams/training_sessions/{training_session_id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://teampro.api.polar.com/v1/teams/training_sessions/{training_session_id}', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://teampro.api.polar.com/v1/teams/training_sessions/{training_session_id}");
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 /v1/teams/training_sessions/{training_session_id}

Parameters

Parameter In Type Required Description
training_session_id path string true Training session id.

Example responses

200 Response

{
  "data": {
    "id": "R8rMB4j7",
    "team_id": "wMYz6L4w",
    "name": "Match against Brazil national team",
    "type": "MATCH",
    "note": "Game started very well, but we lost 0-8",
    "created": "2017-04-13T21:06:58Z",
    "modified": "2017-04-13T21:06:58Z",
    "record_start_time": "2017-04-14T09:17:22",
    "record_end_time": "2017-04-14T09:56:47",
    "start_time": "2017-04-14T09:20:06",
    "end_time": "2017-04-14T09:50:06",
    "latitude": 55.67336654663086,
    "longitude": 12.49395084381104,
    "sport": "SOCCER",
    "arena": "Valby old stadium Denmark",
    "participants": [
      {
        "player_id": "ZmozZxkr",
        "player_number": 12,
        "role": "Midfielder",
        "player_session_id": "wp9DQ9ln"
      }
    ],
    "markers": [
      {
        "start_time": "2020-08-24T10:28:43.464Z",
        "end_time": "2020-08-24T10:28:43.464Z",
        "marker_type": "PHASE",
        "name": "Intervals",
        "note": "Cooling down"
      }
    ]
  }
}

Responses

Status Meaning Description Schema
200 OK Training session details as JSON. Inline
404 Not Found Given training_session_id doesn't match any of user's training sessions. None

Response Schema

Status Code 200

Name Type Required Restrictions Description
» data trainingSessionDetails false none Team training session details.
»» id string false none Training session id
»» team_id string false none Team id
»» name string false none Training session name
»» type string false none Training session type
»» note string false none Notes from training session
»» created string(date-time) false none Time when the training session is created
»» modified string(date-time) false none Last time modified
»» record_start_time string(date-time) false none Training session record start time
»» record_end_time string(date-time) false none Training session record end time
»» start_time string(date-time) false none Training session start time
»» end_time string(date-time) false none Training session end time
»» latitude number false none Start latitude of the training session
»» longitude number false none Start longitude of the training session
»» sport string false none Sport type
»» arena string false none Game arena
»» participants [participant] false none [Training session participant.]
»»» player_id string false none Player id
»»» player_number integer(int32) false none Player number
»»» role string false none Player role
»»» player_session_id string false none Player training session id
»» markers [marker] false none [Training session marker.i]
»»» start_time string(date-time) false none Start time of the marker
»»» end_time string(date-time) false none End time of the marker
»»» marker_type string false none Marker type
»»» name string false none Marker name
»»» note string false none Marker note

Enumerated Values

Property Value
marker_type PHASE
marker_type NOTE
marker_type RECOVERY

Player training sessions

Endpoints for getting players training session and details.

Get player training sessions.

Code samples

# You can also use wget
curl -X GET https://teampro.api.polar.com/v1/players/{player_id}/training_sessions \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer {access-token}'

GET https://teampro.api.polar.com/v1/players/{player_id}/training_sessions HTTP/1.1
Host: teampro.api.polar.com
Accept: application/json

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',  'Authorization':'Bearer {access-token}'
};

fetch('https://teampro.api.polar.com/v1/players/{player_id}/training_sessions',
{
  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://teampro.api.polar.com/v1/players/{player_id}/training_sessions',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://teampro.api.polar.com/v1/players/{player_id}/training_sessions', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://teampro.api.polar.com/v1/players/{player_id}/training_sessions");
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 /v1/players/{player_id}/training_sessions

Parameters

Parameter In Type Required Description
player_id path string true Player id
since query string(date-time) false Return training sessions having record_start_time greater than .
until query string(date-time) false Return training sessions having record_start_time less than
type query string false Return all, individual or team training sessions.
pagination query paginationQuery false Pagination parameters

Enumerated Values

Parameter Value
type ALL
type TEAM
type INDIVIDUAL

Example responses

200 Response

{
  "data": [
    {
      "id": "wp9DQ9ln",
      "type": "TEAM",
      "created": "2017-04-13T21:06:58Z",
      "modified": "2017-04-13T21:06:58Z",
      "sport": "SOCCER",
      "name": "Rowing",
      "feeling": "AWESOME,",
      "note": "Awesome training.",
      "latitude": 55.67336654663086,
      "longitude": 12.49395084381104,
      "start_time": "2017-04-14T09:20:06",
      "stop_time": "2017-04-14T09:50:06",
      "duration_ms": 180000,
      "timezone_offset": 120
    }
  ],
  "page": {
    "per_page": 20,
    "total_elements": 2,
    "page_number": 0,
    "total_pages": 1
  }
}

Responses

Status Meaning Description Schema
200 OK Response containing list of player training sessions. Inline
404 Not Found Given player_id doesn't match any of user's players. None

Response Schema

Status Code 200

Name Type Required Restrictions Description
» data [playerTrainingSession] false none List of player training sessions.
»» id string false none Player training session id
»» type string false none Type of the training session. TEAM for team training session and INDIVIDUAL for players' personal training session.
»» created string(date-time) false none Time when the training session is created
»» modified string(date-time) false none Last time modified
»» sport string false none Sport type
»» name string false none Training session name
»» feeling string false none Training session feeling
»» note string false none Training session note
»» latitude number false none Start latitude of the training session
»» longitude number false none Start longitude of the training session
»» start_time string(date-time) false none Start time of the marker
»» stop_time string(date-time) false none End time of the marker
»» duration_ms number false none Duration in milliseconds
»» timezone_offset integer false none Timezone offset for training session
» page paginationResponse false none Pagination info in response. Model contains info about response element count and paging.
»» per_page integer false none Items per page
»» total_elements integer false none Total number of items
»» page_number integer false none Number of the current page
»» total_pages integer false none Total number of pages

Enumerated Values

Property Value
type TEAM
type INDIVIDUAL
feeling BAD
feeling NOT_GOOD
feeling OKAY
feeling GREAT
feeling AWESOME

Get player training session details.

Code samples

# You can also use wget
curl -X GET https://teampro.api.polar.com/v1/training_sessions/{player_session_id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer {access-token}'

GET https://teampro.api.polar.com/v1/training_sessions/{player_session_id} HTTP/1.1
Host: teampro.api.polar.com
Accept: application/json

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',  'Authorization':'Bearer {access-token}'
};

fetch('https://teampro.api.polar.com/v1/training_sessions/{player_session_id}',
{
  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://teampro.api.polar.com/v1/training_sessions/{player_session_id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://teampro.api.polar.com/v1/training_sessions/{player_session_id}', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://teampro.api.polar.com/v1/training_sessions/{player_session_id}");
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 /v1/training_sessions/{player_session_id}

Parameters

Parameter In Type Required Description
player_session_id path string true Players' training session id.
samples query string false Include requested samples in response. Possible values are "all" or comma-separated list from "distance", "location", "hr", "speed", "cadence", "altitude", "forward_acceleration", "rr".

Example responses

200 Response

{
  "data": {
    "id": "wp9DQ9ln",
    "type": "TEAM",
    "created": "2017-04-13T21:06:58Z",
    "modified": "2017-04-13T21:06:58Z",
    "name": "Rowing",
    "feeling": "AWESOME,",
    "note": "Awesome training.",
    "latitude": 55.67336654663086,
    "longitude": 12.49395084381104,
    "start_time": "2017-04-14T09:20:06",
    "stop_time": "2017-04-14T09:50:06",
    "duration_ms": 180000,
    "calories": 601,
    "distance_meters": 6566,
    "training_load": 78,
    "recovery_time_ms": 480277990,
    "fat_percentage": 28,
    "heart_rate_max": 96,
    "heart_rate_avg": 79,
    "sport": "SOCCER",
    "running_index": 28,
    "ascent": 46.3,
    "descent": 12.5,
    "sprint_counter": 12,
    "product": "Polar Pro",
    "samples": {
      "fields": [
        "time",
        "distance",
        "hr",
        "speed",
        "cadence",
        "lat",
        "lon",
        "altitude",
        "forward_acceleration"
      ],
      "values": [
        [
          "PT0S",
          0,
          94,
          0,
          0,
          55.67336654663086,
          12.49395084381104,
          null,
          0
        ],
        [
          "PT0.1S",
          0,
          null,
          0,
          null,
          null,
          null,
          null,
          0.04
        ],
        [
          "PT0.2S",
          0,
          null,
          0,
          null,
          null,
          null,
          null,
          -0.02
        ]
      ]
    },
    "rr_intervals": [
      485,
      483,
      null,
      800,
      483,
      486,
      483,
      null,
      950,
      281
    ]
  }
}

Responses

Status Meaning Description Schema
200 OK Player training session as JSON. Inline
404 Not Found Given player_session_id doesn't match any of user's training sessions. None

Response Schema

Status Code 200

Name Type Required Restrictions Description
» data playerTrainingSessionDetails false none Detailed info about player training session.
»» id string false none Player training session id
»» type string false none Type of the training session. TEAM for team training session and INDIVIDUAL for players personal training session.
»» created string(date-time) false none Time when the training session is created
»» modified string(date-time) false none Time when the training session is modified last
»» name string false none Training session name
»» feeling string false none Training session feeling
»» note string false none Training session note
»» latitude number false none Start latitude of the training session
»» longitude number false none Start longitude of the training session
»» start_time string(date-time) false none Start time of the marker
»» stop_time string(date-time) false none End time of the marker
»» duration_ms number false none Duration in milliseconds
»» calories number false none Training session calory consumption in kilo calories
»» distance_meters number false none Distance in meters
»» training_load number false none Training load of the training session
»» recovery_time_ms number false none Recovery time in milliseconds
»» fat_percentage integer false none Fat percentage
»» heart_rate_max integer false none Maximum heart rate of the training session
»» heart_rate_avg integer false none Average heart rate of the training session
»» sport string false none Sport type
»» running_index integer false none Running index value from training session
»» ascent number false none Ascent in meters
»» descent number false none Descent in meters
»» sprint_counter integer false none Sprint count.
»» product string false none Product used to save the training session
»» samples trainingSessionSamples false none Sample model contains two properties, fields and values. Fields contains list of sample types which are available in values. Values contains list of sample value lists. Each sample value list has duration as first item which tells the record time (from the beginning of the training) of the samples. Next values in array contains the sample value itself.
»»» fields [string] false none List of sample types which are present in values property.
»»» values [array] false none List of sample value lists.
»» rr_intervals [integer] false none List of rr-intervals.

Enumerated Values

Property Value
type TEAM
type INDIVIDUAL
feeling BAD
feeling NOT_GOOD
feeling OKAY
feeling GREAT
feeling AWESOME

Get player team training session trimmed values.

Code samples

# You can also use wget
curl -X GET https://teampro.api.polar.com/v1/training_sessions/{player_session_id}/session_summary \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer {access-token}'

GET https://teampro.api.polar.com/v1/training_sessions/{player_session_id}/session_summary HTTP/1.1
Host: teampro.api.polar.com
Accept: application/json

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',  'Authorization':'Bearer {access-token}'
};

fetch('https://teampro.api.polar.com/v1/training_sessions/{player_session_id}/session_summary',
{
  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://teampro.api.polar.com/v1/training_sessions/{player_session_id}/session_summary',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://teampro.api.polar.com/v1/training_sessions/{player_session_id}/session_summary', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://teampro.api.polar.com/v1/training_sessions/{player_session_id}/session_summary");
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 /v1/training_sessions/{player_session_id}/session_summary

Parameters

Parameter In Type Required Description
player_session_id path string true Players' training session id.

Example responses

200 Response

{
  "data": {
    "player_session_id": "wp9DQ9ln",
    "created": "2017-04-13T21:06:58Z",
    "modified": "2017-04-13T21:06:58Z",
    "trimmed_start_time": "2017-04-14T09:20:06",
    "duration_ms": 180000,
    "distance_meters": 6566,
    "kilo_calories": 601,
    "heart_rate_max": 160,
    "heart_rate_avg": 120,
    "heart_rate_min": 55,
    "heart_rate_max_percent": 96,
    "heart_rate_avg_percent": 79,
    "heart_rate_min_percent": 55,
    "sprint_counter": 12,
    "speed_avg_kmh": 7.9,
    "speed_max_kmh": 18.4,
    "cadence_avg": 60,
    "cadence_max": 100,
    "training_load": 180,
    "heart_rate_zones": [
      {
        "index": 1,
        "lower-limit": 110,
        "upper-limit": 130,
        "in-zone": "PT4S"
      }
    ],
    "speed_zones_kmh": [
      {
        "index": 1,
        "lower-limit": 3,
        "upper-limit": 7,
        "in-zone_meters": 222
      }
    ],
    "acceleration_zones_ms2": [
      {
        "limit": -3,
        "counter": 22
      }
    ]
  }
}

Responses

Status Meaning Description Schema
200 OK Player team training session trimmed values as JSON. Inline
404 Not Found Given player_session_id doesn't match any of user's training sessions. None

Response Schema

Status Code 200

Name Type Required Restrictions Description
» data playerTeamTrainingSessionDetails false none Detailed info about player's team training session.
»» player_session_id string false none Player training session id
»» created string(date-time) false none Time when the training session is added to team training session
»» modified string(date-time) false none Time when the team training session is modified last
»» trimmed_start_time string(date-time) false none Start time of the team training session - local time
»» duration_ms number false none Duration of the team training session in milliseconds
»» distance_meters number false none Distance of the training session in meters
»» kilo_calories number false none Calory consumption of the training session in kilo calories
»» heart_rate_max integer false none Maximum heart rate of the training session
»» heart_rate_avg integer false none Average heart rate of the training session
»» heart_rate_min integer false none Minimum heart rate of the training session
»» heart_rate_max_percent integer false none Maximum heart rate percent of the training session
»» heart_rate_avg_percent integer false none Average heart rate percent of the training session
»» heart_rate_min_percent integer false none Minimum heart rate percent of the training session
»» sprint_counter integer false none Sprint count of the training session.
»» speed_avg_kmh integer false none Average speed of the training session
»» speed_max_kmh integer false none Maximum speed of the training session
»» cadence_avg integer false none Average cadence of the training session
»» cadence_max integer false none Maximum cadence of the training session
»» training_load number false none Training load of the training session
»» heart_rate_zones [heart_rate_zone] false none List of heart rate zones.
»»» index integer false none Zone list index
»»» lower-limit integer false none Lower heart-rate boundary of the zone
»»» upper-limit integer false none Upper heart-rate boundary of the zone
»»» in-zone string false none Time duration spent in the zone ISO 8601
»» speed_zones_kmh [speed_zone_kmh] false none List of speed zones.
»»» index integer false none Zone list index
»»» lower-limit integer false none Lower speed boundary of the zone
»»» upper-limit integer false none Upper speed boundary of the zone
»»» in-zone_meters number false none Distance in meters in the zone
»» acceleration_zones_ms2 [acceleration_zone_ms2] false none List of acceleration zones.
»»» limit integer false none Lower acceleration boundary of the zone in m/s2
»»» counter number false none Acceleration count of current acceleration zone

Schemas

marker

{
  "start_time": "2020-08-24T10:28:43.481Z",
  "end_time": "2020-08-24T10:28:43.481Z",
  "marker_type": "PHASE",
  "name": "Intervals",
  "note": "Cooling down"
}

Training session marker.i

Properties

Name Type Required Restrictions Description
start_time string(date-time) false none Start time of the marker
end_time string(date-time) false none End time of the marker
marker_type string false none Marker type
name string false none Marker name
note string false none Marker note

Enumerated Values

Property Value
marker_type PHASE
marker_type NOTE
marker_type RECOVERY

paginationResponse

{
  "per_page": 20,
  "total_elements": 2,
  "page_number": 0,
  "total_pages": 1
}

Pagination info in response. Model contains info about response element count and paging.

Properties

Name Type Required Restrictions Description
per_page integer false none Items per page
total_elements integer false none Total number of items
page_number integer false none Number of the current page
total_pages integer false none Total number of pages

paginationQuery

"?page=3&per_page=20"

Endpoints that return multiple items are paginated to 20 items by default. To request next page, use page parameter in request. Total number of elements and pages are returned in response in page property, see paginationResponse.

Properties

Name Type Required Restrictions Description
page integer false none Page number, starting from 0
per_page integer false none Number of elements to be returned per page. Value must be between 1 and 100.

participant

{
  "player_id": "ZmozZxkr",
  "player_number": 12,
  "role": "Midfielder",
  "player_session_id": "wp9DQ9ln"
}

Training session participant.

Properties

Name Type Required Restrictions Description
player_id string false none Player id
player_number integer(int32) false none Player number
role string false none Player role
player_session_id string false none Player training session id

player

{
  "player_id": "ZmozZxkr",
  "player_number": 12,
  "role": "Midfielder",
  "first_name": "John",
  "last_name": "Doe"
}

Player data.

Properties

Name Type Required Restrictions Description
player_id string false none Player id
player_number integer(int32) false none Player number
role string false none Player role
first_name string false none Player first name
last_name string false none Player last name

playerTrainingSession

{
  "id": "wp9DQ9ln",
  "type": "TEAM",
  "created": "2017-04-13T21:06:58Z",
  "modified": "2017-04-13T21:06:58Z",
  "sport": "SOCCER",
  "name": "Rowing",
  "feeling": "AWESOME,",
  "note": "Awesome training.",
  "latitude": 55.67336654663086,
  "longitude": 12.49395084381104,
  "start_time": "2017-04-14T09:20:06",
  "stop_time": "2017-04-14T09:50:06",
  "duration_ms": 180000,
  "timezone_offset": 120
}

Playert training session data used in player training session listing.

Properties

Name Type Required Restrictions Description
id string false none Player training session id
type string false none Type of the training session. TEAM for team training session and INDIVIDUAL for players' personal training session.
created string(date-time) false none Time when the training session is created
modified string(date-time) false none Last time modified
sport string false none Sport type
name string false none Training session name
feeling string false none Training session feeling
note string false none Training session note
latitude number false none Start latitude of the training session
longitude number false none Start longitude of the training session
start_time string(date-time) false none Start time of the marker
stop_time string(date-time) false none End time of the marker
duration_ms number false none Duration in milliseconds
timezone_offset integer false none Timezone offset for training session

Enumerated Values

Property Value
type TEAM
type INDIVIDUAL
feeling BAD
feeling NOT_GOOD
feeling OKAY
feeling GREAT
feeling AWESOME

playerTrainingSessionDetails

{
  "id": "wp9DQ9ln",
  "type": "TEAM",
  "created": "2017-04-13T21:06:58Z",
  "modified": "2017-04-13T21:06:58Z",
  "name": "Rowing",
  "feeling": "AWESOME,",
  "note": "Awesome training.",
  "latitude": 55.67336654663086,
  "longitude": 12.49395084381104,
  "start_time": "2017-04-14T09:20:06",
  "stop_time": "2017-04-14T09:50:06",
  "duration_ms": 180000,
  "calories": 601,
  "distance_meters": 6566,
  "training_load": 78,
  "recovery_time_ms": 480277990,
  "fat_percentage": 28,
  "heart_rate_max": 96,
  "heart_rate_avg": 79,
  "sport": "SOCCER",
  "running_index": 28,
  "ascent": 46.3,
  "descent": 12.5,
  "sprint_counter": 12,
  "product": "Polar Pro",
  "samples": {
    "fields": [
      "time",
      "distance",
      "hr",
      "speed",
      "cadence",
      "lat",
      "lon",
      "altitude",
      "forward_acceleration"
    ],
    "values": [
      [
        "PT0S",
        0,
        94,
        0,
        0,
        55.67336654663086,
        12.49395084381104,
        null,
        0
      ],
      [
        "PT0.1S",
        0,
        null,
        0,
        null,
        null,
        null,
        null,
        0.04
      ],
      [
        "PT0.2S",
        0,
        null,
        0,
        null,
        null,
        null,
        null,
        -0.02
      ]
    ]
  },
  "rr_intervals": [
    485,
    483,
    null,
    800,
    483,
    486,
    483,
    null,
    950,
    281
  ]
}

Detailed info about player training session.

Properties

Name Type Required Restrictions Description
id string false none Player training session id
type string false none Type of the training session. TEAM for team training session and INDIVIDUAL for players personal training session.
created string(date-time) false none Time when the training session is created
modified string(date-time) false none Time when the training session is modified last
name string false none Training session name
feeling string false none Training session feeling
note string false none Training session note
latitude number false none Start latitude of the training session
longitude number false none Start longitude of the training session
start_time string(date-time) false none Start time of the marker
stop_time string(date-time) false none End time of the marker
duration_ms number false none Duration in milliseconds
calories number false none Training session calory consumption in kilo calories
distance_meters number false none Distance in meters
training_load number false none Training load of the training session
recovery_time_ms number false none Recovery time in milliseconds
fat_percentage integer false none Fat percentage
heart_rate_max integer false none Maximum heart rate of the training session
heart_rate_avg integer false none Average heart rate of the training session
sport string false none Sport type
running_index integer false none Running index value from training session
ascent number false none Ascent in meters
descent number false none Descent in meters
sprint_counter integer false none Sprint count.
product string false none Product used to save the training session
samples trainingSessionSamples false none Sample model contains two properties, fields and values. Fields contains list of sample types which are available in values. Values contains list of sample value lists. Each sample value list has duration as first item which tells the record time (from the beginning of the training) of the samples. Next values in array contains the sample value itself.
rr_intervals [integer] false none List of rr-intervals.

Enumerated Values

Property Value
type TEAM
type INDIVIDUAL
feeling BAD
feeling NOT_GOOD
feeling OKAY
feeling GREAT
feeling AWESOME

playerTeamTrainingSessionDetails

{
  "player_session_id": "wp9DQ9ln",
  "created": "2017-04-13T21:06:58Z",
  "modified": "2017-04-13T21:06:58Z",
  "trimmed_start_time": "2017-04-14T09:20:06",
  "duration_ms": 180000,
  "distance_meters": 6566,
  "kilo_calories": 601,
  "heart_rate_max": 160,
  "heart_rate_avg": 120,
  "heart_rate_min": 55,
  "heart_rate_max_percent": 96,
  "heart_rate_avg_percent": 79,
  "heart_rate_min_percent": 55,
  "sprint_counter": 12,
  "speed_avg_kmh": 7.9,
  "speed_max_kmh": 18.4,
  "cadence_avg": 60,
  "cadence_max": 100,
  "training_load": 180,
  "heart_rate_zones": [
    {
      "index": 1,
      "lower-limit": 110,
      "upper-limit": 130,
      "in-zone": "PT4S"
    }
  ],
  "speed_zones_kmh": [
    {
      "index": 1,
      "lower-limit": 3,
      "upper-limit": 7,
      "in-zone_meters": 222
    }
  ],
  "acceleration_zones_ms2": [
    {
      "limit": -3,
      "counter": 22
    }
  ]
}

Detailed info about player's team training session.

Properties

Name Type Required Restrictions Description
player_session_id string false none Player training session id
created string(date-time) false none Time when the training session is added to team training session
modified string(date-time) false none Time when the team training session is modified last
trimmed_start_time string(date-time) false none Start time of the team training session - local time
duration_ms number false none Duration of the team training session in milliseconds
distance_meters number false none Distance of the training session in meters
kilo_calories number false none Calory consumption of the training session in kilo calories
heart_rate_max integer false none Maximum heart rate of the training session
heart_rate_avg integer false none Average heart rate of the training session
heart_rate_min integer false none Minimum heart rate of the training session
heart_rate_max_percent integer false none Maximum heart rate percent of the training session
heart_rate_avg_percent integer false none Average heart rate percent of the training session
heart_rate_min_percent integer false none Minimum heart rate percent of the training session
sprint_counter integer false none Sprint count of the training session.
speed_avg_kmh integer false none Average speed of the training session
speed_max_kmh integer false none Maximum speed of the training session
cadence_avg integer false none Average cadence of the training session
cadence_max integer false none Maximum cadence of the training session
training_load number false none Training load of the training session
heart_rate_zones [heart_rate_zone] false none List of heart rate zones.
speed_zones_kmh [speed_zone_kmh] false none List of speed zones.
acceleration_zones_ms2 [acceleration_zone_ms2] false none List of acceleration zones.

heart_rate_zone

{
  "index": 1,
  "lower-limit": 110,
  "upper-limit": 130,
  "in-zone": "PT4S"
}

Heart-rate zone information

Properties

Name Type Required Restrictions Description
index integer false none Zone list index
lower-limit integer false none Lower heart-rate boundary of the zone
upper-limit integer false none Upper heart-rate boundary of the zone
in-zone string false none Time duration spent in the zone ISO 8601

speed_zone_kmh

{
  "index": 1,
  "lower-limit": 3,
  "upper-limit": 7,
  "in-zone_meters": 222
}

Speed zone information

Properties

Name Type Required Restrictions Description
index integer false none Zone list index
lower-limit integer false none Lower speed boundary of the zone
upper-limit integer false none Upper speed boundary of the zone
in-zone_meters number false none Distance in meters in the zone

acceleration_zone_ms2

{
  "limit": -3,
  "counter": 22
}

Acceleration zone information

Properties

Name Type Required Restrictions Description
limit integer false none Lower acceleration boundary of the zone in m/s2
counter number false none Acceleration count of current acceleration zone

team

{
  "id": "wMYz6L4w",
  "name": "Team1",
  "organisation": "Organisation1",
  "created": "2017-04-13T21:06:58Z",
  "modified": "2017-04-13T21:06:58Z"
}

Basic info of team used in listing.

Properties

Name Type Required Restrictions Description
id string false none Team id
name string false none Team name
organisation string false none Organisation name
created string(date-time) false none Time when the team is created
modified string(date-time) false none Last time modified

teamDetails

{
  "id": "wMYz6L4w",
  "name": "Team1",
  "organisation": "Organisation1",
  "created": "2017-04-13T21:06:58Z",
  "modified": "2017-04-13T21:06:58Z",
  "players": [
    {
      "player_id": "ZmozZxkr",
      "player_number": 12,
      "role": "Midfielder",
      "first_name": "John",
      "last_name": "Doe"
    }
  ]
}

Detailed team data.

Properties

Name Type Required Restrictions Description
id string false none Team id
name string false none Team name
organisation string false none Organisation name
created string(date-time) false none Time when the team is created
modified string(date-time) false none Last time modified
players [player] false none Team players

trainingSession

{
  "id": "R8rMB4j7",
  "team_id": "wMYz6L4w",
  "name": "Match against Brazil national team",
  "type": "MATCH",
  "note": "Game started very well, but we lost 0-8",
  "created": "2017-04-13T21:06:58Z",
  "modified": "2017-04-13T21:06:58Z",
  "record_start_time": "2017-04-14T09:17:22",
  "record_end_time": "2017-04-14T09:56:47",
  "start_time": "2017-04-14T09:20:06",
  "end_time": "2017-04-14T09:50:06",
  "latitude": 55.67336654663086,
  "longitude": 12.49395084381104,
  "sport": "SOCCER"
}

Team training session data used in team training session listing.

Properties

Name Type Required Restrictions Description
id string false none Training session id
team_id string false none Team id
name string false none Training session name
type string false none Training session type
note string false none Notes from training session
created string(date-time) false none Time when the training session is created
modified string(date-time) false none Last time modified
record_start_time string(date-time) false none Training session record start time
record_end_time string(date-time) false none Training session record end time
start_time string(date-time) false none Training session start time
end_time string(date-time) false none Training session end time
latitude number false none Start latitude of the training session
longitude number false none Start longitude of the training session
sport string false none Sport type

Enumerated Values

Property Value
type TRAINING
type DRILL
type TEST
type GAME
type MATCH
type STRENGTH AND CONDITION
type OTHER

trainingSessionDetails

{
  "id": "R8rMB4j7",
  "team_id": "wMYz6L4w",
  "name": "Match against Brazil national team",
  "type": "MATCH",
  "note": "Game started very well, but we lost 0-8",
  "created": "2017-04-13T21:06:58Z",
  "modified": "2017-04-13T21:06:58Z",
  "record_start_time": "2017-04-14T09:17:22",
  "record_end_time": "2017-04-14T09:56:47",
  "start_time": "2017-04-14T09:20:06",
  "end_time": "2017-04-14T09:50:06",
  "latitude": 55.67336654663086,
  "longitude": 12.49395084381104,
  "sport": "SOCCER",
  "arena": "Valby old stadium Denmark",
  "participants": [
    {
      "player_id": "ZmozZxkr",
      "player_number": 12,
      "role": "Midfielder",
      "player_session_id": "wp9DQ9ln"
    }
  ],
  "markers": [
    {
      "start_time": "2020-08-24T10:28:43.498Z",
      "end_time": "2020-08-24T10:28:43.498Z",
      "marker_type": "PHASE",
      "name": "Intervals",
      "note": "Cooling down"
    }
  ]
}

Team training session details.

Properties

Name Type Required Restrictions Description
id string false none Training session id
team_id string false none Team id
name string false none Training session name
type string false none Training session type
note string false none Notes from training session
created string(date-time) false none Time when the training session is created
modified string(date-time) false none Last time modified
record_start_time string(date-time) false none Training session record start time
record_end_time string(date-time) false none Training session record end time
start_time string(date-time) false none Training session start time
end_time string(date-time) false none Training session end time
latitude number false none Start latitude of the training session
longitude number false none Start longitude of the training session
sport string false none Sport type
arena string false none Game arena
participants [participant] false none [Training session participant.]
markers [marker] false none [Training session marker.i]

trainingSessionSamples

{
  "fields": [
    "time",
    "distance",
    "hr",
    "speed",
    "cadence",
    "lat",
    "lon",
    "altitude",
    "forward_acceleration"
  ],
  "values": [
    [
      "PT0S",
      0,
      94,
      0,
      0,
      55.67336654663086,
      12.49395084381104,
      null,
      0
    ],
    [
      "PT0.1S",
      0,
      null,
      0,
      null,
      null,
      null,
      null,
      0.04
    ],
    [
      "PT0.2S",
      0,
      null,
      0,
      null,
      null,
      null,
      null,
      -0.02
    ]
  ]
}

Sample model contains two properties, fields and values. Fields contains list of sample types which are available in values. Values contains list of sample value lists. Each sample value list has duration as first item which tells the record time (from the beginning of the training) of the samples. Next values in array contains the sample value itself.

Properties

Name Type Required Restrictions Description
fields [string] false none List of sample types which are present in values property.
values [array] false none List of sample value lists.

Enumerated Values

Property Value Description
fields time Timestamp of sample in ISO 8601 string format, starting from 0.
fields distance Total distance moved in meters, double.
fields hr Heart rate, double.
fields speed Current speed, double.
fields cadence Current cadence, double.
fields lat Location latitude coordinate, double.
fields lon Location longitude coordinate, double.
fields altitude Location altitude, double.
fields forward_acceleration Forward acceleration, double.